使用SSH连接远程主机并执行多个Bash命令最优雅的方法是什么

2024-08-14 21:41:42 浏览数 (2)

问题

我已经设置好了ssh代理,我可以用Bash脚本在外部服务器上运行命令,执行以下操作:

代码语言:javascript复制
ssh blah_server "ls; pwd;"

现在,我真正想做的是在外部服务器上运行许多长命令。将所有这些命令都放在引号之间看起来会很不美观,而且我确实不想为了避开这个问题而多次使用SSH连接。

那么,有没有一种方法可以让我一次性完成这个操作,比如用括号或其他方式来包含所有的命令?我在寻找类似这样的方法:

代码语言:javascript复制
ssh blah_server (
   ls some_folder;
   ./someaction.sh;
   pwd;
)

基本上,只要解决方案干净利落,我都会感到满意。


回答

使用 Here-Document:

代码语言:javascript复制
ssh user@remote_host << EOF
命令1
命令2
命令3
EOF

不过这样执行会有一个问题:

输出信息的开头都有一句提示 "Pseudo-terminal will not be allocated because stdin is not a terminal."

如果要避免这个提示信息,可以将上述命令的第一行改为

代码语言:javascript复制
ssh user@remote_host /usr/bin/bash << EOF

朋友们可以拿手上的测试环境试一试。

参考

  • stackoverflow question 4412238
  • man ssh

0 人点赞