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

在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还不够,必须同时调整另一个参数:

  1. 打开配置文件:

    sudo vi /etc/ssh/sshd_config
    
  2. 找到并修改以下参数(去掉前面的#注释,确保值正确):

    • PasswordAuthentication no:直接禁用密码认证
    • ChallengeResponseAuthentication no:这是关键!Mac默认用PAM处理挑战响应认证,哪怕密码认证关了,这个选项开着就还会允许密码登录
    • 确认PubkeyAuthentication yes(默认已开启,不用改但最好检查)
    • 确认AuthorizedKeysFile .ssh/authorized_keys(默认配置正确)
  3. 保存退出编辑器(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

火山引擎 最新活动