每次 SSH 连接都要输入一长串参数?~/.ssh/config 配置文件可以简化连接命令,还能统一管理多个主机的配置。
配置文件位置
SSH 客户端配置按以下顺序读取(后读取的优先级更高):
/etc/ssh/ssh_config— 系统全局配置~/.ssh/config— 用户个人配置
用户配置会覆盖全局配置中的同名选项。
基本语法
配置文件由多个 Host 块组成,每个块定义一组主机的配置:
|
|
注意:每行的缩进使用空格(通常 4 个空格或 1 个 Tab),不是必须但推荐。
常用配置选项
| 选项 | 说明 | 示例 |
|---|---|---|
HostName |
实际主机名或 IP | HostName 192.168.1.100 |
User |
登录用户名 | User admin |
Port |
SSH 端口 | Port 2222 |
IdentityFile |
指定私钥文件 | IdentityFile ~/.ssh/id_ed25519 |
PreferredAuthentications |
首选认证方式 | PreferredAuthentications publickey |
ServerAliveInterval |
心跳间隔秒数 | ServerAliveInterval 60 |
ServerAliveCountMax |
心跳失败次数上限 | ServerAliveCountMax 3 |
ProxyJump |
跳板机 | ProxyJump bastion |
实战示例
简化连接命令
不使用配置文件:
|
|
配置文件:
|
|
使用配置后:
|
|
通配符配置
使用 * 匹配所有主机,设置全局默认值:
|
|
重要:通配符配置应放在文件末尾,因为 SSH 使用第一个匹配的值。
多主机配置
|
|
连接时:
|
|
跳板机配置
|
|
连接内网服务器:
|
|
SSH 会自动先连接跳板机,再跳转到目标主机。
查看生效配置
使用 -G 选项查看指定主机的完整配置:
|
|
输出示例(部分):
|
|
这有助于调试配置是否生效。
配置优先级
SSH 配置值的优先级(从高到低):
- 命令行选项(
-o或-p等) - 用户配置文件
~/.ssh/config - 系统配置文件
/etc/ssh/ssh_config - 内置默认值
命令行选项优先级最高,可用于临时覆盖配置文件中的值:
|
|
安全建议
- 限制文件权限:
|
|
- 使用 HashKnownHosts:
|
|
这会将 ~/.ssh/known_hosts 中的主机名哈希化,防止泄露连接过的主机列表。
- 指定认证方式:
|
|
强制使用公钥认证,避免密码尝试。