You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

能否仅为用户配置SSH密码,不设置本地登录密码?解析PermitEmptyPasswords风险

嘿,这个需求很实用!核心就是要把本地登录和SSH登录的认证逻辑拆分开,既不用开启危险的PermitEmptyPasswords yes,又能实现「本地无需登录密码、SSH必须验证密码」的效果。下面给你两种靠谱的方案:

方案1:给用户设密码,本地登录免密跳过验证

这是最安全也最容易维护的方式,思路是给用户设置一个SSH专用密码,然后让本地登录直接跳过密码校验:

步骤1:设置SSH登录密码

先给目标用户设置一个密码(这个就是后续SSH登录要用的密码):

sudo passwd your_username

按照提示输入并确认密码即可。

步骤2:配置本地登录免密

编辑本地登录的PAM配置文件/etc/pam.d/login,在auth段的最上方添加一行:

auth    sufficient  pam_succeed_if.so user = your_username quiet

这行规则的意思是:如果登录的是指定用户,直接通过认证,不需要输入密码。

如果想让所有本地用户都免密登录(不推荐,风险较高),可以把user = your_username去掉,改成:

auth    sufficient  pam_succeed_if.so quiet

步骤3:确保SSH强制密码验证

编辑SSH服务配置文件/etc/ssh/sshd_config,检查并确保以下配置项:

PasswordAuthentication yes
ChallengeResponseAuthentication no
UsePAM yes
PermitEmptyPasswords no  # 保持默认的no,绝对不要改成yes

保存后重启SSH服务生效:

sudo systemctl restart sshd

这样配置后,本地登录该用户时直接进入系统,无需输入密码;而通过SSH登录时,必须输入你刚才设置的密码,完全符合你的需求,而且安全性拉满。

方案2:用空本地密码,限制仅SSH需密码(不推荐,需谨慎)

如果你坚持要让用户的本地密码为空,也可以通过PAM配置实现,但风险相对高一点:

步骤1:清除用户本地密码

执行命令清除用户的本地密码:

sudo passwd -d your_username

步骤2:配置本地登录允许空密码

编辑/etc/pam.d/login,修改auth相关的规则,确保包含:

auth    sufficient  pam_unix.so nullok

这允许本地登录时使用空密码(直接进入)。

步骤3:配置SSH强制非空密码认证

编辑/etc/pam.d/sshd,添加或修改规则:

auth    required    pam_unix.so nonull

注意:这个方案存在逻辑矛盾——用户本地密码为空,但SSH要求非空密码,你需要额外给SSH配置单独的密码认证(比如PAM第三方模块或SSH虚拟用户),配置复杂度高且容易出问题,因此更推荐方案1。


内容的提问来源于stack exchange,提问作者XuMuK

火山引擎 最新活动