任俊慧
2025-6-7 13:41:13
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 服务器将完全禁止密码登录,仅允许密钥认证,显著提升安全性。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
|
|
|
相关推荐
|
|