最稳妥的做法是先在控制台绑定密钥对,确认密钥能登录后,再修改服务器内部配置关闭密码认证。操作前务必保留一个已登录的 SSH 会话不要关闭,以防配置失误导致无法连接。
先说结论:阿里云控制台绑定密钥对仅完成公钥注入,不会自动禁用密码登录,需手动修改 SSH 配置以实现完全密钥认证。
- 先判断:确认当前密钥对能否免密登录,保留一个已登录的密码会话作为后备。
- 优先做:修改/etc/ssh/sshd_config 将 PasswordAuthentication 设为 no。
- 再验证:新开终端测试密钥登录,成功后再关闭旧会话。
前置检查:确保密钥可用
在修改配置前,必须验证私钥能否成功登录。新开一个终端窗口执行:
chmod 600 your_key.pem
ssh -i your_key.pem root@your_server_ip确保能成功登录且不需要输入密码。此时不要关闭当前已登录的密码会话窗口。
安全修改 SSH 配置
不同 Linux 发行版配置文件路径一致,但服务名称可能不同。执行以下命令备份并修改配置:
# 1. 备份配置文件
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
# 2. 确保配置项存在,不存在则追加
grep -q '^PasswordAuthentication' /etc/ssh/sshd_config || echo 'PasswordAuthentication no' >> /etc/ssh/sshd_config
# 3. 修改配置项为 no
sed -i 's/^PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config
# 4. 检查配置语法是否正确
sshd -t若 sshd -t 无输出则表示配置语法正确。
重启 SSH 服务
CentOS 系统服务名通常为 sshd,Ubuntu/Debian 通常为 ssh。使用以下兼容命令重启:
systemctl restart sshd || systemctl restart ssh验证是否生效
1. 密钥登录:新开终端使用密钥登录,应成功。
2. 密码登录:新开终端尝试密码登录,应被拒绝(Permission denied)。
3. 查看日志:
# CentOS
tail -f /var/log/secure
# Ubuntu
tail -f /var/log/auth.log紧急救援:无法连接怎么办
若配置错误导致无法 SSH 登录,请使用阿里云 VNC 控制台恢复:
- 登录阿里云 ECS 控制台。
- 找到目标实例,点击远程连接。
- 选择VNC 管理终端登录。
- 进入系统后还原配置:
cp /etc/ssh/sshd_config.bak /etc/ssh/sshd_config并重启服务。
常见坑与注意事项
- 权限问题:私钥文件权限必须为 600,否则 SSH 客户端会拒绝使用。
- Root 登录限制:若配置了
PermitRootLogin no,需改为PermitRootLogin prohibit-password或yes才能允许密钥登录 root。 - SELinux:极少数情况下 SELinux 可能拦截,若遇到问题可临时设置为 Permissive 模式排查。
- 会话保持:修改配置重启服务前,务必保持至少一个已登录的 SSH 会话不要关闭,直到验证新密钥登录成功。