我在很久之前, 就在博客中介绍了sharing connections, 但是访问量惨淡, 可能当时只是泛泛的谈了一下, 没有引起读者的注意. 这次, 我专门开一期说明 sharing connections的使用

OpenSSH连接复用

ssh连接还能复用?

讲道理, 当你与远程主机建立了连接后, 理论上是可以复用的, 需要满足两个条件.

  1. 首先, 你的确连接上了远程主机.
  2. 其次, 当前进程的连接, 可以由其他进程访问.

那么你就可以复用ssh连接了, 更多的资料请大家有时间可以参考speed-up-ssh-by-reusing-connections

配置文件的书写

OpenSSH已经自带了这个功能, 你所需要的就是在配置文件中加入Controlpath.

1
2
3
4
5
6
7
8
9
Host ali
HostName 1.2.3.4
Port 22
User root
IdentityFile ~/.ssh/id_rsa_test

Controlmaster auto
Controlpath ~/.ssh/ssh-%r@%h:%p.sock
ControlPersist 600

在第一次连接后, 会在~/.ssh目录下生成如下文件, 这是一个UNIX的socket文件, 其他 的进程可以通过访问这个文件与远程主机通信.

1
2
3
~ ❤  ls ~/.ssh
...
ssh-root@1.2.3.4:22.sock

OpenSSH连接保持

其实很容易理解, 所有的复用都是基于`ssh-root@1.2.3.4:22.sock`文件的存在, 所以, 如果你想让连接保持住, 至少要有一个连接始终连着远端.

上面的ControlPersist参数是连接保持的一种方式, 保证在所有ssh会话都退出后, 仍然保留600s这么久的连接.

或许你也可以考虑这么一种情况, 当你经常需要与远程传递文件, 或是挂载文件夹到 本地, 那么你可以从一开始就使用sshfs, 它也会建立起连接提供其他ssh进程使用, 这样你可以不必费心去多开一个终端来维持会话.