macOS上配置SSH密钥+双重验证需三步:生成带密码短语的ed25519密钥并部署;启用TOTP(安装pam模块、配置google-authenticator及sshd);可选升级FIDO2安全密钥。登录时须同时通过密钥与第二因子验证。
在 macos 上配置支持 ssh 密钥 + 双重验证的安全环境,核心是把静态身份(密钥)和动态因子(如 totp 或硬件密钥)组合起来,让登录必须同时满足“你拥有私钥”和“你掌握第二因子”两个条件。只用密钥或只用验证码都不够安全。
生成强 SSH 密钥对并部署到服务器
这是整个流程的基础。不推荐默认的 id_rsa,也不建议跳过密码短语:
- 运行命令:
ssh-keygen -t ed25519 -a 100 -f ~/.ssh/id_work -C "you@company.com",其中-a 100提升密钥派生强度,id_work便于区分用途 - 务必设置密码短语(passphrase),macOS 钥匙串可记住它,后续使用无需重复输入
- 用
ssh-copy-id -i ~/.ssh/id_work.pub user@host推送公钥;若失败,手动复制内容到远程服务器的~/.ssh/authorized_keys,并确认该文件权限为600、目录为700
启用基于时间的一次性密码(TOTP)作为第二因子
适用于大多数场景,无需额外硬件,靠手机 App 实现动态验证:
- 安装 PAM 模块:
brew install google-authenticator-libpam - 以目标用户身份运行
google-authenticator,按提示启用时间令牌、禁止单次重用、保存配置;扫描二维码绑定 Authy 或 Google Authenticator - 编辑
/etc/pam.d/sshd,在开头添加:auth [success=done new_authtok_reqd=done default=ignore] pam_google_authenticator.so(上线后移除nullok参数) - 修改
/etc/ssh/sshd_config,确保这三行已开启:ChallengeResponseAuthentication yesUsePAM yesAuthenticationMethods publickey,keyboard-interactive - 重启服务:
sudo launchctl kickstart -k system/com.openssh.sshd
可选:升级为 FIDO2 安全密钥(ed25519-sk)
如果追求更高防护等级(防钓鱼、防中间人),可用硬件密钥替代 TOTP:
- 生成密钥:
ssh-keygen -t ed25519-sk -f ~/.ssh/id_sk -C "you@company.com",需插入支持 FIDO2 的密钥(如 YubiKey)并触摸确认 - 上传公钥到服务器:
ssh-copy-id -i ~/.ssh/id_sk.pub user@host - 更新
sshd_config中的AuthenticationMethods行,改为:publickey,publickey(即两个密钥因子),或与 TOTP 混合使用(需调整 PAM 配置) - 注意:客户端需 OpenSSH 8.2+,macOS Ventura 及更新系统原生支持
验证与日常使用要点
配置完成后,每次 SSH 登录会先尝试密钥认证,成功后再触发第二因子验证:
- 用
ssh -o PubkeyAuthentication=yes -o PreferredAuthentications=publickey,keyboard-interactive user@host测试流程是否完整 - 确保本地
~/.ssh/config中对应主机配置了IdentitiesOnly yes和指定密钥路径,避免多密钥干扰 - 备份恢复码和私钥(加密存储),丢失第二因子时它们是唯一逃生通道
- 不要关闭密码登录前就停用所有备用方式,否则可能被锁在服务器外


















