这是一个简单而快速的问题,我需要回答。我很擅长bash并且知道Java和C但是我想保持这个非常简单。这是目标:我在服务器A上以root用户身份登录,并希望通过SSH向服务器B C和D发送命令。我希望它能自动登录到服务器(带密码)并向服务器A发送命令,从服务器A到其他服务器。
所以它会是这样的:
send.sh
。我将如何在非常简单的bash中执行此操作?谢谢你的帮助。
答案 0 :(得分:1)
3个步骤:
在所有4台机器(a,b,c和d)上安装public key。如果您正在使用openssh,则需要将公钥附加到.ssh / authorized_keys(请参阅OpenSSH),如果您使用dropbear它有点不同。
当您可以从 a 登录 a ,然后从 a 到 b 登录时,步骤1完成>到 c ,从 a 到 d ,没有任何密码提示。
将您的~/send.sh
脚本写在 a 上。由于认证得到了处理,脚本就像这样简单:
ssh b 'some_command'
ssh c 'some_other_command'
ssh d 'yet_another_command'
从您的计算机运行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
来避免输入密码。