繁体   English   中英

使用Bash发送多个SSH命令

[英]Use Bash to send multiple SSH commands

这是我需要回答的一个简单而快速的问题。 我对bash表示满意,并且了解Java和C,但是想保持这一点非常简单。 目的是:我以root用户身份登录服务器A,并希望通过SSH向服务器BC和D发送命令。 我想要它,以便它将自动登录到服务器(使用密码)并向它们发送命令,从服务器A到其他服务器。

所以它会像这样:

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

我将如何以极其简单的bash进行操作? 谢谢你的帮助。

3个步骤:

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

    当您可以登录到a ,然后从ab ,从ac以及从ad且没有任何密码提示时,就可以完成步骤1。

  2. 写下您的~/send.sh脚本。 由于已完成身份验证,因此脚本非常简单:

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

     ssh a '~/send.sh' 

我建议您使用一个文件,其中包含该命令将要发送到的服务器列表。 只需在文件中每行输入一个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包围的部分中的所有命令将连续运行。

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

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

call-servers-bc-and-d.sh可能包含

ssh b command
ssh c command
ssh d command

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM