如何在远程计算机上运行多个SSH命令并安全退出

时间:2020-01-09 10:42:19  来源:igfitidea点击:

我在本地服务器上有一个备份同步程序。我设置了一个少了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。