如何从bash脚本中ssh?

时间:2009-12-13 00:33:49

标签: bash ssh

我正在尝试创建一个ssh连接,并在脚本中对远程服务器执行一些操作。

然而终端提示我输入密码,然后在终端窗口而不是脚本中打开连接。在退出连接之前,命令不会执行。

如何在bash脚本中进行ssh?

4 个答案:

答案 0 :(得分:61)

  1. 如果您希望密码提示消失,请使用基于密钥的身份验证(described here)。

  2. 要通过ssh远程运行命令,您必须将它们作为ssh的参数提供,如下所示:

  3.   

    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用户执行此操作!