ssh配置文件

时间:2020-02-23 14:40:31  来源:igfitidea点击:

什么是ssh_config文件?

在本教程中,我将为我们提供有关它的用法的完整概述以及与实时生产环境不同的实际示例。
我将尝试尽可能地基础,以帮助绝对的初学者了解ssh config文件用法的概念。

在Linux中,我们有两个不同的" SSH配置文件"

  • 服务器端-sshd_config

  • 客户端-ssh_config

不同的客户端SSH配置文件位置

首先,我们应该熟悉为环境选择的ssh配置文件的位置。
SSH将按以下顺序提供优先级

  • 命令行选项(ssh -o <arg = val>)

  • 用户的配置文件(~/.ssh/config)

  • 系统范围的配置文件(/etc/ssh/ssh_config)

对于每个参数,将使用第一个获得的值。
因此,现在我们知道可以使用这些方法或者文件来放置客户端配置,但是SSH将按提供的顺序提供先例。

带有命令行选项的SSH(ssh -o)

  • 与所有其他可用的客户端SSH配置文件相比,使用SSH的命令行参数提供的所有参数将具有最高优先级

  • 我们可以检查ssh_config的手册页,以获取与ssh一起使用的受支持参数的列表。

使用命令行参数的语法是:

ssh [-o arg1] [-o arg2] [-o arg3] .. user@remote_server

用户特定的SSH配置文件(~/.ssh/config)

我们可以在Linux服务器上为每个用户创建一个用户特定的ssh配置文件。
默认情况下,此类客户端配置文件不存在,因此我们需要根据需要创建一个

在用户主目录下创建.ssh目录,并为此目录分配700权限

[hynman@rhel-8 ~]$mkdir ~/.ssh
[hynman@rhel-8 ~]$chmod 700 ~/.ssh/
[hynman@rhel-8 ~]$ls -ld ~/.ssh/
drwx------ 2 hynman hynman 4096 Jan 29 20:16 /home/hynman/.ssh/

接下来在此目录下创建一个" config"文件,并分配" 600"权限

[hynman@rhel-8 ~]$touch ~/.ssh/config
[hynman@rhel-8 ~]$chmod 600 ~/.ssh/config
[hynman@rhel-8 ~]$ls -l ~/.ssh/
total 0
-rw------- 1 hynman hynman 0 Jan 29 20:18 config

该配置文件的内容"语法"为:

Host <hostname>
   ARG1=VALUE
   ARG2=VALUE
   ARG3=VALUE
   ..
   
Host <hostname>
   ARG1=VALUE
   ARG2=VALUE
   ..
Host *   
   ARG1=VALUE
   ARG2=VALUE
   ..

了解语法

  • 定义3个主机没有这样的限制,我刚刚其中添加了它们以供参考

  • 该文件包含关键字-参数对,"每行一个"

  • 以'##'开头的行和空行将被解释为注释。

  • 可以选择将参数括在双引号("")中,以表示包含空格的参数。

  • 配置选项可以用空格或者可选的空格分隔,并且只能是一个"="

  • 我们可以使用"主机"部分定义" n"个主机数量

  • 建议我们在定义更清晰视图的参数之前给空格加上一些缩进(虽然不是强制性的)

  • 该文件分为几个块,其中每个块都是根据"主机"值定义的

  • 在上一节中,我使用了正则表达式" PATTERN"来匹配" Host"。

模式

支持以下正则表达式" PATTERNS"列表:

*(匹配零个或者多个字符的通配符)

例如:

Host *.example.com
   # Place config here

因此,这将与example.com域相匹配

(与一个字符完全匹配的通配符)

例如:以下模式将匹配192.168.0。
[0-9]网络范围内的任何主机:

Host 192.168.0.?
  # Place config here

(匹配取反)

如果否定条目匹配,则主机条目将被忽略,无论该行上是否有其他任何模式都匹配。
因此,否定的匹配对于为通配符匹配提供例外很有用。

例如,允许从192.168.0.100以外的所有主机使用密钥

Host * !192.168.0.100 
   # Place config here

具有多个主机部分的示例SSH配置文件

下面是我的用户示例~/.ssh/config文件

现在,我可以为其中一台服务器执行SSH,并且将使用相应的配置选项进行连接(此处我尚未在/etc/hosts中定义任何server1,并且由于SSH配置文件,此映射正在工作)

[hynman@client ~]$ssh server1
[email protected]'s password:
Welcome to server1
This file was created on 2017-02-01
Go away if you have no business being here
Contact [email protected] if anything is wrong
Activate the web console with: systemctl enable --now cockpit.socket
Last login: Fri Jan 29 20:27:59 2017 from 192.168.43.10
[root@server1 ~]#

系统范围的SSH配置文件(/etc/ssh/ssh_config)

  • 要定义系统范围的SSH配置文件,请使用/etc/ssh/ssh_config文件

  • 该文件已经存在默认模板,因此我们可以添加更多"主机"条目或者使用现有模板

配置文件的位置

# ls -l /etc/ssh/ssh_config
-rw-r--r-- 1 root root 1766 Jan 29 21:40 /etc/ssh/ssh_config

默认情况下,将用几个示例值对这些部分进行注释:

# Host
#   ForwardAgent no
#   ForwardX11 no
#   PasswordAuthentication yes
#   HostbasedAuthentication yes
#   EnableSSHKeysign yes
{Output trimmed}

一些例子

例如,我们想为来自客户端计算机的所有SSH连接定义一些配置参数("通用"),以便可以在"/etc/ssh/ssh_config"文件中定义此类参数,如下所示:

Host *
   Port 2222
   Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc
   PasswordAuthentication yes
   MACs hmac-md5,hmac-sha1,[email protected]
   ConnectTimeout 20

在此示例中,我已应用了系统范围的SSH配置,以使用"端口2222"进行从客户端到任何节点的所有SSH通信。
现在,我尚未在用户专用的配置文件中为用户hynmanserver1定义任何Port

[hynman@client ~]$cat .ssh/config
Host server1
   HostName=192.168.43.154
   StrictHostKeyChecking=no
   User=root
   PasswordAuthentication=yes
   GSSAPIAuthentication=no
   ConnectTimeout=10

因此,当我们从客户端到" server1"执行SSH时(我将启用详细模式)

[hynman@client ~]$ssh -v server1
debug1: Reading configuration data /home/hynman/.ssh/config
debug1: /home/hynman/.ssh/config line 14: Applying options for *
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 20: Applying options for *
debug1: Reading configuration data /etc/ssh/ssh_config.d/05-redhat.conf
debug1: Reading configuration data /etc/crypto-policies/back-ends/openssh.config
debug1: Connecting to 192.168.43.154 [192.168.43.154] port 2222.
debug1: Connection established.

因此,默认情况下,SSH使用的是端口2222,如果我在~/.ssh/config中定义了不同的端口号该怎么办?

[hynman@client ~]$ssh -v server1
debug1: Reading configuration data /home/hynman/.ssh/config
debug1: /home/hynman/.ssh/config line 15: Applying options for *
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 20: Applying options for *
debug1: Reading configuration data /etc/ssh/ssh_config.d/05-redhat.conf
debug1: Reading configuration data /etc/crypto-policies/back-ends/openssh.config
debug1: Connecting to 192.168.43.154 [192.168.43.154] port 22.

现在,特定于用户的配置文件比系统范围的配置文件具有"先例"。