如何从 bash 脚本中 ssh?

我正在尝试创建一个 ssh 连接,并从脚本中在远程服务器上做一些事情。

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

我如何从 bash 脚本中 ssh?

191226 次浏览
  1. 如果您想让密码提示消失,那么使用基于密钥的身份验证(这里描述的)。

  2. 要在 ssh 上远程运行命令,必须将它们作为 ssh 的参数,如下所示:

Root@host: ~ # ssh root@www‘ ps-ef | grep apache | grep-v grep | wc-l’

如果你想继续使用密码而不使用密钥交换,那么你可以像下面这样用“期望”来实现:

#!/usr/bin/expect -f
spawn ssh user@hostname
expect "password:"
sleep 1
send "<your password>\r"
command1
command2
commandN

还有另一种使用共享连接的方法,即: 有人使用密码初始化连接,并且每个后续连接将在同一信道上多路复用,从而不需要重新验证。(而且速度更快)

# ~/.ssh/config
ControlMaster auto
ControlPath ~/.ssh/pool/%r@%h

然后您只需要登录,只要您登录,bash 脚本就能够打开 ssh 连接。

然后,当某人还没有打开频道时,您可以通过以下方法阻止脚本工作:

ssh ... -o KbdInteractiveAuthentication=no ....