无需重新连接即可通过 ssh 执行多个命令

无需重新连接即可通过 ssh 执行多个命令

我想通过 ssh 从本地计算机上的脚本执行多个命令,但不需要为每个命令重新连接。通常,我会选择类似以下方法:

$ ssh [user]@[server] '[command 1] | [command 2] | [command 3]'

但是,这剥夺了我了解每个命令的输出和退出代码的机会。我真正想做的是让 ssh 连接在后台某处挂起,然后只需向其输入命令并接收其输出,例如(这显然是无效的,只是我希望它看起来像的一个例子):

$ ssh --name=my_connection [user]@[server]
$ ssh my_connection 'command_1'
$ ssh my_connection 'command_2'
$ ssh my_connection 'command_3'

有任何方法可以实现吗?

答案1

例如已经回答过在 Serverfault 上

~/.ssh/config您可以使用以下选项进行设置:

Host machine1
  HostName machine1.example.org
  User yourusername
  ControlPath ~/.ssh/controlmasters/%r@%h:%p
  ControlMaster auto
  ControlPersist 10m

然后确保mkdir ~/.ssh/controlmasters/从那时起,您的连接将machine1持续 10 分钟,以便您可以在一次连接期间发出更多会话或数据传输。

然后它就可以正常工作

$ ssh [server] 'command_1'
# authenticate
$ ssh [server] 'command_2'
$ ssh [server] 'command_3'

如果您有某种原因不使用该配置,那么您也可以在命令行上执行此操作:

$ ssh -MNfS ~/.ssh/controlmasters/%r@%h:%p [server]
# authenticate and go to background
$ ssh -S ~/.ssh/controlmasters/%r@%h:%p [server] 'command_1'
# authenticate
$ ssh -S ~/.ssh/controlmasters/%r@%h:%p [server] 'command_2'
$ ssh -S ~/.ssh/controlmasters/%r@%h:%p [server] 'command_3'

相关内容