优化SSH性能需从服务器内核参数、SSH配置、客户端设置、认证方式、加密算法等多维度入手,以下是具体措施:
编辑/etc/sysctl.conf文件,添加或修改以下参数,优化TCP连接处理能力:
net.ipv4.tcp_syncookies = 1 # 防止SYN洪水攻击,提升连接稳定性
net.ipv4.ip_local_port_range = 1024 65535 # 扩大本地端口范围,支持更多并发连接
net.core.somaxconn = 65535 # 增加监听队列最大长度,避免连接被拒绝
net.core.netdev_max_backlog = 65535 # 提高网络设备接收队列容量
net.ipv4.tcp_max_syn_backlog = 65535 # 增加SYN等待队列长度
net.ipv4.tcp_tw_reuse = 1 # 复用TIME-WAIT状态的连接,减少资源占用
net.ipv4.tcp_fin_timeout = 30 # 缩短FIN_WAIT_2状态的超时时间(秒)
保存后执行sysctl -p使配置生效。
编辑/etc/ssh/sshd_config文件,调整以下关键参数:
UseDNS no(避免SSH连接时对客户端IP进行DNS查询,缩短连接时间);GSSAPIAuthentication no(若无需Kerberos认证,关闭后可减少认证延迟);ClientAliveInterval 60(服务器每60秒向客户端发送保活信号)、ClientAliveCountMax 3(若连续3次未收到响应则断开连接,避免僵尸连接占用资源);Compression yes(对传输数据压缩,适合低带宽环境,减少传输时间);MaxAuthTries 4(防止暴力破解,提升认证效率);PasswordAuthentication no(若使用密钥认证,关闭密码认证可提升安全性与速度);Port 22修改为非标准端口(如Port 2222),减少端口扫描攻击,降低防火墙负载。systemctl restart sshd。编辑客户端配置文件(~/.ssh/config),添加以下内容:
Host * # 对所有主机生效
ServerAliveInterval 60 # 客户端每60秒向服务器发送保活信号
ServerAliveCountMax 3 # 连续3次无响应则断开连接
Compression yes # 启用压缩(与服务器端对应)
ControlMaster auto # 启用连接复用(多窗口共享一个连接)
ControlPath ~/.ssh/control-%r@%h:%p # 控制套接字路径
ControlPersist 10m # 连接保持10分钟(无活动后)
保存后执行chmod 600 ~/.ssh/config设置权限。
旧版本OpenSSH可能存在性能瓶颈或安全漏洞,建议升级到最新稳定版。以CentOS为例,可通过EPEL仓库安装最新版:
yum install epel-release -y # 启用EPEL仓库
yum update openssh-server openssh-clients -y # 升级OpenSSH
升级前备份配置文件(/etc/ssh/sshd_config、/etc/ssh/ssh_config)。
ssh-keygen -t rsa -b 4096),将公钥(id_rsa.pub)复制到服务器~/.ssh/authorized_keys文件中,客户端使用私钥登录(ssh -i /path/to/private_key user@server)。密钥认证无需每次输入密码,大幅提升连接速度。GSSAPIAuthentication no,避免因GSSAPI机制导致的延迟。选择高效加密算法,编辑/etc/ssh/sshd_config文件:
Ciphers aes128-ctr,aes192-ctr,aes256-ctr # 使用AES对称加密(性能优于3DES)
MACs hmac-sha2-256,hmac-sha2-512 # 使用SHA-2哈希算法(兼顾安全与性能)
KexAlgorithms curve25519-sha256 # 使用Curve25519椭圆曲线(高效密钥交换)
修改后重启SSH服务。
编辑/etc/security/limits.conf文件,增加文件描述符限制:
* soft nofile 65535 # 普通用户软限制
* hard nofile 65535 # 普通用户硬限制
root soft nofile 65535 # root用户软限制
root hard nofile 65535 # root用户硬限制
修改后重新登录用户使配置生效。
通过autossh或sshuttle工具管理SSH连接池,复用现有连接,避免频繁建立/关闭连接的开销。例如,使用autossh保持连接:
autossh -M 0 -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" user@server
其中-M 0表示禁用内置保活,使用SSH自带的保活机制。
使用工具定位性能问题:
tcpdump -i eth0 port 22 -w ssh.pcap);ss -tn state established '( dport = :ssh )');以上方法需根据实际环境调整(如关闭SELinux需谨慎,需评估安全风险),建议在测试环境中验证后再应用于生产环境。