iTerm2 SSH 配置:Profile、跳板机与 ssh config 实操
iTerm2 不是 SSH 客户端,它调用系统自带的 ssh,所以你在 ~/.ssh/config 里写的一切都会直接生效。把这份文件写好,iTerm2 就从一个终端变成了一个轻量的连接管理器。
这篇按顺序讲四件事:配置文件怎么写、Profile 怎么用、跳板机和转发怎么配、什么时候该换工具。
第一步:把 ~/.ssh/config 写成一个主机库
# 全局默认:保活 + 复用连接,弱网下少断线
Host *
ServerAliveInterval 30
ServerAliveCountMax 3
ControlMaster auto
ControlPath ~/.ssh/sockets/%r@%h-%p
ControlPersist 10m
Host bastion
HostName 203.0.113.9
User ops
IdentityFile ~/.ssh/id_ed25519
Host db-prod
HostName 10.0.3.11
User deploy
Port 2222
ProxyJump bastion
LocalForward 5433 127.0.0.1:5432
几点值得单独说:
ControlMaster让同一台主机的第二个会话复用已有连接,开新标签几乎是瞬时的Host *要放在文件末尾:OpenSSH 对每个参数只认第一次出现的值,放在开头会让后面具体主机里设的参数全部落空- 写完用
ssh -G db-prod看实际生效的配置,比猜快得多 ControlPath的目录要先建好:mkdir -p ~/.ssh/sockets- 文件权限必须是 600,否则 ssh 会直接拒绝读取
为什么 Host * 放在开头会失效
这不是风格问题,是 OpenSSH 的取值规则决定的:每个参数只取第一次出现的值,后出现的同名字段不会覆盖前面的。
所以顺序应该是「具体在前,通配在后」。Host db-prod 写在最上面,Host * 放在最下面兜底,两者不冲突的参数才会由 Host * 补上。想确认最终生效值,用 ssh -G db-prod | grep -i forward 之类的命令直接看结果,比按顺序推演可靠。
第二步:用 Profile 把常用操作变成一次点击
iTerm2 的 Profile 可以直接执行一条命令。把 Command 设成 ssh db-prod,就得到一个点击即连的入口;再打开「Send text at start」,可以自动进入目录、启动 tmux 或盯日志。
三种常用组合:
- 只读巡检:启动时发送
cd /var/log && tail -f app.log - 固定工作目录:Command 用
ssh db-prod -t 'cd /srv/app && exec $SHELL -l' - 连接复用:先用一个 Profile 跑
ssh -MNf db-prod,之后所有窗口共用同一条链路
Profile 能记住工作目录、字体、颜色和快捷键,这部分的体验比手敲命令舒服,也是很多人留在 iTerm2 的原因。
第三步:跳板机与三种转发
| 需求 | config 写法 | 命令行等价 |
|---|---|---|
| 单级跳板 | ProxyJump bastion |
ssh -J bastion host |
| 多级跳板 | ProxyJump a,b |
ssh -J a,b host |
| 本地端口转发 | LocalForward 5433 127.0.0.1:5432 |
ssh -L 5433:127.0.0.1:5432 host |
| 远程端口转发 | RemoteForward 8080 127.0.0.1:80 |
ssh -R 8080:127.0.0.1:80 host |
| 动态转发(SOCKS5) | DynamicForward 1080 |
ssh -D 1080 host |
生产环境优先用 ProxyJump,而不是 ProxyCommand nc 那套老写法:前者由 ssh 自己处理跳板认证和密钥,链路更简单,出错时提示也更清楚。
转发最容易踩的坑是「本地端口已被占用」。LocalForward 5433 ... 报 Address already in use 时,换一个本地端口就行,不需要改动服务端。
第四步:分屏与广播
iTerm2 的 split pane 加上「Broadcast input to all panes」,可以一次在四台机器上跑同一条命令,临时批量改配置很实用。
它的边界也很清楚:广播只对当前窗口有效,关了窗口就没了;参与的主机要手工摆好,没有分组,也没有「把这批机器存下来」。机器一多,这个方法就不划算了。
什么时候 iTerm2 就不够了
- 主机超过二三十台,靠 config 里的 Host 名字找机器开始变慢
- 凭据要跨多台复用,改一次密码要改很多处
- 除了终端还要开 RDP、VNC 或者连数据库
- 需要会话日志留痕,方便回看排障过程
这几种情况就是图形化客户端的主场。四款常见工具的选择逻辑在 Mac SSH 客户端怎么选,从 config 迁移过去的具体步骤在把 SSH 配置导入 DartShell。跳板机链路更复杂的生产环境,可以看生产环境的 SSH 跳板机怎么配。
常见问题
iTerm2 需要单独配置 SSH 吗?
不需要。iTerm2 调用系统 ssh,~/.ssh/config 里的别名、端口、密钥和跳板设置都会直接生效。iTerm2 负责的是窗口、分屏和快捷键。
为什么 Profile 里连不上,终端里却可以?
Profile 的 Command 默认用非登录 shell,可能没加载 PATH 或 ssh agent。把 Command 写成绝对路径 /usr/bin/ssh db-prod 通常就正常了。
私钥有 passphrase,怎么避免每次输入?
执行 ssh-add --apple-use-keychain ~/.ssh/id_ed25519,并在 config 里加 AddKeysToAgent yes 和 UseKeychain yes。钥匙串会记住一次,之后由系统解锁。
iTerm2 能帮我记住密码吗?
不能,也不建议这么做。密码方案用密钥,或者交给带加密凭据库的图形化客户端。把密码写进脚本或配置文件的成本,通常比省下的几秒钟高。
多台机器同时执行一条命令,iTerm2 怎么做?
分屏后打开 Broadcast input,适合临时操作;要在几十台机器上跑同一条命令,用 pssh 或 Ansible 更稳,至少失败时能看到是哪台出错。
继续阅读
- Mac SSH 客户端怎么选:iTerm2、SecureCRT、Termius、DartShell 放在一起比
- 生产环境的 SSH 跳板机怎么配:多级跳板与审计要求
- SSH 本地端口转发:把内网 Web 服务拉到本地
- Mac 上的 SSH 私钥怎么管:生成、权限与 passphrase
DartShell
想要更高效的远程运维体验?
DartShell 在一套 macOS 原生体验里统一了 SSH、RDP、VNC、SFTP 和串口,帮你减少工具切换和重复配置。
Download DartShell