SSH 加快连接的几种方法

SSH 加快连接的几种方法

方法1:    使用 SSH 密钥认证 (最推荐):

原理: 密钥认证比密码认证快得多,因为它不需要在每次连接时传输密码并进行哈希运算。

在本地生成 SSH 密钥对 (ssh-keygen),将公钥 (~/.ssh/id_rsa.pub) 上传到服务器的 ~/.ssh/authorized_keys。

(可选)使用 ssh-agent 或客户端工具(如 JuiceSSH 的密码短语记住功能)来记住私钥密码短语,避免每次输入。

方法2:   禁用 DNS 反向解析 (客户端 sshd_config):

原理: SSH 服务器在接收连接时,默认会尝试反向解析客户端的 IP 地址到域名。如果客户端 IP 没有对应的 PTR 记录,或者 DNS 解析慢,这会拖慢连接速度。

这个方法是在服务器端 /etc/ssh/sshd_config 中设置,但效果体现在客户端连接速度,

sudo nano /etc/ssh/sshd_config

修改为UseDNS no,如果前面有 #,删除它

方法3:      配置 SSH 客户端连接复用 (ControlMaster):

原理: 允许您在同一个 SSH 会话上复用多个连接。当您第一次连接后,后续的连接(如 scp, sftp 或再次 ssh)将直接通过已建立的通道,无需重新进行认证和握手,速度极快。

在您本地电脑或 比如Termux 的 /.ssh/config 文件(/.ssh/config 文件的权限必须是 600)

中添加以下配置:

Host *

ControlMaster auto

ControlPath ~/.ssh/cm_socket/%r@%h:%p

ControlPersist 600s # 保持主连接活跃 600 秒

方法4:优化连接超时设置 (客户端 config):

原理: 减少 SSH 客户端等待服务器响应的时间。如果网络特别差,可能需要增加。在客户端的 ~/.ssh/config 中添加:

Host *

    ConnectTimeout 10 # 连接超时10秒

    ServerAliveInterval 60 # 每60秒发送一次保活消息

    ServerAliveCountMax 3 # 最多发送3次保活消息未响应则断开

方法5:     指定密码认证方式 (客户端 config):

原理: 强制 SSH 客户端先尝试 keyboard-interactive 或 password 认证,而不浪费时间尝试其他不适用的认证方式。但通常,如果设置了密钥,SSH 会优先尝试密钥。

 在 ~/.ssh/config 中添加(如果需要密码登录):

Host *

PreferredAuthentications publickey,keyboard-interactive,password

方法6:    禁用 GSSAPI 认证

原理: GSSAPI 认证(如 Kerberos)在某些环境下会尝试很长时间,导致连接缓慢。

在服务器端 /etc/ssh/sshd_config 中设置

GSSAPIAuthentication no

保存并重启 SSH 服务

方法7:   使用 Mosh (Mobile Shell)

其实,有个一键优化SSH:

sed -i ‘/^#UseDNS/d’ /etc/ssh/sshd_config && echo ‘UseDNS no’ >> /etc/ssh/sshd_config && \

sed -i ‘/^#GSSAPIAuthentication/d’ /etc/ssh/sshd_config && echo ‘GSSAPIAuthentication no’ >> /etc/ssh/sshd_config && \

sed -i ‘/^#PermitRootLogin/d’ /etc/ssh/sshd_config && echo ‘PermitRootLogin no’ >> /etc/ssh/sshd_config && \

sed -i ‘/^#PasswordAuthentication/d’ /etc/ssh/sshd_config && echo ‘PasswordAuthentication no’ >> /etc/ssh/sshd_config && \

sed -i ‘/^#ClientAliveInterval/d’ /etc/ssh/sshd_config && echo ‘ClientAliveInterval 300’ >> /etc/ssh/sshd_config && \

sed -i ‘/^#ClientAliveCountMax/d’ /etc/ssh/sshd_config && echo ‘ClientAliveCountMax 2’ >> /etc/ssh/sshd_config && \

sed -i ‘/^#TCPKeepAlive/d’ /etc/ssh/sshd_config && echo ‘TCPKeepAlive no’ >> /etc/ssh/sshd_config && \

echo -e “\n✅ SSH配置已优化,重启服务即可生效:” && \

服务 sshd 重启 || systemctl 重启 sshd

说明:

UseDNS no 取消DNS反向解析,加快连接速度

GSSAPIAuthentication 不禁用GSSAPI,避免Kerberos 卡顿

PermitRootLogin no 禁止root登录,提升安全性

密码验证 否 强制使用密钥登录

ClientAliveInterval 300 - 5 分钟检测是否连接

ClientAliveCountMax 2 超过10分钟无响应自动中断

TCPKeepAlive 不会降低中间人攻击风险