Mac 上的 SSH 配置其实就三件事:确认系统自带的 OpenSSH 可用、把密钥和 ~/.ssh/config 配好、再按场景调整超时与转发参数。不需要装任何第三方客户端,macOS 预装的命令行工具已经够用,关键在于配置文件放在哪、每个字段管什么。

Mac 用户第一次连接云服务器,常见的卡点不是“不会敲命令”,而是不知道配置写在哪里、权限为什么被拒绝、连接为什么几分钟就断,下面按实际动手顺序拆开讲。
Mac 自带的 SSH 到底在哪、能不能直接用
macOS 从很早的版本起就内置了 OpenSSH 客户端,来源是系统自带的 BSD 组件,打开“终端”(Launchpad 里搜“终端”,或者 Spotlight 输入 Terminal),敲一行:
ssh -V
有输出就说明可用,输出里会带 OpenSSH 版本号,系统升级时这个版本会跟着变,所以别记死数字,每次以实际输出为准。
几个必须知道的事实:
- Mac 只自带客户端,不自带 sshd 服务端,想让别人 SSH 连进你的 Mac,要去“系统设置 → 通用 → 共享”里打开“远程登录”。
- 密钥、配置、known_hosts 全部在用户目录下的
.ssh文件夹,不在/etc里。 - 想用图形化工具也行,Termius、FinalShell 这类都支持导入
~/.ssh/config,但排查问题时最终还是回到命令行。
Mac SSH配置文件在哪:~/.ssh 目录逐项说明
三个文件的真实作用
~/.ssh 是隐藏目录,Finder 里按 Command + Shift + . 才能看见,终端里用 ls -la ~/.ssh 查看,里面常见文件:
id_ed25519/id_rsa:私钥,绝对不能外传id_ed25519.pub:公钥,就是要塞到服务器上的那个config:客户端配置,默认不存在,需要自己新建known_hosts:记录连过的服务器指纹,第一次连接时问你 yes/no 就是写这里authorized_keys:只有当你自己当服务端时才用得上
客户端配置与服务端配置别搞混
这是新手最容易踩的坑,一张表说清:
| 文件路径 | 作用对象 | 谁写 | 典型用途 |
|---|---|---|---|
~/.ssh/config |
当前用户的 SSH 客户端 | 你自己 | 给服务器起别名、指定密钥、设超时 |
/etc/ssh/ssh_config |
全系统 SSH 客户端 | 系统/管理员 | 全局默认参数,一般不动 |
/etc/ssh/sshd_config |
SSH 服务端 | 服务器管理员 | 改端口、禁密码登录 |
优先级从高到低是:命令行参数 > ~/.ssh/config > /etc/ssh/ssh_config,你个人电脑上改的永远是前两个,sshd_config 属于被连接的那台机器。
config 文件的标准写法
没有就新建:
touch ~/.ssh/config
chmod 600 ~/.ssh/config
示例:
Host blog
HostName 203.0.113.25
User deploy
Port 22
IdentityFile ~/.ssh/id_ed25519
ServerAliveInterval 60
ServerAliveCountMax 3
保存后直接 ssh blog,等价于 ssh -i ~/.ssh/id_ed25519 deploy@203.0.113.25。Host 后面那个词随你起,起成 prod、test、db 都行,日常敲起来省一半时间。

