使用Bash发送多个SSH命令

时间:2014-10-13 22:13:38

标签: linux bash ssh

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

所以它会是这样的:

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

我将如何在非常简单的bash中执行此操作?谢谢你的帮助。

3 个答案:

答案 0 :(得分:1)

3个步骤:

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

    当您可以从 a 登录 a ,然后从 a b 登录时,步骤1完成>到 c ,从 a d ,没有任何密码提示。

  2. 将您的~/send.sh脚本写在 a 上。由于认证得到了处理,脚本就像这样简单:

    ssh b 'some_command'
    ssh c 'some_other_command'
    ssh d 'yet_another_command'
    
  3. 从您的计算机运行ssh客户端:

    ssh a '~/send.sh'
    

答案 1 :(得分:1)

我建议使用一个包含命令将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包围的部分中的所有命令都将连续运行。

答案 2 :(得分:0)

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

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来避免输入密码。