我需要创建一个自动向OpenSSH ssh客户端输入密码的脚本。

假设我需要使用密码a1234b SSH到myname@somehost。

我已经试过了……

#~/bin/myssh.sh
ssh myname@somehost
a1234b

...但这并不奏效。

如何将此功能放入脚本中?


当前回答

在脚本中使用脚本tossh,第一个参数是主机名,第二个参数是密码。

#!/usr/bin/expect
set pass [lindex $argv 1]
set host [lindex $argv 0]
spawn ssh -t root@$host echo Hello
expect "*assword: " 
send "$pass\n";
interact"

其他回答

我有一个更好的解决方案,包括登录您的帐户,而不是更改为根用户。 它是一个bash脚本

http://felipeferreira.net/index.php/2011/09/ssh-automatic-login/

在下面的例子中,我将写下我使用的解决方案:

场景:我想用sh脚本从服务器复制文件:

#!/usr/bin/expect
$PASSWORD=password
my_script=$(expect -c "spawn scp userName@server-name:path/file.txt /home/Amine/Bureau/trash/test/
expect \"password:\"
send \"$PASSWORD\r\"
expect \"#\"
send \"exit \r\"
")

echo "$my_script"

在寻找这个问题的答案几个月后,我终于找到了一个更好的解决方案:写一个简单的脚本。

#!/usr/bin/expect

set timeout 20

set cmd [lrange $argv 1 end]
set password [lindex $argv 0]

eval spawn $cmd
expect "password:"
send "$password\r";
interact

把它放在/usr/bin/exp,所以你可以使用:

Exp <password> SSH <任何> Exp <password> SCP <anysrc> <anydst>

完成了!

这应该在大多数情况下都有帮助(你需要先安装sshpass !):

#!/usr/bin/bash
read -p 'Enter Your Username: ' UserName;
read -p 'Enter Your Password: ' Password;
read -p 'Enter Your Domain Name: ' Domain;

sshpass -p "$Password" ssh -o StrictHostKeyChecking=no $UserName@$Domain

这基本上是abbotto的答案的扩展,有一些额外的步骤(针对初学者),使启动你的服务器,从你的linux主机,非常容易:

编写一个简单的bash脚本,例如:

#!/bin/bash

sshpass -p "YOUR_PASSWORD" ssh -o StrictHostKeyChecking=no <YOUR_USERNAME>@<SEVER_IP>

保存文件,例如'startMyServer',然后在你的终端上运行这个命令使文件可执行:

sudo chmod +x startMyServer

将文件移动到“PATH”变量中的文件夹(在终端中运行“echo $PATH”查看这些文件夹)。例如,将它移动到'/usr/bin/'。

瞧,现在你可以通过在终端中输入'startMyServer'进入服务器。

P.S.(1)这不是很安全,请查看ssh密钥以获得更好的安全性。

附注(2)SMshrimant的答案很相似,对一些人来说可能更优雅。但我个人更喜欢使用bash脚本。