阿里云 ECS 如何配置 SSH 密钥对登录禁用密码认证

文章导读
最稳妥的做法是先在控制台绑定密钥对,确认密钥能登录后,再修改服务器内部配置关闭密码认证。操作前务必保留一个已登录的 SSH 会话不要关闭,以防配置失误导致无法连接。
📋 目录
  1. 前置检查:确保密钥可用
  2. 安全修改 SSH 配置
  3. 重启 SSH 服务
  4. 验证是否生效
  5. 紧急救援:无法连接怎么办
  6. 常见坑与注意事项
A A

最稳妥的做法是先在控制台绑定密钥对,确认密钥能登录后,再修改服务器内部配置关闭密码认证。操作前务必保留一个已登录的 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 无输出则表示配置语法正确。

阿里云 ECS 如何配置 SSH 密钥对登录禁用密码认证

重启 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 控制台恢复:

  1. 登录阿里云 ECS 控制台。
  2. 找到目标实例,点击远程连接
  3. 选择VNC 管理终端登录。
  4. 进入系统后还原配置:cp /etc/ssh/sshd_config.bak /etc/ssh/sshd_config 并重启服务。

常见坑与注意事项

  • 权限问题:私钥文件权限必须为 600,否则 SSH 客户端会拒绝使用。
  • Root 登录限制:若配置了 PermitRootLogin no,需改为 PermitRootLogin prohibit-passwordyes 才能允许密钥登录 root。
  • SELinux:极少数情况下 SELinux 可能拦截,若遇到问题可临时设置为 Permissive 模式排查。
  • 会话保持:修改配置重启服务前,务必保持至少一个已登录的 SSH 会话不要关闭,直到验证新密钥登录成功。