如何配置OpenSSH服务器对指定普通用户强制公钥认证,其余用户可密码登录?
嘿,这个需求其实OpenSSH的配置文件就能轻松实现,我来一步步给你拆解操作:
第一步:先备份配置文件(防翻车必备)
先把原配置文件备份一份,避免改错了没法恢复:sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak第二步:编辑sshd主配置文件
用你习惯的文本编辑器打开配置文件,比如:sudo nano /etc/ssh/sshd_config
先确保全局的密码认证是开启的——找到PasswordAuthentication这一行,修改为:PasswordAuthentication yes
如果这行前面有#注释符号,记得把它去掉。第三步:添加针对指定用户的强制公钥规则
在配置文件的最末尾添加以下内容(假设你要限制的用户是johndoe):Match User johndoe PasswordAuthentication no PubkeyAuthentication yes这里的逻辑是:
Match User会精准匹配指定用户,块内的配置会覆盖全局设置。所以对johndoe来说,密码登录被直接禁用,必须使用公钥认证;而其他所有未被匹配的用户,依然遵循全局规则可以用密码登录。如果需要限制多个用户,用逗号分隔用户名即可:
Match User johndoe,janedoe,bob第四步:验证配置合法性
改完配置先别急着重启服务,先检查有没有语法错误:sudo sshd -t
如果没有输出任何内容,说明配置没问题;如果有报错,按照提示修正即可。第五步:重启sshd服务生效
根据你的Linux发行版,执行对应的重启命令:- Ubuntu/Debian系:
sudo systemctl restart sshd - CentOS/RHEL系:
sudo systemctl restart sshd或者sudo service sshd restart
- Ubuntu/Debian系:
确保指定用户的公钥文件权限正确
SSHD对权限要求非常严格,权限不对会直接拒绝公钥登录。登录到指定用户的账号,执行以下命令设置权限:chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys sudo chown johndoe:johndoe ~/.ssh ~/.ssh/authorized_keys记得把
johndoe换成你实际要限制的用户名。测试验证
用指定用户尝试密码登录,应该会被拒绝;用公钥登录则能正常进入。其他用户尝试密码登录,应该可以顺利登录系统。
内容的提问来源于stack exchange,提问作者Dave

