[英]Use Bash to send multiple SSH commands
这是我需要回答的一个简单而快速的问题。 我对bash表示满意,并且了解Java和C,但是想保持这一点非常简单。 目的是:我以root用户身份登录服务器A,并希望通过SSH向服务器BC和D发送命令。 我想要它,以便它将自动登录到服务器(使用密码)并向它们发送命令,从服务器A到其他服务器。
所以它会像这样:
send.sh
,它将发送命令。 我将如何以极其简单的bash进行操作? 谢谢你的帮助。
3个步骤:
将公钥安装在所有四台机器(a,b,c和d)上。 如果您使用的是openssh,则需要将公共密钥附加到.ssh / authorized_keys(请参阅OpenSSH ),如果您使用的是dropbear,则有所不同。
当您可以登录到a ,然后从a到b ,从a到c以及从a到d且没有任何密码提示时,就可以完成步骤1。
写下您的~/send.sh
上的脚本。 由于已完成身份验证,因此脚本非常简单:
ssh b 'some_command' ssh c 'some_other_command' ssh d 'yet_another_command'
从您的机器上运行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.