SSH (SSH client) 是一个用于远程访问计算机的程序,它使用户能够在远程主机上执行命令。它是登录远程主机最推荐的方法之一,因为它旨在在不安全的网络上两个不受信任的主机之间提供安全的加密通信。

SSH 使用系统级和用户特定(自定义)配置文件。在本教程中,我们将解释如何创建自定义 ssh 配置文件并使用某些选项连接到远程主机。

要求:

  1. 您必须在 Linux 桌面上安装了 OpenSSH client。
  2. 了解通过 ssh 进行远程连接时常用的选项。

SSH 客户端配置文件

以下是 ssh 客户端配置文件的位置:

  1. /etc/ssh/ssh_config – 这是默认的、系统级的配置文件。它包含适用于所有 ssh 客户端机器用户设置。
  2. ~/.ssh/config 或 $HOME/.ssh/config – 是用户特定/自定义的配置文件。它具有适用于特定用户的配置。因此,它会覆盖系统级配置文件中的默认设置。这就是我们将创建和使用的文件。

默认情况下,用户使用密码在 ssh 中进行身份验证,但是,您可以通过以下 5 个简单步骤使用 ssh keygen 设置无密码 ssh 登录。

Note: 如果您的桌面系统上不存在目录 ~/.ssh,请使用以下权限创建它。

$ mkdir -p ~/.ssh
$ chmod 0700 ~/.ssh   

上面的 chmod 命令意味着只有用户可以拥有对目录的读、写和执行权限,这是 ssh 设置所要求的。

如何创建用户特定的 SSH 配置文件

此文件通常不是默认创建的,因此您需要以仅对用户可读/写的权限创建它。

$ touch ~/.ssh/config
$ chmod 0700 ~/.ssh/config

上述文件包含由主机规范定义的节,并且该节仅应用于与规范中设置的一个模式匹配的主机。

~/.ssh/config 的传统格式如下,所有空行以及以 ‘#’ 开头的行均被视为注释:

Host    host1
	ssh_option1=value1
	ssh_option2=value1 value2
	ssh_option3=value1 

Host    host2
	ssh_option1=value1
	ssh_option2=value1 value2

Host  *
	ssh_option1=value1
	ssh_option2=value1 value2

从上面的格式中:

  1. Host host1 – 是 host1 的头定义,这是主机规范的开始位置,它以下一个头定义 Host host2 结束,从而形成一个节。
  2. host1、host2 只是要在命令行上使用的主机别名,它们不是远程主机的实际主机名。
  3. 诸如 ssh_option1=value1、ssh_option2=value1 value2 之类的配置选项适用于匹配的主机,并且应该缩进以实现良好的组织格式。
  4. 对于诸如 ssh_option2=value1 value2 这样的选项,值 value1 首先被考虑,然后是 value2。
  5. 头定义 Host *(其中 * 是一个模式 – 通配符,匹配零个或多个字符)将匹配零个或多个主机。

仍然考虑上面的格式,这是 ssh 读取配置文件的方式。如果您执行 ssh 命令以远程访问 host1,如下所示:

$ ssh host1

上述 ssh 命令将执行以下操作:

  1. 匹配配置文件中的主机别名 host1,并应用定义头 Host host1 下设置的选项。
  2. 然后移动到下一个主机节 Host host2,发现命令行提供的名称不匹配,因此不使用来自此处的任何选项。
  3. 它继续到最后一节 Host *,它与所有主机匹配。在这里,它将此节中的所有选项应用于主机连接。但是它不能覆盖之前节中已经使用的任何选项值。
  4. host2 也适用同样的情况。

如何使用用户特定的 SSH 配置文件

一旦您了解了 ssh 客户端配置文件的工作原理,您就可以按以下方式创建它。请记住使用适用于您的服务器环境的选项和值(主机别名、端口号、用户名等)。

使用您喜欢的编辑器打开配置文件:

$ vi ~/.ssh/config

并定义必要的部分:

Host fedora25
        HostName 192.168.56.15
        Port 22
        ForwardX11 no

Host centos7
        HostName 192.168.56.10
        Port 22
        ForwardX11 no

Host ubuntu
        HostName 192.168.56.5
        Port 2222
        ForwardX11 yes

Host *
        User ggdoc
        IdentityFile ~/.ssh/id_rsa
        Protocol 2
        Compression yes
        ServerAliveInterval 60
        ServerAliveCountMax 20
        LogLevel INFO

上面 ssh 配置选项的详细解释。

  1. HostName – 定义要登录的真实主机名,或者,您也可以使用数字 IP 地址,这也是允许的(在命令行和 HostName 规范中)。
  2. User – 指定以哪个用户身份登录。
  3. Port – 设置在远程主机上连接的端口号,默认值为 22。使用远程主机的 sshd 配置文件中配置的端口号。
  4. Protocol – 此选项定义了 ssh 应按优先顺序支持的协议版本。常用值为 ‘1’ 和 ‘2’,多个版本必须用逗号分隔。
  5. IdentityFile – 指定从中读取用户的 DSA、Ed25519、RSA 或 ECDSA 身份验证标识的文件。
  6. ForwardX11 – 定义 X11 连接是否会自动通过安全通道重定向并设置 DISPLAY。它有两个可能的值 “yes” 或 “no”。
  7. Compression – 用于在远程连接期间设置压缩,值为 “yes”。默认为 “no”。
  8. ServerAliveInterval – 设置超时间隔(秒),如果在之后未收到服务器的响应(或数据),ssh 将通过加密通道发送消息以请求服务器的响应。默认值为 0,意味着不会向服务器发送任何消息,如果已定义 BatchMode 选项,则为 300。
  9. ServerAliveCountMax – 设置 ssh 在收到服务器的任何响应之前可以发送的服务端存活消息的数量。
  10. LogLevel – 定义在记录来自 ssh 的消息时使用的详细程度级别。允许的值包括:QUIET, FATAL, ERROR, INFO, VERBOSE, DEBUG, DEBUG1, DEBUG2 和 DEBUG3。默认为 INFO。

连接任何远程 Linux 主机(在我的例子中为 CentOS 7)的标准方法,定义在上述配置文件的第二部分中,我们通常会输入以下命令:

$ ssh -i ~/.ssh/id_rsa -p 22 [email protected]

然而,通过使用 ssh 客户端配置文件,我们可以简单地键入以下命令:

$ ssh centos7 

您可以在 ssh 客户端配置 man page 中找到更多选项和使用示例:

$man ssh_config