📜  如何在 Linux 中配置 SSH 客户端?

📅  最后修改于: 2022-05-13 01:58:43.868000             🧑  作者: Mango

如何在 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 但使用不同的用户,则可以在命令行中覆盖它,如下所示,