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 格式三连查。
七、小结
免密登录解决效率,安全加固解决风险,两者其实是一套动作的两面。真正省事的做法是:一开始就把密钥、权限、端口、来源限制一次配好,之后所有自动化才有稳定的基础。
- 点赞
- 收藏
- 关注作者
评论(0)