改端口加密钥登录是提升SSH安全最有效手段:先修改sshd_config中Port为非常规值并重启服务,再用ssh-keygen生成ed25519密钥对、ssh-copy-id上传公钥,最后禁用PasswordAuthentication等密码相关选项并严格校验文件权限。

直接改端口加密钥登录,是提升 SSH 安全最有效、最常用的组合手段。它能同时规避暴力扫描和密码爆破两大风险,操作也不复杂。
先改端口,避开默认暴露面
默认 22 端口是所有扫描器的首要目标。哪怕密码再强,高频尝试本身就会增加日志干扰和潜在漏洞利用面。
- 编辑配置:
sudo vim /etc/ssh/sshd_config,找到Port 22行,在下方新增一行,比如Port 2222(不建议用 2222 这类常见替代端口,可选 12202、34567 等非常规值) - 保存后重启服务:
sudo systemctl restart sshd - 确认生效:
sudo ss -tlnp | grep sshd或sudo netstat -tlnp | grep sshd,看到新端口在 LISTEN 状态即可 - 云服务器务必同步更新安全组/防火墙规则,放行新端口;本地测试可用:
ssh -p 2222 user@server_ip
再配密钥登录,彻底摆脱密码依赖
密钥认证基于非对称加密,私钥不出设备,公钥可公开,从根本上杜绝暴力破解可能。
- 在你自己的电脑(客户端)生成密钥:
ssh-keygen -t ed25519 -C "your_email"(推荐 ed25519,比 RSA 更快更安全;回车使用默认路径,建议设 passphrase 加密私钥) - 上传公钥到服务器:
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server_ip -p 2222(注意带上-p指定新端口) - 若提示命令不存在,可手动操作:把
~/.ssh/id_ed25519.pub内容复制,登录服务器后执行:mkdir -p ~/.ssh && chmod 700 ~/.ssh && echo "粘贴内容" >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys
最后禁用密码,锁死入口
密钥登录验证成功后,必须关闭密码认证,否则前面两步效果大打折扣。
- 再次编辑
/etc/ssh/sshd_config,确保以下三项明确设置为 no:PasswordAuthentication noChallengeResponseAuthentication noUsePAM no - 重启服务:
sudo systemctl restart sshd - 新开终端窗口测试连接:
ssh -p 2222 user@server_ip—— 应直接登录,不提示输密码;若失败,先别关当前会话,检查权限和配置
关键细节不能漏
很多问题其实出在权限和路径上,不是配置写错了,而是系统拒绝读取密钥文件。
-
服务器上:
~/.ssh目录权限必须是700,authorized_keys文件必须是600 -
客户端上:
id_ed25519私钥权限也必须是600,否则 OpenSSH 会拒绝使用(报错 “UNPROTECTED PRIVATE KEY FILE”) - 如用 Xshell、FinalShell 等图形工具,导入的是私钥文件(
id_ed25519),不是公钥;连接时需在会话属性中指定密钥路径并关闭密码认证选项 - 修改前建议备份原配置:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

















