一、SSH服务基础调优
远程登录是服务器运维的核心环节,SSH协议作为行业标准,其默认配置往往存在安全与效率的平衡空间。通过调整/etc/ssh/sshd_config文件中的关键参数,可显著提升登录体验:
- 端口修改:将默认端口22改为高位端口(如2222),减少自动化扫描攻击。
- Protocol 2:仅启用SSH协议版本2,禁用不安全的版本1。
- PermitRootLogin prohibit-password:禁止root直接密码登录,仅允许密钥方式。
- LoginGraceTime 30:缩短登录验证超时时间至30秒。
- MaxAuthTries 3:限制单次连接最大认证尝试次数为3次。
- ClientAliveInterval 300:每300秒发送保活探测包,防止空闲连接断开。
修改后需执行 systemctl restart sshd 生效,并确保新端口在防火墙中放行。
二、密钥认证替代密码登录
密码登录易受暴力破解与中间人攻击,推荐采用RSA/Ed25519密钥对认证:
- 客户端生成密钥:ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519(推荐Ed25519算法,性能更高)。
- 公钥部署至服务端:ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server_ip -p 端口。
- 服务端关闭密码登录:设置 PasswordAuthentication no 并重启sshd。
注意:部署前务必保留至少一个已有密钥验证的有效会话,避免锁定自身。
三、连接复用与会话保持
频繁建立新连接会增加握手开销,可通过SSH配置文件优化复用:
在客户端 ~/.ssh/config 中设置:
Host *
ControlMaster auto
ControlPath ~/.ssh/controlmaster/%r@%h:%p
ControlPersist 4h
该配置允许多个SSH会话共享同一TCP连接,第二次登录时无需重新认证,并保持连接4小时。
四、增强安全防护措施
- Fail2ban:部署Fail2ban监控SSH日志,对连续失败IP自动临时封禁(常用配置:maxretry = 5,bantime = 3600)。
- 白名单限制:通过 AllowUsers 或 AllowGroups 指令限定可登录的用户/组。
- 端口敲门(Port Knocking):以动态端口序列隐藏SSH服务,仅合法请求序列可触发端口开放。
以上措施建议根据实际运维需求分步实施,避免过度限制导致正常连接受阻。
五、日志审计与监控
启用 LogLevel VERBOSE 记录详细的登录日志(包括公钥指纹)。通过ELK或Zabbix集中分析SSH登录失败模式,可及时发现异常扫描行为。
优化远程登录系统并非一次性任务,建议定期(如每季度)审查配置文件的合规性,并跟踪最新安全漏洞公告。