Linux如何仅限制特定用户SSH密码登录并强制密钥认证


阅读 28 次

需求场景分析

在多人共用的Linux服务器环境中,我们常遇到这样的需求:普通用户保持密码登录方式,但管理员账户需要强制使用密钥认证。这既保持了系统的灵活性,又提升了高权限账户的安全性。

SSH认证机制解析

OpenSSH支持多种认证方式,我们可以通过修改~/.ssh/authorized_keys文件实现用户级别的认证控制。关键点在于利用密钥文件中的command选项。

具体实现步骤

首先确保已生成SSH密钥对:

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

然后在/etc/ssh/sshd_config中确保以下配置:

PubkeyAuthentication yes
PasswordAuthentication yes

用户级配置方案

编辑目标用户的~/.ssh/authorized_keys文件,在公钥前添加限制参数:

command="echo 'Please login with SSH key'" ssh-rsa AAAAB3NzaC1y...

更严格的方案是创建~/.ssh/sshd_config文件:

Match User yourusername
    AuthenticationMethods publickey

测试验证方法

使用以下命令测试配置是否生效:

ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no user@host

注意事项

  • 确保至少保留一个可用的密钥认证方式
  • 修改配置后需重启sshd服务:systemctl restart sshd
  • 建议先在测试环境验证

进阶方案

对于需要更精细控制的场景,可以结合PAM模块:

auth [success=1 default=ignore] pam_succeed_if.so user = yourusername
auth required pam_deny.so