如何从bash脚本中ssh?

And*_*rew 60 ssh bash

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

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

我如何从bash脚本中ssh?

hal*_*dan 68

  1. 如果您希望密码提示消失,请使用基于密钥的身份验证(此处描述).

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

root @ host:〜#ssh root @ www'ps -ef | grep apache | grep -v grep | wc -l'

  • 使用分号作为命令分隔符.`cd/var/www; cp foo bar;` (12认同)
  • 如果我有多行(仅为了代码清晰度),如何将其传递给ssh怎么办? (4认同)
  • @blong你可以试试heredoc,请看这里:http://stackoverflow.com/a/4412338/5359531 (2认同)
  • 已经过去了大约 4 年,所以我现在开始了解这里的文档了:)不过,还是感谢您分享这个@user5359531! (2认同)

Sie*_*geX 19

如果您想继续使用密码而不使用密钥交换,那么您可以使用'expect'来完成此操作,如下所示:

#!/usr/bin/expect -f
spawn ssh user@hostname
expect "password:"
sleep 1
send "<your password>\r"
command1
command2
commandN
Run Code Online (Sandbox Code Playgroud)

  • @HamzaSaeed - 您需要先安装expect解释器,尝试运行“sudo apt-get install Expect”然后重试。另外,当我从上面复制并粘贴解释器行时,我在 Windows 中遇到了问题,请尝试在脚本中手动键入它。 (2认同)

Ken*_*ric 5

还有另一种方法可以使用共享连接,即:有人使用密码启动连接,并且每个后续连接将在同一通道上进行多路复用,从而无需重新进行身份验证.(它也更快)

# ~/.ssh/config 
ControlMaster auto
ControlPath ~/.ssh/pool/%r@%h
Run Code Online (Sandbox Code Playgroud)

然后你只需要登录,只要你登录,bash脚本就能打开ssh连接.

然后,当有人尚未通过以下方式打开频道时,您可以停止脚本工作:

ssh ... -o KbdInteractiveAuthentication=no ....
Run Code Online (Sandbox Code Playgroud)