我必须编写一个shell脚本,使用其他用户名ssh到另一台服务器而不实际要求用户输入密码? 由于约束,我无法使用基于密钥的身份验证。 让, 源服务器 - abc.efg.com 来源用户名 - 汤姆 源密码 - tom123
目标服务器 - xyz.efc.com 目标用户名 - bob 目的地密码 - bob123
我必须将bash脚本放在源服务器中。 如果可以使用expect工具和/或sshpass完成某些事情,请告诉我。
我可以在bash脚本中对目标服务器的密码进行硬编码,但是我无法承担交互式会话,只是当我运行脚本时,我想看到目标服务器使用另一个用户名登录。
先谢谢。
答案 0 :(得分:9)
您想使用密钥身份验证http://ornellas.apanela.com/dokuwiki/pub:ssh_key_auth
ssh-keygen
ssh-copy-id -i ~/.ssh/id_rsa.pub me@otherhost.com
ssh me@otherhost.com
答案 1 :(得分:3)
你可以使用expect来包装ssh,但是它非常繁忙,并且在出现网络错误时很容易失败,所以要测试它或者使用专门用于包装ssh密码的脚本。基于密钥的身份验证更好。
您可以通过从空设备重定向标准输入来阻止交互式会话,即
ssh me@destination destination-command < /dev/null
关于将脚本放在源服务器中,如果您运行的脚本是本地脚本而不是远程脚本,那么您可以在标准输入而不是命令行上传递脚本:
cat bashscript.sh | ssh me@destination
答案 2 :(得分:1)
答案是你不能像OpenSSH那样主动防止基于密码的无头认证。使用基于密钥的身份验证。
您可以分叉OpenSSH客户端代码并对其进行修补,但我认为这有点过分。
答案 3 :(得分:1)
您可以安装sshpass
程序,它可以让您编写像
#!/bin/bash
sshpass -p bob123 ssh UserName@xyz.efc.com