如何通过运行多个命令的 Shell 脚本共享/保持 SSH 连接

如何通过运行多个命令的 Shell 脚本共享/保持 SSH 连接

我有一个通过 SSH 连接到同一主机的 shell 脚本(我的服务器)并在整个脚本中混合运行各种命令。例如:

ssh -o ConnectTimeout=3 -o ConnectionAttempts=3 user@my-server "foocommand here"

mkdir -p /path/here
touch service.conf
...

ssh -o ConnectTimeout=3 -o ConnectionAttempts=3 user@my-server "barcommand here"

mkdir -p /other/path/here
touch /other/path/here/service.conf
...

ssh -o ConnectTimeout=3 -o ConnectionAttempts=3 user@my-server "darcommand here"

等等。问题是每个 SSH 连接打开和握手都需要一点时间,因为服务器my-server在地理位置上距离正在运行的脚本较远。

有没有办法加快此过程并避免为每个所需命令打开新的 SSH 连接?有没有类似 SSH 的 http keep alive 之类的东西?

答案1

是的,您可以设置 ssh 以保持与远程服务器的持久连接。这可以通过ControlMasterControlPathControlPersist选项完成。

示例配置(位于$HOME/.ssh/config):

ControlMaster auto
ControlPath ~/.ssh/sockets/%C
ControlPersist 600

设置ControlPath启用连接共享;当到远程主机的 ssh 连接打开时,到同一用户/主机的其他 ssh 连接将通过该连接多路复用。

设置ControlPersist允许连接在最后一个 ssh 会话退出后的一段时间内保持活动状态。

设置ControlMasterauto允许 ssh 重用现有连接或在必要时创建新连接。

ssh_config(5)有关这些选项的详细说明,请参阅手册页。

相关内容