配置文件~/.ssh/config和/etc/ssh/ssh_config

本文介绍了OpenSSH客户端配置文件的使用方法及关键配置项的作用。包括如何覆盖全局参数、配置文件的安全要求、各种配置项如CheckHostIP、ForwardX11等的具体功能与设置建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一般不需要修改OpenSSH客户端配置文件。对于给定用户,共有两个配置文件:~/.ssh/config(用户专用)和/etc/ssh /ssh_config(全局共享)。要按照该顺序读取这些文件,对于给定的某个参数,它使用的是读取过程中发现的第一个配置。用户可以通过以下方式将全 局参数设置覆盖掉:在自己的用户配置文件中设置同样的参数即可。在ssh或scp命令行上给出的参数的优先级要高于这两个文件中所设置的参数的优先级。

用户的~/.ssh/config文件必须由该用户所有(他是目录"~/"的所有者),并且除了所有者之外任何人都不能写入该文件。否则客户端就会给出一条错误消息然后退出。这个文件的模式通常被设为600,这是因为除了它的所有者之外任何人没有理由能够读取它。

这些配置文件中的配置行包含着声明,这些声明均以某个关键字(不区分大小写)开头,后面跟着空格,最后是参数(区分大小写)。可以使用关键字Host,让声明只作用于特定的系统。Host声明作用于它与下一条Host声明之间的所有配置行。

CheckHostIPyesno

 

  如果将其设置为 yes (默认值),那么除了用 known_hosts

  文件中的主机名之外,还可以采用 IP 地址来识别远程系统。

  若设置为 no ,则只使用主机名。将 CheckHostIP 设置为 yes

  可以提高系统的安全性。

ForwardX11yesno

 

  如果设置为 yes ,那么自动通过一条安全通道以不可信模式

  来转发 X11 连接,但是并不设置 shell 变量 DISPLAY

  如果 ForwardX11Trusted 也设置为 yes, 那么连接以可信模式转发。

  此外,可以在命令行上使用选项 -X 以不可信模式重定向 X11 连接。

  这个参数的默认值是 no 。要想让 X11 转发起作用,还必须将服务器

  上的 /etc/sshd_config 文件中的 X11Forwarding 设置为 yes (参见 8.4.6 节)。

  更多信息请参见 8.6 节的“ X11 转发”部分。

ForwardX11Trustedyesno

 

   ForwardX11 一块使用时, ForwardX11 必须设置为 yes (默认),

  这个声明才能起作用。当这个声明设置为 yes (默认),而

  ForwardX11 也设置为 yes 时,这个声明将设置 shell 变量 DISPLAY

  并给予远程 X11 客户端对原来的(服务器) X11 显示的完全访问权限。

  此外,可以在命令行上使用选项 -Y 以可信模式重定向 X11 连接。

  这个声明的默认值是 no 。要想让 X11 转发起作用,还必须将服务

  器上的 /etc/sshd_config 文件中的 X11Forwarding 设置为 yes (参见 8.4.6 节)。

  更多信息请参见 8.6 节的“ X11 转发”部分。

HashKnownHosts

 

  当设置为 yes 时, OpenSSH 会将文件 ~/.ssh/known_hosts 中的

  主机名和地址进行散列。当设置为 no 时,主机名与地址将以明

  文形式写入。 UbuntuLinux 将这份声明设置为 yes 来提高系统的

  安全性。关于 known_hosts 文件的更多信息请参见 8.3.3 节第 2 小节。

Hosthostnames

 

  指定它后面的(直到下一个主机声明为止)声明只适用于与

hostnames 相匹配的主机。 Hostnames 可以包含 ? * 通配符。

  单个的 * 指定所有主机。如果没有这个关键字,任何声明都适用于所有主机。

HostbasedAuthenticationyesno

 

  当设置为 yes 时,尝试进行 rhosts 身份验证。对于安全性要求较

  高的系统,设置为 no (默认)。

HostKeyAlgorithmsalgorithms

 

  其中 algorithms 是一个由逗号隔开的算法列表,客户端按照优

  先级顺序依次使用这些算法。从 ssh-rsa ssh-dss 中选择 algorithms

  (默认值为“ ssh-rsa,ssh-dss )。

Portnum

  使 OpenSSH 通过 num 端口与远程系统连接。默认值为 22

