SSH 客户端 config 怎么写:主机别名、端口与跳板机
同一台电脑管理测试、生产和跳板服务器时,长串连接参数很难长期靠记忆维护。OpenSSH 客户端的 config 文件可以为每个目标保存清楚的别名。本文以连接 Ubuntu 24.04 服务器为例,客户端可使用 Windows OpenSSH、macOS 或 Linux;前提是已有可用账号和密钥,本篇不重复首次部署公钥。
文件放在客户端,别改到服务器配置
macOS 与 Linux 通常使用 ~/.ssh/config,Windows OpenSSH 通常使用用户目录下的 .ssh/config。这是发起连接的电脑上的文件,不是服务器的 sshd_config。先查看是否已有内容,备份后再增加独立的 Host 段,不要覆盖公司已有的跳板设置。
配置中填写实际地址和密钥路径,不写密码,也不把私钥内容嵌进去。以下地址 203.0.113.10 与 203.0.113.20 只用于文档演示,不能作为真实目标。
用主机别名表达用途
在本机 config 中增加以下示例:
Host app-demo
HostName 203.0.113.10
User deploy
Port 22
IdentityFile ~/.ssh/app_demo_ed25519
IdentitiesOnly yes
以后在本机执行 ssh app-demo,客户端会读取这组参数。Host 是本机使用的名称,HostName 才是实际目标;别名不需要配置公网 DNS。密钥文件必须已经存在并对应服务器授权,配置文件不会自动生成或上传它。
大多数参数使用首先获得的值,所以把精确的主机段放在宽泛的 Host * 默认段前面。某些参数可累积,尤其要核对多个身份文件是否被共同加载。OpenSSH 客户端配置手册给出了匹配顺序与各字段含义。
需要跳板时使用明确的两段配置
跳板机与目标机器可以使用不同账号和密钥。确认两段连接权限都已具备后,再给目标增加跳板:
Host jump-demo
HostName 203.0.113.20
User gateway
IdentityFile ~/.ssh/jump_demo_ed25519
IdentitiesOnly yes
Host private-demo
HostName 10.10.0.8
User deploy
IdentityFile ~/.ssh/private_demo_ed25519
IdentitiesOnly yes
ProxyJump jump-demo
本机执行 ssh private-demo 时,经跳板建立到目标的连接。私钥仍保存在本机,不需要复制到跳板。不要为了让配置“更方便”对所有主机默认开启代理转发;它与跳板连接不是同一件事。跳板只解决可达路径,目标主机密钥仍需独立核对。ssh 命令手册说明了跳板与身份认证选项。
连接前先检查最终参数
配置合并错误时,先用不建立连接的方式查看最终结果:
# 本机终端,Windows 也可直接执行第一条
ssh -G app-demo
ssh -v app-demo
第一条输出实际采用的参数;第二条建立连接并打印调试过程。检查 hostname、user、port、identityfile 和 proxyjump,确认没有被宽泛规则抢先覆盖。分享调试内容前遮盖账号、内部地址和不宜公开的路径。
macOS/Linux 应让配置文件仅由本人写入,例如检查其归属后设置 chmod 600 ~/.ssh/config。Windows 则检查用户文件权限,不套用 Linux 的 chmod 命令。文件权限过宽可能让客户端拒绝使用配置,处理时应修正具体文件,不能放开整个用户目录。
失败时恢复到可比较的连接方式
配置修改后连接失败,可先恢复备份,或用单独的临时配置文件通过 ssh -F 文件路径 测试。不要同时修改客户端设置、服务器认证和防火墙,否则很难知道问题从哪一步开始。
如果不用别名的原连接命令正常,优先比较参数合并;如果两种方式都失败,再参考SSH 连接排查。日常命名建议带上环境用途,让生产与测试容易区分。维护的目标是降低误操作,而不是把所有复杂连接都隐藏到一个看不懂的别名后面。