在High Sierra系统中禁用SSH密码认证(仅允许密钥登录)
在Mac High Sierra上禁用SSH密码认证,仅允许密钥登录的正确方法
我懂你在Linux上操作得心应手,到High Sierra却碰壁的感受——Mac的SSH配置确实藏着几个容易被忽略的细节,导致你改了配置却没生效。下面是针对High Sierra的具体操作步骤:
第一步:先确保密钥登录完全可用
在禁用密码之前,一定要先把密钥登录的基础工作做好,避免改完配置后被锁在外面:
- 本地生成密钥对(如果还没做:
ssh-keygen -t ed25519,一路回车即可) - 将公钥复制到Mac的
~/.ssh/authorized_keys文件,同时设置正确权限:chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys - 测试密钥登录是否能成功,没问题再继续下一步。
第二步:修改SSH服务端配置(核心差异点)
Mac High Sierra和Linux的SSH配置有个关键区别:默认启用了PAM(可插拔认证模块),单纯改PasswordAuthentication no还不够,必须同时调整另一个参数:
打开配置文件:
sudo vi /etc/ssh/sshd_config找到并修改以下参数(去掉前面的
#注释,确保值正确):PasswordAuthentication no:直接禁用密码认证ChallengeResponseAuthentication no:这是关键!Mac默认用PAM处理挑战响应认证,哪怕密码认证关了,这个选项开着就还会允许密码登录- 确认
PubkeyAuthentication yes(默认已开启,不用改但最好检查) - 确认
AuthorizedKeysFile .ssh/authorized_keys(默认配置正确)
保存退出编辑器(vi里按
:wq)
第三步:重启SSH服务
High Sierra用launchd管理服务,重启SSH的命令是:
sudo launchctl stop com.openssh.sshd && sudo launchctl start com.openssh.sshd
⚠️ 重要提醒:千万别直接关闭当前SSH会话!先开新终端测试新配置是否生效,确认只能用密钥登录后,再关闭旧会话。
第四步:排查潜在问题
如果还是能密码登录,查看SSH日志找原因:
log show --predicate 'process == "sshd"' --info --last 10m
日志会显示认证用的是哪种方式,比如看到Accepted password for xxx,说明还有配置允许密码登录,回头检查sshd_config参数有没有写错,或者是否被其他配置覆盖(High Sierra一般没有额外的sshd_config.d目录,但可以确认下)。
另外,系统偏好设置→「共享」→「远程登录」里,别勾选“允许所有用户”后又设了特殊用户组规则,这可能和sshd_config冲突,保持默认或明确指定允许的用户即可。
内容的提问来源于stack exchange,提问作者Matthew




