SSH 密钥登录配置,以及一个腾讯云的坑
把服务器交给密码登录,等于把大门钥匙挂在门上——尤其当密码是弱口令时。这篇记录 SSH 密钥登录的完整配置,以及我踩到的一个腾讯云特有的坑。
生成密钥并写入服务器
本地执行(一路回车即可,密码留空):
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_my_server -N ''
然后登录服务器,把公钥写进 authorized_keys:
mkdir -p /root/.ssh && chmod 700 /root/.ssh
echo '粘贴你的公钥' >> /root/.ssh/authorized_keys
chmod 600 /root/.ssh/authorized_keys
本地 ~/.ssh/config 加个别名,以后 ssh my_server 直接登录:
Host my_server
HostName 1.2.3.4
User root
IdentityFile ~/.ssh/id_ed25519_my_server
IdentitiesOnly yes
禁用密码登录
改 /etc/ssh/sshd_config:
PasswordAuthentication no
KbdInteractiveAuthentication no
ChallengeResponseAuthentication no
PermitRootLogin prohibit-password
KbdInteractiveAuthentication 这一行很关键:开着 UsePAM yes 时,即使关了密码认证,PAM 的键盘交互依然可能接受密码。
改完必须校验再生效,避免把自己锁在门外:
sshd -t && systemctl reload ssh
reload 不会断开现有连接,可以留着当前会话,另开一个窗口验证新连接能进,再关旧会话。
验证
# 应该成功
ssh -o BatchMode=yes my_server 'echo ok'
# 应该被拒绝
ssh -o PubkeyAuthentication=no -o PreferredAuthentications=password root@1.2.3.4
# Permission denied (publickey).
腾讯云的坑:微信扫码安全登录
配置过程中我遇到一个情况:密码登录成功后,终端打印出一大段二维码,提示「请使用微信扫码安全登录」,命令不执行。这是腾讯云主机安全(云镜)检测到弱口令/暴力破解风险后开启的强制安全登录。
处理方式:
- 按提示微信扫码,通过后会话才会放行;
- 更根本的解决办法就是禁用密码登录、只用密钥——密钥登录不会再被这个机制拦截;
- 如果服务器在腾讯云控制台的 VNC 也要用密码,那密码该换还是得换。
另外,密钥登录时终端可能还会短暂打印那个扫码横幅(它挂在 Banner 上),但不影响执行,忽略即可。
小结
SSH 加固就四步:生成密钥 → 写入 authorized_keys → 改 sshd_config(三行) → sshd -t 校验后 reload。花 10 分钟,安全性提升一大截。