mac配置ssh免密登录需五步:启用远程ssh服务、生成ed25519密钥对、手动部署公钥、严格设置~/.ssh目录权限为700及authorized_keys为600、用ssh-add --apple-use-keychain将私钥加入钥匙串。

在Mac终端中配置SSH免密登录远程服务器,核心是让远程主机信任你本地生成的公钥,跳过每次输入密码的步骤。整个过程必须确保服务端SSH已启用、密钥类型兼容、公钥路径正确、权限设置严格,缺一不可。
开启远程服务器的SSH服务
远程服务器若未运行sshd守护进程,后续所有密钥操作都无效。Linux服务器(如Ubuntu、CentOS、阿里云ECS)通常默认开启,但需确认状态;macOS作为被登录方时则必须手动启用。
登录远程服务器终端,执行:
sudo systemctl status sshd(Linux)或
sudo launchctl list | grep ssh(macOS)
若显示inactive或未找到com.openssh.sshd,说明服务未运行。Linux执行sudo systemctl enable --now sshd;macOS则打开「系统设置」→「通用」→「共享」→ 勾选「远程登录」。
【必须确认远程主机监听端口为22且防火墙放行】,否则本地ssh命令会直接超时,无法进入密钥验证环节。
在Mac终端生成Ed25519密钥对
Ed25519比RSA更安全、签名更快,macOS 12+原生支持,是当前推荐标准。不要用rsa -b 4096这种旧方式,除非目标服务器明确不支持Ed25519。
打开终端,执行:
ssh-keygen -t ed25519 -C "your_name@mac.local"
三次回车接受默认路径 ~/.ssh/id_ed25519 和空密码短语——但这不推荐。建议输入一个强passphrase,防止私钥文件被盗后被直接滥用。
生成后,用ls ~/.ssh查看:id_ed25519(私钥,绝不能外泄)和id_ed25519.pub(公钥,可分发)必须同时存在。
将公钥部署到远程服务器的authorized_keys
这一步最容易失败,原因常是路径错、权限错、shell初始化干扰。ssh-copy-id在macOS Sonoma及更新版中已知存在兼容性问题,手动部署最可靠。
方法一:纯手动追加(推荐)
① 在Mac终端执行:
cat ~/.ssh/id_ed25519.pub
全选并复制整行输出(从ssh-ed25519开头,到邮箱结尾,中间无换行)
② 密码登录一次远程服务器:
ssh user@192.168.x.x(或公网IP)
③ 登录成功后,在远程终端依次执行(顺序不可颠倒):
mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo "粘贴的那整行公钥" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
注意:~/.ssh目录权限高于700(如755),或authorized_keys高于600(如644),sshd会静默拒绝密钥登录,不报错也不提示,只退回密码输入框。
方法二:用scp传公钥再重定向(适合批量或脚本化)
在Mac终端执行:
scp ~/.ssh/id_ed25519.pub user@192.168.x.x:~/id_ed25519_tmp.pub
然后ssh登录远程主机,执行:
mkdir -p ~/.ssh && chmod 700 ~/.ssh
cat ~/id_ed25519_tmp.pub >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys
rm ~/id_ed25519_tmp.pub
添加私钥到钥匙串实现自动解锁
如果你设置了passphrase,每次ssh连接仍要输一遍。用钥匙串记住它,就能真正“免交互”。
执行:
ssh-add --apple-use-keychain ~/.ssh/id_ed25519
首次运行会弹出图形窗口,要求输入当前Mac用户密码和passphrase,勾选“在钥匙串中记住密码”即可。之后只要Mac已解锁,ssh就不再索要passphrase。
验证是否生效:
ssh-add -l
应看到类似ed25519 SHA256:xxx (agent)的输出。
测试免密登录是否成功
退出当前ssh会话,在Mac终端执行:
ssh -o LogLevel=INFO user@192.168.x.x
观察日志输出:若出现Authentication succeeded,且没有Password:提示,则成功;若卡在debug1: Next authentication method: password,说明公钥未被识别,重点检查authorized_keys内容是否完整、权限是否为600、sshd_config中PubkeyAuthentication是否为yes。











