如何保持打开的 ssh 连接并从 shell 脚本中使用它?

Łuk*_*Lew 6 ssh ssh-tunneling

目前我调用以下内容:

$ ssh me@host.com my_cmd
Run Code Online (Sandbox Code Playgroud)

这很慢,而且不容易安全地自动化。我想建立一次 ssh 连接并有一些脚本将我的命令转发到 host.com 并打印输出。

那可能吗 ?

将我的机器添加到 authorized_keys 对我来说不是一个选择,它不会解决缓慢问题。

Jak*_*uje 13

该功能称为ControlMaster在一个现有通道上进行多路复用。它使 ssh 进行所有密钥交换并仅登录一次;因此,后面的命令将执行得更快。您可以使用以下三行来激活它.ssh/config

Host host.com
  ControlMaster auto
  ControlPath ~/.ssh/master-%C
  # for openssh < 6.7 you need to use this one:
  # ControlPath ~/.ssh/master-%r@%h-%p
  ControlPersist 5m
Run Code Online (Sandbox Code Playgroud)

您可以根据需要进行调整;一种替代方法是您可以打开一个在其他命令期间保持打开状态的主连接;那么你就不需要ControlPersist.

此功能有很多可能性可以调整,但请确保将ControlPath套接字存放在安全的地方,其他用户无法读取,否则可能会被滥用。

更多信息可以在ssh_config(5)手册页中找到。