【问题标题】:Use Bash to send multiple SSH commands使用 Bash 发送多个 SSH 命令
【发布时间】:2014-10-13 22:13:37
【问题描述】:

这是一个简单而快速的问题,我需要一个答案。我很擅长 bash 并且知道 Java 和 C,但我想保持这个非常简单。这是目标:我在服务器 A 上以 root 身份登录,并希望通过 SSH 向服务器 B C 和 D 发送命令。我想要它,以便它会自动登录服务器(使用密码)并向它们发送命令,从服务器 A 到其他服务器。

所以它会是这样的:

  • 客户端登录到服务器 A 并运行send.sh,它将发送命令。

我将如何在极其简单的 bash 中执行此操作?感谢您的帮助。

【问题讨论】:

  • 密码认证不是极其简单的bash。如果要简单,则需要使用 RSA 密钥或代理身份验证。
  • 不是我推荐它,而是有sshpass 实用程序。
  • 好吧,我想我将只使用公钥。我过去使用过它们,我只是更喜欢密码验证,如果使用密钥更容易连接,那么我会使用它们。

标签: linux bash ssh


【解决方案1】:

三个步骤:

  1. 在所有 4 台机器(a、b、c 和 d)上安装您的 public key。如果您使用的是 openssh,则需要将您的公钥附加到 .ssh/authorized_keys (请参阅OpenSSH),如果您使用的是dropbear,则有点不同。

    当您可以登录到 a ,然后从 ab,从 ac,以及从 ad,无需任何密码提示。

  2. a 上写下你的 ~/send.sh 脚本。由于处理了身份验证,因此脚本就这么简单:

    ssh b 'some_command'
    ssh c 'some_other_command'
    ssh d 'yet_another_command'
    
  3. 在您的机器上运行 ssh 客户端:

    ssh a '~/send.sh'
    

【讨论】:

  • 是的,我正在使用 openSSH,这对我来说很有意义。所以我要做的就是在我的授权密钥中设置公钥,并将密钥文件放在哪个目录中。然后我只运行 ./script.sh 之类的脚本(我使用 putty,因为我不是双启动。
  • 正确。一旦您的公钥无处不在,从一台机器到另一台机器的 ssh'ing 变得微不足道且无需提示,您可以使用简单的ssh machine 'script' 运行远程脚本
【解决方案2】:

我建议使用一个包含命令将通过 ssh 连接到的服务器列表的文件。只需在文件中的每一行输入一个 IP 地址或主机名。我在这里称它为hosts.txt。然后使用 while 循环在每个连接上运行命令。确保将您的公钥添加到每个主机上的authorized_keys

command="echo test"
while read host
do
    ssh -i [your public key] root@${host} "${command}" < /dev/null
done < hosts.txt

如果要向每个服务器发送多个连续的命令,请使用“传输结束”字符,如下所示(类似于文件结尾):

ssh -o options user@server << EOT
command1
command2
command3
EOT

EOT 包围的部分中的所有命令将连续运行。

【讨论】:

  • 我建议在 ssh 命令上使用 &lt;/dev/null 以防止它吃掉你的标准输入。
  • 可能还会添加更多引号:"$command";这样,如果它包含通配符,它​​们将在远程端而不是本地端进行评估。
【解决方案3】:

尝试在a中填充文件call-servers-b-c-and-d.sh并执行

ssh a ~/call-servers-b-c-and-d.sh

call-servers-b-c-and-d.sh 可以包含

ssh b command
ssh c command
ssh d command

您也可以选择使用公钥身份验证和ssh-copy-id 来避免输入密码。

【讨论】:

  • 好吧,假设我已登录 a 并按照您的建议进行操作。你能澄清一下我将如何使用公钥,或者我如何使用像“ssh 1.1.1.1 command (password)”这样的密码,否则我怎么能公钥。
  • 三个命令足以使用公钥认证:ssh-keygenssh-copy-idssh。见thegeekstuff.com/2008/11/…
猜你喜欢
  • 2015-12-14
  • 2011-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多