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

https://www.cyberciti.biz/faq/linux-unix-osx-bsd-ssh-run-command-on-remote-machine-server/

 

在本地服务器上有一个备份同步程序。我设置了无 ssh 密码登录,并且可以在 bash 脚本中在外部服务器上运行命令:
ssh root@server2 "sync; sync; /sbin/shutdown -h now"
如何在远程 Unix 或 Linux 服务器上的 bash 中运行多个命令?在 bash shell 中 SSH 和运行各种 unix 命令的最佳方法是什么?

有多种方法可以在远程 Unix 服务器上运行多个命令。此页面显示了使用 bash shell 进行 ssh 和运行多个命令的最简单方法。

 

在远程机器上运行多个命令的简单 bash 语法

如果 command1 在名为 foo 的远程主机上成功,只需运行 command2:
$ ssh bar@foo "command1 && command2"
例如,在名为 'centos7' 的盒子上以 'vivek' 用户身份运行 uptime 和 date 命令::
ssh vivek@centos7 "uptime && date"
示例输出:

 18:36:17 18 : 14,0用户平均负载1.02,1.06,1.05 Fri 
Jun   7 18:36:17 IST 2019 _ _ _ _ _ _ _ _

为避免sudo: Sorry, you must have a tty to run sudo错误传递-t给 ssh:
$ ssh -t bar@foo "command1 && command2"

以 sudo 身份通过 SSH 运行多个命令

以下是使用apt 命令apt-get 命令应用更新的方法:

ssh -t user@server sudo -- "sh -c 'apt update && apt upgrade -y'"
 # 比如ec2 Debian或者Ubuntu Linux服务器可以更新如下
ssh -t ls.www-2 sudo -- " sh -c 'apt update && apt upgrade -y'"
在 Linux macOS 和 Unix 上 ssh sudo 多个命令

点击放大

让我们分解命令:

  1. ssh:使用 ssh 命令在远程机器上执行命令。
  2. -t: 强制伪终端分配。这可用于在远程机器上执行任意基于屏幕的程序,这非常有用并且可以避免错误。
  3. ls.www-2:托管在 Linode 或 AWS 云上的远程服务器。
  4. sudo: 在名为 . 的远程机器上运行 sudo 命令ls.www-2
  5. --: 双破折号“ --”表示“命令行标志结束”。它告诉 ssh 或任何其他有效的 shell 命令不要尝试解析命令行选项之后的内容。请参阅“ -‐(双破折号)在 SSH Shell 命令中的含义是什么?”了解更多信息。
  6. sh -c 'apt update && apt upgrade -y': 从命令字符串 (' apt update && apt upgrade -y') 操作数而不是从标准输入中读取命令。这是运行多个 shell 命令的最安全方法。了解如何在 Linux 或 Unix 下在 sudo 中运行多个命令。

如何运行多个 SSH 命令

运行日期和主机名命令:
$ ssh user@host "date && hostname"
可以在名为 server1.cyberciti.biz 的远程机器上运行 sudo 命令,如下所示
$ ssh -t vivek@server1.cyberciti.biz "sudo /sbin/shutdown -h now"
最后:
$ ssh root@server1.cyberciti.biz "sync && sync && /sbin/shutdown -h now"
如何在远程 Linux 或 Unix 机器上运行多个 SSH 命令

 

posted @ 2022-03-11 09:38  meetrice  阅读(537)  评论(0编辑  收藏  举报