在macOS上配置SSH密钥+二次验证的核心是密钥认证为第一因子、TOTP或硬件密钥为第二因子:一、用ed25519-a100生成带密码短语的密钥对并严格设权限;二、通过google authenticator配置TOTP双因素;三、可选FIDO2硬件密钥实现物理+触摸认证。
在 macos 上配置支持 ssh 密钥 + 二次验证的终端安全访问,核心是「密钥认证为第一因子,totp 或硬件密钥为第二因子」,不能只开密码登录或仅依赖单层保护。整个过程分三步走:先确保密钥登录稳定可靠,再叠加时间动态口令(totp),最后可选增强物理验证。下面按实际部署逻辑展开。
一、生成并部署强 SSH 密钥对(基础身份凭证)
这是所有后续安全机制的前提,必须用现代算法、带密码短语、权限严格:
- 打开终端,运行:ssh-keygen -t ed25519 -a 100 -f ~/.ssh/id_work -C "you@company.com";不建议用默认名
id_ed25519,便于区分工作/个人/服务器等多环境密钥 - 务必设置密码短语(passphrase)——它加密私钥文件本身,即使硬盘被盗也无法直接使用;macOS 钥匙串可记住它,后续 ssh 连接自动填充
- 公钥上传别依赖
ssh-copy-id(Sonoma 及更新版常失败),推荐手动操作:
①cat ~/.ssh/id_work.pub复制内容
② 密码登录一次目标 Mac:ssh user@192.168.x.x
③ 执行三行命令(顺序不可错):mkdir -p ~/.ssh && chmod 700 ~/.sshecho "粘贴的公钥" >> ~/.ssh/authorized_keyschmod 600 ~/.ssh/authorized_keys
二、启用 TOTP 时间动态口令作为第二因子
适用于无硬件密钥但需软件级双因素的场景,基于 Google Authenticator 的 PAM 模块实现:
- 通过 Homebrew 安装模块:brew install google-authenticator-libpam
- 以目标用户身份运行:google-authenticator,按提示选择:
→ Y 启用基于时间的令牌
→ Y 禁止单次重用(防重放)
→ Y 保存配置到~/.google_authenticator
→ 扫描二维码绑定手机 App(Authy / Google Authenticator),并抄下恢复码存离线安全位置 - 编辑 PAM 配置:
sudo nano /etc/pam.d/sshd,在文件最上方插入一行:
auth [success=done new_authtok_reqd=done default=ignore] pam_google_authenticator.so nullok
(上线后确认全员已配置,再删掉nullok参数,强制启用) - 修改 SSH 主配置:
sudo nano /etc/ssh/sshd_config,确保以下三项启用:ChallengeResponseAuthentication yesUsePAM yesAuthenticationMethods publickey,keyboard-interactive
三、可选:接入 FIDO2 安全密钥(物理+触摸认证)
若追求更高安全等级(如管理敏感密钥或生产服务),可用支持 ed25519-sk 的硬件密钥(YubiKey 5 系列、SoloKeys 等):
- 生成 FIDO2 密钥:ssh-keygen -t ed25519-sk -f ~/.ssh/id_yubi -C "yubi@work"
执行时需将密钥插入 USB 口并轻触感应区完成注册 - 公钥上传方式与普通密钥一致,但验证时每次连接都需物理触摸,无法被远程窃取或自动化绕过
- 搭配 TOTP 使用时,可将
sshd_config中的AuthenticationMethods改为:publickey,keyboard-interactive(密钥 + TOTP)
或更严苛的:publickey,hostbased,keyboard-interactive(加主机信任)
四、验证与日常使用要点
配置完成后,连接会要求两步输入:先由密钥自动通过,再弹出提示输入 6 位 TOTP 或触摸硬件密钥。调试时可用:
ssh -o LogLevel=INFO user@host 查看认证各阶段是否成功。
注意:Mac 远程登录服务默认关闭,需在「系统设置 → 通用 → 共享」中开启「远程登录」;防火墙若启用,也需确认端口 22 已放行。


















