在本地客户端(如你的电脑)生成密钥对,并将公钥上传到服务器:
# 本地生成密钥对(推荐 ed25519 算法,更安全)
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_root -C "root@your_server"
# 将公钥上传到服务器的 root 用户
ssh-copy-id -i ~/.ssh/id_ed25519_root.pub root@your_server_ip
说明:
-f ~/.ssh/id_ed25519_root:指定密钥文件名,避免覆盖默认密钥。ssh-copy-id 会自动将公钥追加到服务器的 ~/.ssh/authorized_keys。编辑 /etc/ssh/sshd_config,确保以下配置生效:
# 禁用 root 密码登录(即使配置了密钥,也显式禁止密码)
PermitRootLogin prohibit-password
# 禁用所有用户的密码登录
PasswordAuthentication no
ChallengeResponseAuthentication no
# 可选:强制所有用户仅能通过密钥登录(即使配置了其他认证方式)
AuthenticationMethods publickey
# 其他安全建议(可选)
UsePAM no # 禁用 PAM 认证(需确保密钥登录正常)
PermitEmptyPasswords no # 禁止空密码登录
确保服务器上的密钥文件和目录权限安全:
sudo chmod 700 /root/.ssh
sudo chmod 600 /root/.ssh/authorized_keys
sudo chown -R root:root /root/.ssh
应用配置更改:
sudo systemctl restart sshd
测试 root 登录:
ssh -i ~/.ssh/id_ed25519_root root@your_server_ip
应能成功登录,而密码登录会被拒绝。
测试普通用户登录:
若普通用户未配置密钥,尝试密码登录会被拒绝:
ssh username@your_server_ip # 提示 "Permission denied (publickey)"
| 配置项 | 作用 |
|---|---|
PermitRootLogin prohibit-password |
禁止 root 用户通过密码登录,但仍允许密钥登录。 |
PasswordAuthentication no |
禁用所有用户的密码登录(包括 root 和普通用户)。 |
ChallengeResponseAuthentication no |
禁用挑战-响应认证(如键盘交互式认证)。 |
AuthenticationMethods publickey |
强制所有用户仅能通过公钥认证(即使配置了其他认证方式)。 |
备份配置:
修改前备份 /etc/ssh/sshd_config:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
应急方案:
密钥安全:
防火墙和 SELinux:
确保 SSH 端口(默认 22)开放:
sudo firewall-cmd --permanent --add-service=sshsudo firewall-cmd --reload
若启用了 SELinux,确保 .ssh 目录上下文正确:
sudo restorecon -Rv /root/.ssh
# /etc/ssh/sshd_config
Port 22
ListenAddress 0.0.0.0
# 认证方式
PermitRootLogin prohibit-password
PasswordAuthentication no
ChallengeResponseAuthentication no
AuthenticationMethods publickey
# 其他安全配置
UsePAM no
PermitEmptyPasswords no
PrintMotd no
X11Forwarding no
ssh-copy-id 上传到服务器。PasswordAuthentication no 和 PermitRootLogin prohibit-password 实现。通过以上步骤,你的 CentOS 9 服务器将完全禁止密码登录,仅允许密钥认证,显著提升安全性。
本文来自博客园,作者:一块白板,转载请注明原文链接:https://www.cnblogs.com/ykbb/p/18913653
登录查看全部
参与评论
手机查看
返回顶部