SSH 暴露在公网时,最重要的不是换一个看起来不常见的端口,而是使用可靠的密钥认证、限制可登录账户,并在每次修改后保留可恢复路径。
客户端生成和使用密钥
ssh-keygen -t ed25519 -a 100
ssh-copy-id user@server
ssh -i ~/.ssh/id_ed25519 user@server
私钥只应保存在可信设备上,并设置合适的文件权限。服务器的 authorized_keys 目录通常为 700,文件通常为 600。
服务端基线
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitRootLogin prohibit-password
PubkeyAuthentication yes
是否允许 root 使用密钥应根据运维方式决定。更严格的方案是使用普通管理员账户配合 sudo。无论选择哪种方式,都应先在新的终端确认密钥可以登录,再关闭现有会话。
修改后的验证
sshd -t
sshd -T | grep -E 'passwordauthentication|permitrootlogin'
systemctl reload ssh
sshd -t 只检查语法,sshd -T 可以查看最终生效值。Ubuntu 的配置可能来自 sshd_config.d,而 OpenSSH 对部分指令采用“首次取得的值”,因此只查看主文件可能得出错误结论。
最后再检查防火墙、失败登录日志和主机密钥指纹。密钥认证降低了口令攻击风险,但私钥泄露仍然是严重事件,备份和撤销机制同样重要。