SSH config 使用指南:多台 Linux 服务器如何快速连接
前言
管理多台 Linux 云服务器时,经常需要通过 SSH 远程连接。如果每台服务器的 IP、端口和登录用户都不一样,每次都手动输入完整命令会比较麻烦。
例如:
ssh -p 2222 -i ~/.ssh/id_ed25519 ubuntu@192.0.2.10
如果有多台服务器,就需要记住不同的地址和参数。
OpenSSH 提供了一个很实用的功能:SSH config。通过配置文件,可以给服务器设置别名,以后只需要执行 ssh 服务器别名 就能连接。
一、SSH config 文件在哪里?
OpenSSH 客户端通常会读取用户目录下的 SSH 配置文件。
Linux、macOS:
~/.ssh/config
Windows 自带 OpenSSH:
C:\Users\用户名\.ssh\config
需要注意,这里的 config 是文件名,没有 .txt 后缀。
在 Linux 中,如果目录不存在,可以先创建:
mkdir -p ~/.ssh
然后编辑配置文件:
nano ~/.ssh/config
Windows 可以使用记事本或 VS Code 编辑对应文件。
SSH config 是客户端配置,不需要修改服务器上的 sshd_config,也不需要因为增加服务器别名就重启 SSH 服务。
二、给服务器设置一个别名
假设有一台云服务器,连接信息如下:
- IP 地址:192.0.2.10
- 用户名:ubuntu
- SSH 端口:2222
- 私钥:~/.ssh/id_ed25519
其中 IP 是文档示例地址,实际使用时替换为自己的服务器地址。
可以在 config 中写入:
Host demo-hk
HostName 192.0.2.10
User ubuntu
Port 2222
IdentityFile ~/.ssh/id_ed25519
每个字段的作用:
| 配置项 | 含义 |
|---|---|
| Host | 本地使用的服务器别名 |
| HostName | 真实的服务器域名或 IP |
| User | SSH 登录用户名 |
| Port | SSH 服务监听端口 |
| IdentityFile | 用于认证的私钥文件 |
保存后,在终端执行:
ssh demo-hk
SSH 就会自动读取对应参数,不需要每次填写 IP、端口和私钥路径。
需要注意,Host 只是本地别名,并不是 DNS 记录。设置这个别名后,不会改变服务器的公网 IP 或域名解析。
三、管理多台服务器
如果有多台服务器,可以在同一个 config 文件中写入多个 Host 配置。
例如:
Host demo-hk
HostName 192.0.2.10
User ubuntu
Port 2222
IdentityFile ~/.ssh/id_ed25519
Host demo-sg
HostName 192.0.2.20
User root
Port 2200
IdentityFile ~/.ssh/id_ed25519
Host demo-us
HostName 192.0.2.30
User debian
Port 22
IdentityFile ~/.ssh/id_ed25519
以后连接不同服务器,只需要:
ssh demo-hk
ssh demo-sg
ssh demo-us
相比每次输入完整 SSH 命令,这种方式更适合经常管理多台服务器的场景。
另外,如果某台服务器更换了公网 IP,只需要修改 HostName,不需要改变日常使用的连接命令。
四、多个服务器使用同一把私钥
如果几台服务器都授权了同一把公钥,可以让它们使用相同的 IdentityFile。
不过 SSH 客户端还可能从 ssh-agent 中获取其他私钥进行认证。
如果本地保存的密钥比较多,有时会遇到客户端尝试了多把无关密钥,最后服务器提示认证次数过多的问题。
可以增加:
IdentitiesOnly yes
例如:
Host demo-hk
HostName 192.0.2.10
User ubuntu
Port 2222
IdentityFile ~/.ssh/id_ed25519
IdentitiesOnly yes
这样 SSH 会限制使用所配置的认证身份,而不是任意尝试 ssh-agent 提供的其他密钥。
需要注意,IdentitiesOnly yes 不会自动生成密钥,也不会将公钥上传到服务器。服务器仍然需要提前配置正确的公钥认证。
五、使用 Host * 设置通用参数
如果希望所有服务器使用一些相同的配置,可以使用通配符。
例如:
Host *
ServerAliveInterval 30
ServerAliveCountMax 3
这里的配置表示客户端每隔约 30 秒,在连接空闲时向服务器发送一次 SSH 层的保活请求;如果连续多次没有收到响应,就可能断开连接。
这种方式可以帮助发现已经失去响应的 SSH 连接,但不能保证网络中断后自动恢复,也不能代替网络故障排查。
另外,SSH config 通常采用先匹配到的参数值优先的规则。
因此,建议将具体服务器的 Host 配置写在前面,通用的 Host * 放在后面。
例如:
Host demo-hk
HostName 192.0.2.10
User ubuntu
Port 2222
Host *
ServerAliveInterval 30
ServerAliveCountMax 3
这样方便后续为特定服务器单独调整参数。
六、通过跳板机连接内网服务器
有些服务器没有直接暴露 SSH 端口,只能先连接一台跳板机,再进入内网服务器。
OpenSSH 支持 ProxyJump,可以在 config 中提前指定跳板机。
例如:
Host bastion
HostName 192.0.2.20
User ubuntu
Port 2222
Host internal
HostName 10.0.0.10
User ubuntu
Port 22
ProxyJump bastion
以后执行:
ssh internal
SSH 会先通过 bastion 建立连接,再通过跳板机转发到目标服务器。
需要注意,跳板机必须能够访问内网服务器的 SSH 端口,客户端也需要满足相关认证要求。
ProxyJump 只负责建立连接路径,并不会自动修改云服务器的安全组或防火墙。
如果跳板机与目标服务器使用不同的私钥,可以分别在各自的 Host 配置中指定 IdentityFile。
七、scp 和 sftp 也可以使用别名
SSH config 不只对 ssh 命令有效。
例如,将本地文件上传到服务器:
scp ./test.txt demo-hk:/tmp/
或者将远程文件下载到当前目录:
scp demo-hk:/tmp/test.txt ./
这里的 demo-hk 会使用前面配置的 HostName、User、Port 等参数。
如果需要交互式传输文件,也可以执行:
sftp demo-hk
这样不需要为不同服务器反复填写相同的连接信息。
八、如何检查配置是否生效?
配置完成后,如果连接仍然使用了错误的端口或用户,可以通过 SSH 自带的命令检查解析结果。
执行:
ssh -G demo-hk
它会显示 SSH 对这个目标最终解析出的配置,包括 hostname、user、port 等信息。
在 Linux 中,可以进一步过滤:
ssh -G demo-hk | grep -E '^(hostname|user|port|identityfile) '
如果使用 Windows PowerShell,可以写成:
ssh -G demo-hk | Select-String '^(hostname|user|port|identityfile) '
如果参数没有问题,但仍然无法连接,可以使用详细日志:
ssh -vv demo-hk
通过输出判断是 DNS 解析、TCP 连接还是密钥认证阶段出现了问题。
需要注意,ssh -G 只是输出客户端解析后的配置,不会真正连接服务器,也不能证明服务器已经开放对应端口。
九、几个容易忽略的问题
1. config 文件权限不正确
Linux 上的 SSH 用户配置文件应该只有当前用户可以修改。
可以设置:
chmod 600 ~/.ssh/config
Windows 则主要通过 NTFS 文件权限控制访问,不需要直接照搬 Linux 的 chmod 命令。
2. IdentityFile 不是公钥路径
IdentityFile 通常应该指向客户端的私钥文件。
例如:
IdentityFile ~/.ssh/id_ed25519
而不是:
IdentityFile ~/.ssh/id_ed25519.pub
带 .pub 的通常是公钥,不是用于客户端签名认证的私钥。
3. 不要为了连接方便关闭主机密钥检查
遇到 SSH 主机密钥提示时,应该核对服务器的密钥指纹。
不建议直接设置:
StrictHostKeyChecking no
来忽略所有相关警告。
特别是服务器更换 IP 或重装系统之后,应先确认变化是否符合预期,避免忽略潜在的连接安全问题。
4. 不要在 config 中保存密码
SSH config 用来管理连接参数,不应该直接保存服务器登录密码。
更合理的方式是使用 SSH 密钥认证,并妥善保护本地私钥。
总结
SSH config 非常适合经常管理多台 Linux 云服务器的场景。
最常用的配置项包括:
- Host:服务器别名。
- HostName:真实地址。
- User:登录用户名。
- Port:SSH 端口。
- IdentityFile:私钥路径。
- IdentitiesOnly:限制认证身份。
- ProxyJump:通过跳板机连接。
配置完成后,可以用 ssh 别名 快速连接,也可以直接在 scp、sftp 中复用对应的连接参数。
遇到问题时,先通过 ssh -G 检查最终配置,再使用 ssh -vv 分析连接过程,通常比反复修改服务器 SSH 配置更高效。
- 点赞
- 收藏
- 关注作者
评论(0)