SSH 免密登录与安全加固实战:从密钥配置到公网防护

举报
yd_274341061 发表于 2026/11/07 14:36:10 2026/11/07
【摘要】 从密钥生成、公钥上传到 sshd_config 五项加固,一套动作同时解决 SSH 免密效率与公网安全问题,附权限坑位与登录失败排查顺序。

买完云服务器第一件事就是连上去,而 SSH 恰好是暴露在公网上的第一个入口。默认配置下,22 端口每天都在被扫描。这篇把免密登录和安全加固放在一起讲清楚。

一、为什么要做免密登录

不只是为了少输一次密码。真正的价值在自动化:rsync 定时备份、Ansible 批量执行、CI/CD 部署到服务器,都依赖免密通道。需要手动输密码的机器,没法被脚本调度。

二、生成密钥对

在本地机器上执行:

ssh-keygen -t ed25519 -C "你的邮箱"

推荐 ed25519 而不是 RSA:密钥更短、签名更快,同等安全强度下性能更好。老系统不支持时再退回 RSA 4096。

生成后在 ~/.ssh 下得到两个文件:id_ed25519 是私钥,绝不能外传;id_ed25519.pub 是公钥,可以随意分发。

三、上传公钥到服务器

ssh-copy-id -i ~/.ssh/id_ed25519.pub user@服务器IP

没有 ssh-copy-id 的话,手动追加:

ssh user@服务器IP "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys" < ~/.ssh/id_ed25519.pub

注意三个权限:~/.ssh 是 700,authorized_keys 是 600。权限不对的话 SSH 会直接拒绝登录,而且报错只说 Permission denied,很难查。

四、客户端配置:别再反复写长命令

在本地 ~/.ssh/config 写:

Host myserver
    HostName 服务器IP
    User root
    Port 22
    IdentityFile ~/.ssh/id_ed25519
    ServerAliveInterval 60

之后 ssh myserver 就行。ServerAliveInterval 60 能防止长时间无操作被网络设备掐断。

五、安全加固:这五件事一定要做

1. 禁用密码登录

在 /etc/ssh/sshd_config 中设置:

PasswordAuthentication no
PubkeyAuthentication yes

改完先 sshd -t 测试语法,再 systemctl reload sshd。千万别直接重启服务,配错了就把自己锁在门外。

2. 禁止 root 直连

PermitRootLogin no

用普通账号登录再 sudo,被爆破的面就小很多。

3. 改掉默认端口

Port 2222

能挡掉九成以上的无差别扫描。配合防火墙规则一起改,改完先确认新端口连得上,再关旧端口。

4. 限制登录来源

AllowUsers deploy@10.0.0.1

只允许特定用户从特定 IP 登录,最狠也最有效。

5. 装 fail2ban

自动封禁短时间多次失败的 IP,属于被动防御里性价比最高的一个。

六、排查登录失败

遇到 Permission denied 时按这个顺序查:第一,sshd -t 看语法对不对;第二,服务器上 tail -f /var/log/auth.log 看真实拒绝原因;第三,本地 ssh -vvv user@IP 看握手断在哪一步;第四,权限、SELinux、authorized_keys 格式三连查。

七、小结

免密登录解决效率,安全加固解决风险,两者其实是一套动作的两面。真正省事的做法是:一开始就把密钥、权限、端口、来源限制一次配好,之后所有自动化才有稳定的基础。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。