从 macOS 登录远程主机、执行命令并转发端口。
macOS 自带 OpenSSH 客户端,配置优先级是命令行选项高于 ~/.ssh/config,后者高于 /etc/ssh/ssh_config。目标 Mac 必须先开启“系统设置 → 通用 → 共享 → 远程登录”,并允许对应用户;只开屏幕共享不等于开了 SSH,连接会直接 refused。命令行可用 sudo systemsetup -setremotelogin on 开启。
macOS 的 ssh 有两处 Apple 扩展:钥匙串集成和 UseKeychain 配置。ssh-add --apple-use-keychain 把私钥口令存进登录钥匙串,--apple-load-keychain 在重启后重新加载;~/.ssh/config 里的 UseKeychain yes 只被 Apple 的 ssh 识别,配置同步到 Linux 会报 Bad configuration option。密钥权限仍要求 ~/.ssh 为 700、私钥为 600,否则会被静默忽略。
新版 OpenSSH 默认禁用 ssh-rsa(SHA-1)主机密钥和签名,连接老旧网络设备常报 no matching host key type。优先升级设备或换密钥算法;临时兼容可在单个 Host 段加 HostkeyAlgorithms +ssh-rsa 和 PubkeyAcceptedAlgorithms +ssh-rsa,但这会降低安全性,不要写进全局配置。
# 在目标 Mac 上开启并确认远程登录(部分系统需终端有完全磁盘访问权限)
% sudo systemsetup -setremotelogin on
% sudo systemsetup -getremotelogin
# 把私钥口令存入钥匙串,重启后用 --apple-load-keychain 恢复
% ssh-add --apple-use-keychain ~/.ssh/id_ed25519
% ssh-add --apple-load-keychain
# 只使用指定密钥,避免 agent 里其他密钥被依次尝试
% ssh -o IdentitiesOnly=yes -i ~/.ssh/id_ed25519 user@host
# 经跳板机连接内网主机
% ssh -J bastion.example.com user@10.0.0.5
# 本地端口转发,访问本机 8080 即访问远端回环的 80
% ssh -N -f -L 8080:127.0.0.1:80 user@host
# 查看最终生效的配置,排查 Host 段和优先级
% ssh -G host | grep -E '^(hostname|user|port|identityfile) '
# 排错:看加载了哪些密钥、卡在哪个认证阶段
% ssh -v user@host
Connection refused 先查目标 Mac 的“远程登录”是否开启、允许用户是否包含当前账号;防火墙和仅屏幕共享都不能替代 SSH。~/.ssh 700、私钥 600,并用 ssh -v 确认实际尝试的密钥;权限过宽会被直接忽略。Bad configuration option: usekeychain 出现在 Linux 或旧 ssh 上:UseKeychain 是 Apple 扩展,应放在 macOS 专用配置,或给其他系统加 IgnoreUnknown UseKeychain。ssh-add --apple-load-keychain;锁屏或钥匙串锁定也会导致再次询问。no matching host key type 不是密码错误,而是算法协商失败;不要盲目全局启用 ssh-rsa,先升级设备或改用 ed25519。Too many authentication failures 常是 agent 里密钥太多,逐个尝试触发上限;用 IdentitiesOnly=yes 和明确 -i。StrictHostKeyChecking=no 或删除 known_hosts。user@mac.local,但它依赖 mDNS,跨网段或 VPN 下应使用完整域名或 IP。合上页面,先回答,再展开对照。
--apple-use-keychain 和 UseKeychain yes 分别解决什么问题,为什么不能直接同步到 Linux?no matching host key type 应该怎样处理?sudo systemsetup -setremotelogin on。
小程序版
微信扫码,随时查命令