我正在尝试创建一个ssh连接,并在脚本中对远程服务器执行一些操作。
然而终端提示我输入密码,然后在终端窗口而不是脚本中打开连接。在退出连接之前,命令不会执行。
如何在bash脚本中进行ssh?
答案 0 :(得分:61)
如果您希望密码提示消失,请使用基于密钥的身份验证(described here)。
要通过ssh远程运行命令,您必须将它们作为ssh的参数提供,如下所示:
root @ host:〜#ssh root @ www'ps -ef | grep apache | grep -v grep | wc -l'
答案 1 :(得分:16)
如果您想继续使用密码而不使用密钥交换,那么您可以使用'expect'完成此操作:
#!/usr/bin/expect -f
spawn ssh user@hostname
expect "password:"
sleep 1
send "<your password>\r"
command1
command2
commandN
答案 2 :(得分:5)
还有另一种方法可以使用共享连接,即:有人使用密码启动连接,并且每个后续连接将在同一通道上进行多路复用,从而无需重新进行身份验证。 (而且速度也快)
# ~/.ssh/config
ControlMaster auto
ControlPath ~/.ssh/pool/%r@%h
然后你只需要登录,只要你登录,bash脚本就能打开ssh连接。
当某人尚未通过以下方式打开频道时,您可以停止脚本工作:
ssh ... -o KbdInteractiveAuthentication=no ....
答案 3 :(得分:2)
您需要做的是为脚本运行的用户交换SSH密钥。看看this tutorial
执行此操作后,您的脚本将无需输入密码即可运行。但是,出于安全考虑,您不希望为root用户执行此操作!