如何在远程机器上运行多个 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 1天 , 8 : 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'"
让我们分解命令:
- ssh:使用 ssh 命令在远程机器上执行命令。
- -t: 强制伪终端分配。这可用于在远程机器上执行任意基于屏幕的程序,这非常有用并且可以避免错误。
- ls.www-2:托管在 Linode 或 AWS 云上的远程服务器。
- sudo: 在名为 . 的远程机器上运行 sudo 命令ls.www-2。
- --: 双破折号“ --”表示“命令行标志结束”。它告诉 ssh 或任何其他有效的 shell 命令不要尝试解析命令行选项之后的内容。请参阅“ -‐(双破折号)在 SSH Shell 命令中的含义是什么?”了解更多信息。
- 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"