如何配置自定义 SSH 连接以简化远程访问
SSH(SSH 客户端)是一个用于远程访问机器的程序,它使用户能够在远程主机上执行命令。它是登录远程主机最推荐的方法之一,因为它旨在通过不安全的网络在两个不受信任的主机之间提供安全加密通信。
SSH使用系统范围和用户特定(自定义)配置文件。在本教程中,我们将解释如何创建自定义 ssh 配置文件并使用某些选项连接到远程主机。
要求:
- 您必须在 Linux 桌面上安装OpenSSH 客户端。
- 了解通过 ssh 进行远程连接的常用选项。
SSH 客户端配置文件
以下是 ssh 客户端配置文件的位置:
/etc/ssh/ssh_config
– 这是默认的系统范围配置文件。它包含适用于所有 ssh 客户端计算机用户的设置。~/.ssh/config
或$HOME/.ssh/config
– 是用户特定/自定义配置文件。它具有适用于特定用户的配置。因此,它会覆盖系统范围配置文件中的默认设置。这是我们将创建和使用的文件。
默认情况下,用户使用密码在 ssh 中进行身份验证,但是,您可以通过 5 个简单的步骤使用 ssh keygen 设置 ssh 无密码登录。
注意:如果~/.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
从上面的格式来看:
- 主机 host1 – 是host1的标题定义,这是主机规范的开始位置,并以下一个标题定义结束, 主机 host2构成一个部分。
- host1、host2只是命令行上使用的主机别名,它们不是远程主机的实际主机名。
- 配置选项如ssh_option1=value1、ssh_option2=value1 value2适用于匹配的主机,并且应该缩进以便更好地组织格式。
- 对于诸如ssh_option2=value1 value2之类的选项,首先考虑值value1 ,然后考虑 value2。
- 标头定义Host *(其中
*
是模式 - 匹配零个或多个字符的通配符)将匹配零个或多个主机。
仍然考虑上面的格式,这是 ssh 读取配置文件的方式。如果您执行 ssh 命令以远程访问host1,如下所示:
$ ssh host1
上述 ssh 命令将执行以下操作:
- 匹配配置文件中的主机别名host1并应用定义标头Host host1下设置的选项。
- 然后移动到下一个主机部分,主机 host2并发现命令行上提供的名称不匹配,因此从这里开始不使用任何选项。
- 它继续执行最后一个部分Host *,该部分匹配所有主机。在这里,它将此部分中的所有选项应用于主机连接。但它不能覆盖之前部分中已经使用的任何选项值。
- 这同样适用于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 example IdentityFile ~/.ssh/id_rsa Protocol 2 Compression yes ServerAliveInterval 60 ServerAliveCountMax 20 LogLevel INFO
以上 ssh 配置选项的详细解释。
- HostName – 定义要登录的真实主机名,或者,您可以使用数字 IP 地址,这也是允许的(在命令行和HostName规范中)。
- 用户— 指定登录的用户。
- 端口– 设置远程主机上连接的端口号,默认值为22。使用远程主机的 sshd 配置文件中配置的端口号。
- 协议– 此选项按优先顺序定义 ssh 应支持的协议版本。通常的值为'1'和'2',多个版本必须用逗号分隔。
- IdentityFile — 指定从中读取用户 DSA、Ed25519、RSA 或 ECDSA 身份验证身份的文件。
- ForwardX11 – 定义 X11 连接是否自动通过安全通道和 DISPLAY 设置重定向。它有两个可能的值“yes”或“no”。
- 压缩– 设置为“yes”表示远程连接时是否进行压缩,默认为“no”。
- ServerAliveInterval – 设置超时间隔(以秒为单位),如果在此间隔之后未收到来自服务器的响应(或数据),则 ssh 将通过加密通道发送一条消息,以请求服务器做出响应。默认值为0,表示不会向服务器发送任何消息,如果已定义 BatchMode 选项,则为300 。
- ServerAliveCountMax – 设置在 ssh 未收到服务器任何响应的情况下可发送的服务器活动消息的数量。
- LogLevel – 定义从 ssh 记录消息时使用的详细程度。允许的值包括:QUIET、FATAL、ERROR、INFO、VERBOSE、DEBUG、DEBUG1、DEBUG2 和 DEBUG3。默认值为 INFO。
连接任何远程 Linux 主机(我的情况是 CentOS 7)的标准方式在上面的配置文件第二部分中定义,我们通常会输入以下命令:
$ ssh -i ~/.ssh/id_rsa -p 22 example@192.168.56.10
但是,使用 ssh 客户端配置文件,我们只需输入以下命令:
$ ssh centos7
您可以在 ssh 客户端配置手册页中找到更多选项和使用示例:
$man ssh_config
到目前为止,在本指南中,我们向您解释了如何在 Linux 中使用用户特定的(自定义)ssh 客户端配置文件。使用下面的反馈表就本文向我们反馈。