如何在远程计算机上运行多个SSH命令并安全退出
我在本地服务器上有一个备份同步程序。我设置了一个少了ssh密码的登录名,并且可以使用以下bash脚本在外部服务器上运行命令:
ssh root @ server2" sync; sync;/sbin/shutdown -h now"
我如何在以下命令中运行多个命令bash在远程Unix或者Linux服务器上?在bash shell中SSH插入并运行各种Unix命令的最佳方法是什么? 有多种方法可以在远程Unix服务器上运行多个命令。
该页面显示了使用bash shell进行ssh和运行多个命令的最简单方法。
语法如下。
简单的bash语法可在远程计算机上运行多个命令
如果command1在名为foo的远程主机上成功运行,只需运行command2:
$ ssh bar@foo "command1 && command2"
例如,以Hyman用户身份在名为centos7的框中运行正常运行时间和日期命令:
ssh Hyman@centos7 "uptime && date"
输出示例:
18:36:17 up 1 day, 8:14, 0 users, load average: 1.02, 1.06, 1.05 Fri Jun 7 18:36:17 IST 2019
如何运行多个SSH命令
运行日期和主机名命令:
$ ssh user@host "date && hostname"
您可以在名为server1.theitroad.local的远程框中运行sudo命令,如下所示:
$ ssh -t [email protected] "sudo /sbin/shutdown -h now"
最后,
$ ssh [email protected] "sync && sync && /sbin/shutdown -h now"
Bash here文档语法可运行多个SSH命令
这里的文档语法告诉shell程序从当前源(HERE)读取输入,直到看到仅包含单词(HERE)的行:
ssh server1 << HERE command1 command2 HERE
这是在远程系统上运行多个命令的另一个示例:
ssh [email protected] << EOF date hostname cat /etc/resolv.conf EOF
使用sudo命令类型:
ssh -t [email protected] << EOF sync sync sudo /sbin/shutdown -h 0 EOF
将脚本管道传输到远程服务器
最后,在本地服务器上创建一个名为remote-box-commands.bash的脚本,如下所示:
date hostname cat /etc/resolv.conf
在名为nas02theitroadhomeserver的远程服务器上按以下方式运行它:
$ cat remote-box-commands.bash | ssh user@nas02theitroadhomeserver
或者
cat remote-box-commands.bash | ssh -t Hyman@nas02theitroadhomeserver
如何SSH到多个服务器并运行命令
可以如下使用简单的bash for循环。
在此示例中,在名为box1,box2和box3的三台Linux服务器上运行uptime命令:
for s in box1 box2 box3 do ssh Hyman@${s} uptime done
在远程系统上运行本地bash脚本
创建一个shell脚本,如下所示:
#!/bin/bash # Name: test.sh # Purpose: Run multiple commands on a remote box # --------------------------------------------------- uptime date whoami
现在,在名为server1.theitroad.local的主机上按如下所示运行它:
ssh [email protected] 'bash -s' < /path/to/test.sh
或者在四台服务器上运行它:
for s in server{1..4}.theitroad.local do ssh Hyman@${s} 'bash -s' < /home/Hyman/bin/test.sh done
请注意,-t
选项将解决"抱歉,您必须具有tty才能运行sudo /在此处插入您的命令"错误消息。
您还可以使用pssh(并行ssh)在许多Linux/Unix/BSD服务器上并行执行ssh。