在命令中提供密码并执行

时间:2014-06-20 06:41:32

标签: linux shell

我是Linux Shell Scripting的新手。我需要执行一个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 '~'

3 个答案:

答案 0 :(得分:0)

您可以使用以下shell命令:

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

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

答案 1 :(得分:0)

试试这个:

echo username = $1
echo Password = $2
echo IP-Address= $3
echo Command to be executed= $4
expect -c "spawn ssh -oStrictHostKeyChecking=no -oCheckHostIP=no $1@$3 $4; expect \"*assword:*\"; send $2\r; expect eof"

对于基于密钥的登录,请关注this链接。为此,您需要使用空密码生成公钥和私钥。并将您的公钥添加到远程计算机USER / .ssh / authorized_keys。

答案 2 :(得分:0)

这对我有用:

expect -c "spawn ssh -oStrictHostKeyChecking=no -oCheckHostIP=no $1@$3 $4; expect \"*assword:*\"; send \"$2\r\";expect eof;"