如何在 Linux 中配置 SSH 客户端?
有时,我们可能需要使用不同的 IP 地址/主机名、用户名、具有各种命令行选项的非标准端口来访问多个远程系统。一种方法是为每个远程连接创建一个 bash 别名。但是我们有一个简单且更好的解决方案来解决这个问题。 OpenSSH 允许创建每个用户的配置文件来为每个远程服务器存储不同的 SSH 选项。在本文中,我们将通过一些示例了解 SSH 客户端配置的基础知识。
要求
安装了 OpenSSH 客户端的 Linux 或 macOS 系统。
文件位置
SSH 客户端配置文件名为 config,存储在用户主目录下的 .ssh 目录中。默认情况下,配置文件不存在,用户需要使用 touch 命令创建它。这个文件应该只有用户可以读写,其他人不能访问。
配置文件语法
SSH 配置文件采用以下语法,
Host [Alias1]
Option1 [value]
Option2 [value]
Option3 [value]
Host [Alias2]
Option1 [value]
Option2 [value]
Host [Alias3]
Option1 [value]
SSH 客户端逐节读取配置文件。如果多个模式匹配,则第一个匹配节中的选项优先。因此,特定于主机的声明应该放在第一位,而通用声明应该放在最后。
SSH 客户端不关心缩进,但建议使用它以提高可读性。
有许多可用的 ssh 选项,可以通过在 Linux 终端中键入 man ssh_config 找到,或者可以查看 /etc/ssh/ssh_config 文件以供参考。
SSH 配置文件示例
当用户想通过 ssh 连接到远程服务器时,他应该提到远程用户名,后跟 IP 地址或主机名和端口(默认端口 22 可以忽略)。考虑下面的例子,
现在,我们可以在 ~/.ssh/config 文件中包含以下几行,
如果我们简单地键入 ssh server,ssh 客户端将读取配置文件并使用提到的选项连接到远程服务器。
SSH 配置模式
语法中提到的主机指令可以包含一个模式或以空格分隔的模式列表。
Host nancy server
Working Patterns
nancy, server
模式也可以包含以下说明符之一,
- * – 匹配零个或多个字符。
Host nancy*
Working Patterns
nancy,nancy123,nancy-server,etc
- ? – 只匹配一个字符。
Host nancy?
Working Patterns
nancy1, nancy2, nancy3, etc
- ! – 当在模式的开头使用时,它会否定匹配。
Host nan* !nancy
Working Patterns
nan-1, naneo, etc [nancy will not work]
SSH 配置优先级
让我们考虑下面的示例,以更多地了解定义多个主机时 ssh 选项中的优先级,
Host nancy
HostName 10.21.43.150
Compression no
Host jancy
HostName 10.2.33.58
PermitLocalCommand no
Host trial
HostName 10.2.33.57
PermitLocalCommand yes
Host *cy !jancy
User woot
Port 22
Host *
User root
Port 22
Compression yes
- 当用户键入 ssh nancy 时,ssh 客户端应用来自第一个匹配项的选项,即 Host nancy。然后它检查下一个匹配模式,即 Host *cy !jancy。然后下一个匹配模式是 Host *,这里没有考虑任何选项,因为它们在早期匹配的模式中被覆盖。完整的选项列表是,
Host nancy
HostName 10.21.43.150
User woot
Port 22
Compression no
- 当用户键入 ssh jancy 时,匹配模式为 Host jancy 和 Host *。使用的选项是,
Host jancy
HostName 10.2.33.58
Port 22
User root
Compression yes
PermitLocalCommand no
- 当用户键入 ssh trial 时,匹配模式为 Host trial 和 Host *,
Host trial
HostName 10.2.33.57
PermitLocalCommand yes
User root
Port 22
Compression yes
- 对于所有其他远程连接,ssh 客户端将使用 Host *cy !jancy 和 Host *。
覆盖 SSH 配置文件选项
SSH客户端按以下顺序读取配置文件,
- 命令行中提到了选项。
- ~/.ssh/config 文件中提到的选项。
- /etc/ssh/ssh_config 文件中提到的选项。
现在,如果用户想要连接到 amp150.arubathena.com 但使用不同的用户,则可以在命令行中覆盖它,如下所示,