SSH 加快连接的几种方法
SSH 加快连接的几种方法:
方法一:使用SSH密钥认证(最推荐)
原理:密钥认证比密码认证快,不需要在每次连接时传输密码。
方法二:取消DNS反向解析(服务器端 sshd_config)
原理:SSH服务器接收连接时,默认会尝试反向解析客户端的IP地址到域名,如果客户端IP没有对应的PTR记录,或者DNS解析慢,会拖慢连接速度。这个方法是在服务器端 /etc/ssh/sshd_config 中配置,但效果体现在客户端连接速度上:
1 | sudo nano /etc/ssh/sshd_config |
修改为 UseDNS no,如果前面有 #,把它删掉。
方法三:配置SSH客户端连接复用(ControlMaster)
原理:允许在同一个SSH会话上重复使用多个连接。第一次连接后,后续的连接(如scp、sftp或再次ssh)会直接通过已建立的通道,不用重新认证握手,速度极快。在本地电脑或Termux的 ~/.ssh/config 文件(权限必须是600)中添加:
1 | Host * |
ControlPersist 600s 表示保持主连接活跃600秒。
方法四:优化连接超时设置(客户端config)
原理:减少SSH客户端等待服务器响应的时间。在 ~/.ssh/config 中添加:
1 | Host * |
ConnectTimeout 10 表示连接超时10秒;ServerAliveInterval 60 表示每60秒发送一次保活消息;ServerAliveCountMax 3 表示最多发送3次保活消息未响应则断开。
方法五:指定认证方式优先级(客户端config)
原理:强制SSH客户端优先尝试指定的认证方式,避免浪费时间尝试不适用的认证方式。在 ~/.ssh/config 中添加(如果需要密码登录):
1 | Host * |
通常情况下,如果设置了密钥,SSH会优先尝试密钥认证。
方法六:取消GSSAPI认证
原理:GSSAPI认证(如Kerberos)在某些环境下会尝试很长时间,导致连接缓慢。在服务器端 /etc/ssh/sshd_config 中设置:
1 | GSSAPIAuthentication no |
保存并重启SSH服务。
方法七:使用Mosh
Mosh专门针对网络不稳定的场景设计,网络切换或者信号不好的时候比普通SSH更抗断线。
一键优化脚本
把上面几个服务器端配置项打包成一条命令,直接在服务器上跑:
1 | sed -i '/^#UseDNS/d' /etc/ssh/sshd_config && echo 'UseDNS no' >> /etc/ssh/sshd_config && \ |
说明:UseDNS no 取消DNS反向解析,加快连接速度;GSSAPIAuthentication no 禁用GSSAPI,避免Kerberos卡顿;PermitRootLogin no 禁止root直接登录,提升安全性;PasswordAuthentication no 强制使用密钥登录;ClientAliveInterval 300 每5分钟检测一次连接;ClientAliveCountMax 2 超过约10分钟无响应自动断开;TCPKeepAlive no 关闭TCP层面的保活探测,不影响中间人攻击防护,这个选项和安全性无关,纯粹是连接层面的设置。
注意:这条一键命令里 PasswordAuthentication no 和 PermitRootLogin no 会关闭密码登录和root直接登录,执行前请确认已经配置好密钥登录,不然可能把自己锁在门外连不上服务器。
相关内容