StrictHostKeyCheckingyesno ask

 

  决定 OpenSSH 是否将主机密钥添加到用户的 known_hosts 文件

  中以及如何添加。如果将该选项设置为 ask ,那么在连接新系

  统时会询问是否添加主机密钥;如果设置为 no ,就会自动添加

  主机密钥;如果设置为 y e s ,就要求手工添加主机密钥。若将

  参数设置 yes ask ,则当某系统的主机密钥发生改变之后,

  OpenSSH 会拒绝连接到该系统。对于安全性要求较高的系统,

  请将此参数设置为 yes ask 。默认为 ask

TCPKeepAliveyesno

 

  如果设置为 yes (默认值),就定期检查连接是否存活。

  如果服务器崩溃或者由于其他原因导致连接死掉,那么这种

  检查将会导致 ssh scp 连接中断,即便连接只是暂时死掉。

  若将这个参数设置为 no ,则会导致客户端不去检查连接是否存活。

  这项声明用到了 TCP keepalive 选项,它未经加密,并且容易受到

  IP 欺骗(参见术语表)。如果希望采用能够防止 IP 欺骗的替代品,

  那么可以采用基于服务器的相关技术,请参见 8.4.6 节中的“ ClientAliveInterval ”。

Username

 

  指定登录系统时所用的用户名。可用 Host 声明来指定系统。

  该选项意味着,在远程系统上登录时,如果使用的用户名不同

  于在本地系统上登录所用的用户名,那么不必在命令行上输入用户名。

### SSH Config 文件内容及作用 #### 配置文件路径 SSH 客户端会按照特定顺序读取配置数据,优先级依次为: 1. **命令行选项** 2. **用户级别的配置文件 (~/.ssh/config)** 3. **系统范围的配置文件 (/etc/ssh/ssh_config)** 这种加载顺序允许用户自定义其 SSH 行为,而无需修改全局配置[^1]。 --- #### SSH Config 的基本结构 SSH Config 是一个纯文本文件,通常位于 `~/.ssh/config` 路径下。它支持通过关键字参数的形式定义各种连接属性。以下是常见的关键字及其功能: | 关键字 | 描述 | |--------------|----------------------------------------------------------------------| | `Host` | 定义主机别名或匹配模式 | | `HostName` | 实际要连接的目标服务器地址 | | `User` | 登录目标服务器时使用的用户名 | | `Port` | 目标服务器监听的 SSH 端口号,默认为 22 | | `IdentityFile` | 指定用于身份验证的私钥文件 | 例如,在以下配置中: ```plaintext Host sshtest HostName www.test.com User user Port 22 IdentityFile ~/.ssh/id_rsa_test ``` 上述片段表示当运行 `ssh sshtest` 命令时,客户端会自动尝试以 `user` 用户的身份连接到 `www.test.com` 主机,并使用指定的私钥文件进行认证[^4]。 --- #### SSH Config 的高级特性 除了基础配置外,SSH Config 支持更复杂的场景需求,比如多账户管理条件匹配。 ##### 多账户管理 对于需要频繁切换不同 Git 或其他服务账号的情况,可以通过 `.ssh/config` 中的不同条目实现自动化区分。例如: ```plaintext Host github-personal HostName github.com User git IdentityFile ~/.ssh/id_rsa_personal Host github-work HostName github.com User git IdentityFile ~/.ssh/id_rsa_work ``` 这样可以分别用 `git@github-personal` `git@github-work` 测试不同的 SSH 密钥是否生效[^2]。 ##### 条件匹配 (`Match`) `Match` 关键字可以根据动态条件应用特定配置项。例如仅针对某些 IP 地址启用代理跳转: ```plaintext Match host *.internal.example.com ProxyJump gateway.internal.example.com ``` --- #### 应用实例 下面是一个综合性的 SSH Config 示例,展示了如何简化日常操作并增强安全性: ```plaintext # 默认配置 Host * ServerAliveInterval 60 ForwardAgent yes # 生产环境服务器 Host prod-server HostName 192.168.1.100 User admin Port 2222 IdentityFile ~/.ssh/prod_key IdentitiesOnly yes # 开发测试机器 Host dev-machine HostName test.dev.local User developer Port 22 PreferredAuthentications publickey ``` 此配置不仅减少了重复输入的工作量,还提高了效率一致性[^5]。 --- #### 注意事项 1. **权限设置**:`.ssh/config` 文件应具有严格的访问控制(建议权限为 600),以免泄露敏感信息[^3]。 2. **冲突处理**:如果多个 `Host` 条目存在重叠,则较靠后的规则会被优先采用。 3. **调试工具**:遇到问题时可使用 `-v`, `-vv`, 或 `-vvv` 参数查看详细的日志输出。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值