Linux 禁止所有账号密码登录 SSH,并配置 root 密钥登录
Linux 禁止所有账号密码登录 SSH,并配置 root 密钥登录
目标
- 禁止所有用户(包括 root)通过密码登录 SSH。
- 确保 root 用户仅能通过密钥登录。
一、操作步骤
1. 生成 root 用户的 SSH 密钥对
在本地客户端(如你的电脑)生成密钥对,并将公钥上传到服务器:
# 本地生成密钥对(推荐 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
。
-
2. 修改 SSH 服务配置
编辑 /etc/ssh/sshd_config
,确保以下配置生效:
# 禁用 root 密码登录(即使配置了密钥,也显式禁止密码)
PermitRootLogin prohibit-password
# 禁用所有用户的密码登录
PasswordAuthentication no
ChallengeResponseAuthentication no
# 可选:强制所有用户仅能通过密钥登录(即使配置了其他认证方式)
AuthenticationMethods publickey
# 其他安全建议(可选)
UsePAM no # 禁用 PAM 认证(需确保密钥登录正常)
PermitEmptyPasswords no # 禁止空密码登录
3. 设置正确的文件权限
确保服务器上的密钥文件和目录权限安全:
sudo chmod 700 /root/.ssh
sudo chmod 600 /root/.ssh/authorized_keys
sudo chown -R root:root /root/.ssh
4. 重启 SSH 服务
应用配置更改:
sudo systemctl restart sshd
5. 验证配置
测试 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
五、总结
- 生成 root 密钥:在本地生成密钥对,并通过
ssh-copy-id
上传到服务器。 - 禁用密码登录:通过
PasswordAuthentication no
和PermitRootLogin prohibit-password
实现。 - 验证配置:确保 root 和普通用户均无法通过密码登录,仅能通过密钥登录。
通过以上步骤,你的 CentOS 9 服务器将完全禁止密码登录,仅允许密钥认证,显著提升安全性。
Linux 禁止所有账号密码登录 SSH,并配置 root 密钥登录Linux 禁止所有账号密码登录 SSH,并配置 root 密钥登录Linux 禁止所有账号密码登录 SSH,并配置 root 密钥登录Linux 禁止所有账号密码登录 SSH,并配置 root 密钥登录Linux 禁止所有账号密码登录 SSH,并配置 root 密钥登录Linux 禁止所有账号密码登录 SSH,并配置 root 密钥登录Linux 禁止所有账号密码登录 SSH,并配置 root 密钥登录Linux 禁止所有账号密码登录 SSH,并配置 root 密钥登录Linux 禁止所有账号密码登录 SSH,并配置 root 密钥登录