Mac SSH免密登录怎么设置:密钥生成到验证
密码登录每次都要输,脚本和自动化场景根本没法用,四步走完。
第一步:生成密钥对
ssh-keygen -t ed25519 -C "macbook-2026"
-C 后面是注释,方便以后在服务器上认出这把钥匙是谁的,一路回车即可,密码短语(passphrase)留空就是完全免密,设了则每次用密钥还要输一次,安全性更高,ed25519 是当前推荐算法,比 RSA 更短更快;老服务器不支持时退回 ssh-keygen -t rsa -b 4096。
第二步:把公钥送到服务器
ssh-copy-id -i ~/.ssh/id_ed25519.pub deploy@203.0.113.25
macOS 自带这个命令,它会自动创建 ~/.ssh 目录、追加公钥到 authorized_keys 并设好权限,没有该命令时手动来:
cat ~/.ssh/id_ed25519.pub | ssh deploy@203.0.113.25 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
第三步:验证是否真的免密
ssh -i ~/.ssh/id_ed25519 deploy@203.0.113.25
不再提示输入密码就成功了,想确认走的是哪把钥匙,加 -v 看详细日志,输出里会写明 Offering public key 以及最终认证方式。
第四步:权限出问题时怎么办
报 Permissions 0644 for 'xxx' are too open 是私钥权限太大被 OpenSSH 主动拒绝,按下面这套一次性修正:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub
chmod 600 ~/.ssh/config
chmod 644 ~/.ssh/known_hosts
服务器那一侧的公钥目录权限是 700,authorized_keys 是 600,家目录不能是 777,否则服务端同样会拒绝免密,这类权限问题占了远程登录失败案例的相当一部分比例,先查权限再看日志,效率最高。
Mac SSH连接老是断开:三个参数调好
默认配置下,闲置几分钟连接被掐是常态,尤其经过家用路由器和运营商 NAT 时,三种处理办法,按推荐顺序:
- 客户端侧设心跳,写进
~/.ssh/config的对应 Host 段:
ServerAliveInterval 60
ServerAliveCountMax 3
TCPKeepAlive yes
含义是每 60 秒发一次保活包,连续 3 次无响应才断开,等于容忍 3 分钟网络抖动。
-
服务端侧调整,在服务器的
/etc/ssh/sshd_config里设ClientAliveInterval 60和ClientAliveCountMax 3,改完sudo systemctl restart sshd,注意别把间隔设成 0,那样等于关掉保活。 -
用终端复用工具,本地跑
tmux或screen,断线后重连执行tmux attach,正在跑的编译、下载不会中断,做长任务时这是最稳的办法。
端口转发与跳板机:内网服务的两种接法
数据库只监听内网 3306,本机又需要连,用本地转发:
ssh -L 13306:127.0.0.1:3306 blog
之后本机连 0.0.1:13306 就等于连服务器内网的 MySQL,写进 config 里就是 LocalForward 13306 127.0.0.1:3306。
两台机器才能到目标机时用跳板:
ssh -J user@jump.example.com deploy@10.0.1.20
对应的 config 写法是 ProxyJump user@jump.example.com,这套机制业界用了很多年,行业共识认为它比在跳板机上手动开 socks 代理更安全,因为不暴露额外监听端口。
高频报错对照表
Connection refused:端口不对或服务没起,先telnet 主机 端口试通不通。Host key verification failed:服务器重装过导致指纹变了,确认安全后ssh-keygen -R 主机名删掉旧记录再连。Permission denied (publickey):公钥没送到位、权限不对、或 config 里IdentityFile路径写错,用ssh -vvv逐行看。Too many authentication failures:config 里配了太多密钥挨个试,加IdentitiesOnly yes只试指定那把。
排查顺序建议固定:先 ssh -v 看卡在哪一步,再查本地权限,最后看服务端日志 /var/log/auth.log 或 journalctl -u ssh。
关于Mac SSH配置的常见问题
Mac SSH 配置修改后不生效是什么原因
多数是配置文件优先级或路径写错,先确认改的是 ~/.ssh/config 而不是系统级的那份,再检查 Host 段是否匹配你敲的主机名,ssh -G 主机别名 能打印出最终生效的全部参数,一眼就能看出哪条没被读到,缩进不规范、字段名拼错(Identityfile 大小写)也会导致静默忽略。
Mac 上能否同时管理多台服务器的密钥
可以,而且推荐一机一钥,给每台服务器生成独立密钥对并在 config 里用 IdentityFile 绑定,某把钥匙泄露时只需在单台机器上替换,不牵连其他环境,再加 IdentitiesOnly yes 避免连接时把全部密钥挨个试一遍触发失败次数上限,密钥备份到密码管理器即可,不要把私钥放进 Git 仓库或网盘同步目录。
为什么推荐用 ssh config 而不是每次敲完整命令
因为参数一旦多了就很难记全,端口、用户、密钥、转发规则每次都手打,出错概率随长度上升,写进 config 后主机名变成短别名,规则可版本化、可复制到新机器,团队里还能共享同一份模板只改 HostName 字段,命令行的灵活性保留着,日常操作的成本却降到了最低。
