如何自动输入密码?

时间:2011-04-01 13:58:01

标签: bash shell ssh automation

我想在计算机列表(Jenkins节点)上安装软件库(SWIG)。我正在使用以下脚本来自动执行此操作:

NODES="10.8.255.70 10.8.255.85 10.8.255.88 10.8.255.86 10.8.255.65 10.8.255.64 10.8.255.97 10.8.255.69"
for node in $NODES; do 
  scp InstallSWIG.sh root@$node:/root/InstallSWIG.sh
  ssh root@$node sh InstallSWIG.sh
done

这种方式是自动化的,除了scp和ssh命令发生的密码请求。

有没有办法以编程方式输入密码?

安全不是问题。我正在寻找不涉及SSH密钥的解决方案。

5 个答案:

答案 0 :(得分:6)

这是expect示例,ssh进入Stripe’s Capture The Flag server并自动输入密码。

expect <<< 'spawn ssh level01@ctf.stri.pe; expect "password:"; send "e9gx26YEb2\r";'

答案 1 :(得分:4)

使用SSH,正确的方法是使用密钥。

# ssh-keygen

然后将*〜/ .ssh / id_rsa.pub *文件复制到远程用户(root @ $ node)到远程用户的.ssh / authorized_keys文件中。

答案 2 :(得分:2)

您可以使用来自sourceforge的小型实用程序empty来执行任务。它与预期类似,但在这种情况下可能更方便。安装完成后,您的第一个scp将通过以下两个命令完成:

./empty -f scp InstallSWIG.sh root@$node:/root/InstallSWIG.sh
echo YOUR_SECRET_PASSWORD | ./empty -s -c

第一个在后台启动你的命令,诱使它认为它在终端上以交互模式运行。另一个从stdin发送数据。当然,由于shell历史被保留,用户能够在ps结果中看到它等等,将密码放在命令行的任何地方都是有风险的。也不安全,但更好的办法是将密码存储在一个文件,并从该文件重定向第二个命令的输入,而不是使用echo和管道。

复制到服务器后,您可以以类似的方式运行脚本:

./empty -f ssh root@$node sh InstallSWIG.sh
echo YOUR_SECRET_PASSWORD | ./empty -s -c

答案 3 :(得分:1)

您可以考虑为此设置无密码的ssh密钥。 Establishing Batch Mode Connections between OpenSSH and SSH2是一个起点,您可以在网上找到关于此主题的大量信息。

答案 4 :(得分:0)

Wes的回答是正确的,但如果你喜欢肮脏和缓慢的事情,你可以使用expect来自动化。