任俊慧 发表于 2025-6-7 13:41:13

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/.ssh4. 重启 SSH 服务

应用配置更改:
sudo systemctl restart sshd5. 验证配置


[*]测试 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 服务器将完全禁止密码登录,仅允许密钥认证,显著提升安全性。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

廖彗云 发表于 2025-10-21 02:31:50

感谢分享,下载保存了,貌似很强大

百谖夷 发表于 2025-10-24 02:26:20

热心回复!

获弃 发表于 2025-11-9 10:39:41

喜欢鼓捣这些软件,现在用得少,谢谢分享!

廖彗云 发表于 2025-12-1 01:29:21

这个有用。

涅牵 发表于 2025-12-23 05:43:37

很好很强大我过来先占个楼 待编辑

伯绮梦 发表于 2025-12-24 22:57:29

过来提前占个楼

狭踝仇 发表于 2026-1-11 13:52:51

收藏一下   不知道什么时候能用到

郗燕岚 发表于 2026-1-17 10:59:43

用心讨论,共获提升!

骆贵 发表于 2026-1-18 01:20:43

收藏一下   不知道什么时候能用到

圣罩 发表于 2026-1-18 13:59:15

这个有用。

衣旱 发表于 2026-1-18 18:50:47

懂技术并乐意极积无私分享的人越来越少。珍惜

蔺堰 发表于 2026-1-19 06:33:06

过来提前占个楼

娄静曼 发表于 2026-1-19 13:05:35

yyds。多谢分享

笙芝 发表于 2026-1-21 08:39:25

谢谢分享,辛苦了

魁睥 发表于 2026-1-21 14:23:19

收藏一下   不知道什么时候能用到

宁觅波 发表于 2026-1-21 19:43:50

热心回复!

寇秀娟 发表于 2026-2-2 04:37:28

用心讨论,共获提升!

颜才 发表于 2026-2-7 16:05:58

感谢分享,下载保存了,貌似很强大

慢秤 发表于 2026-2-9 00:58:02

感谢分享
页: [1] 2
查看完整版本: Linux 禁止所有账号密码登录 SSH,并配置 root 密钥登录