SSH 连接复用
通过 ControlMaster 复用已有的 SSH 连接,加速后续连接并减少认证次数
语法
Host * ControlMaster auto ControlPath ~/.ssh/sockets/%r@%h-%p ControlPersist 600
参数
| 参数 | 说明 | 示例 | 级别 |
|---|---|---|---|
ControlMaster |
控制连接复用模式 | ControlMaster auto |
常用 |
ControlPath |
控制 socket 文件路径 | ControlPath ~/.ssh/sockets/%r@%h-%p |
常用 |
ControlPersist |
主连接空闲保持时间(秒) | ControlPersist 600 |
常用 |
-O check |
检查主连接是否存活 | ssh -O check user@host |
进阶 |
-O exit |
关闭主连接 | ssh -O exit user@host |
进阶 |
-S |
指定 socket 文件路径 | ssh -S /tmp/ssh-socket user@host |
进阶 |
示例
全局配置连接复用
# ~/.ssh/config Host * ControlMaster auto ControlPath ~/.ssh/sockets/%r@%h-%p ControlPersist 600
所有连接自动复用,空闲 10 分钟后关闭
创建 socket 目录
mkdir -p ~/.ssh/sockets chmod 700 ~/.ssh/sockets
首次配置需要创建 socket 存放目录
检查复用连接状态
ssh -O check user@server
输出 Master running 表示复用连接正常
手动关闭复用连接
ssh -O exit user@server
关闭主连接,后续连接将重新建立
常见错误
ControlPath too long
socket 路径过长,使用更短的 ControlPath,如 ~/.ssh/s/%r@%h-%p
Control socket connect: Connection refused
旧的 socket 文件残留,删除对应的 socket 文件:rm ~/.ssh/sockets/user@host-22
技巧
- 连接复用后第二次 SSH 连接几乎瞬间完成,对频繁操作的服务器效果显著
- ControlPersist 设为 yes 表示永不超时,设为数字表示空闲秒数
- Git over SSH 也会受益于连接复用,频繁 push/pull 时速度明显提升