linux - 在命令中提供密码并执行

标签 linux shell

我是 Linux Shell 脚本的新手。我需要执行一个 shell 脚本,该脚本分别获取用户名、密码、主机名、要执行的命令作为 1、2、3、4 参数。 我使用了 ssh 但它提示输入密码。该脚本的主题是从远程服务器执行命令。密码安全问题不是问题。 主要问题是我不能被提示输入密码。请帮我解决这个问题。

echo username = $1
echo Password = $2
echo Host-Name = $3
echo Command to Be executed = $4
set -x
expect -c "spawn ssh -oStrictHostKeyChecking=no -oCheckHostIP=no $1@$3 $4; expect \"*assword:*\"; send "$2\r";expect eof;"

echo "==============="

我的输出:

username = root
Password = root@123
Host-Name = host-name
Command to Be executed = ls
spawn ssh -oStrictHostKeyChecking=no -oCheckHostIP=no root@host-name ls
root@123r===============

我的命令,即 ls 输出未显示。

在expect命令之前使用set -x之后:

输出:

username = root
Password = root@123
Host-Name = host-name
Command to Be executed = ls
+ expect -c 'spawn ssh -oStrictHostKeyChecking=no -oCheckHostIP=no root@host-name ls; expect "*assword:*"; send root@123r;expect eof;'
spawn ssh -oStrictHostKeyChecking=no -oCheckHostIP=no root@host-name ls
root@123r+ echo 
===============
===============
++ printf '\033]0;%s@%s:%s\007' root RHEL5 '~'

最佳答案

您可以使用以下 shell 命令:

expect -c 'spawn ssh USERNAME@SERVER; expect password:; send "PASSWORD\n"; interact'

您的 Linux 系统中可能没有 expect,但我认为您可以轻松安装它。

关于linux - 在命令中提供密码并执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24321418/

相关文章:

linux 将 localhost 端口重定向到 url 端口

regex - 查找一个字符串并在某些字符前添加一个字符串

linux - 我应该把函数放在哪里,以便在非交互式 ssh session 期间获取它们?

linux - 在函数中维护变量——全局变量

linux - 如何在最小的 linux 安装上 "docker run"一个 shell session 并立即拆除容器?

java - 未在 linux/EC2 实例中创建日志文件

linux - 无法在 Ubuntu 中使用 Cabal

regex - 如何使用 grep 和正则表达式从字符串中提取数字

linux - 找到稍微扭曲的固定宽度文件的长度

linux - 使用 diff 命令查找两个目录之间的差异