我想在计算机列表(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密钥的解决方案。
答案 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来自动化。