微信优化

weixinyouhua

Mac SSH怎么配置?Mac SSH配置失败怎么解决

2026-10-21 08:58:31

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

Mac SSH怎么配置?Mac SSH配置失败怎么解决

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怎么配置?Mac SSH配置失败怎么解决

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 时,三种处理办法,按推荐顺序:

  1. 客户端侧设心跳,写进 ~/.ssh/config 的对应 Host 段:
ServerAliveInterval 60
ServerAliveCountMax 3
TCPKeepAlive yes

含义是每 60 秒发一次保活包,连续 3 次无响应才断开,等于容忍 3 分钟网络抖动。

  1. 服务端侧调整,在服务器的 /etc/ssh/sshd_config 里设 ClientAliveInterval 60 和 ClientAliveCountMax 3,改完 sudo systemctl restart sshd,注意别把间隔设成 0,那样等于关掉保活。

  2. 用终端复用工具,本地跑 tmux 或 screen,断线后重连执行 tmux attach,正在跑的编译、下载不会中断,做长任务时这是最稳的办法。

    Mac SSH怎么配置?Mac SSH配置失败怎么解决

端口转发与跳板机:内网服务的两种接法

数据库只监听内网 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 字段,命令行的灵活性保留着,日常操作的成本却降到了最低。

相关文章

2024年,SaaS软件行业碰到获客难、增长慢等问题吗?

我们努力让每一次邂逅总能超越期待