使用SSH配置文件

如果您每天定期通过SSH连接到多个远程系统,您会发现记住所有远程IP地址,不同的用户名,非标准端口和各种命令行选项很困难,如果不是不可能的话。

一种选择是为每个远程服务器连接创建一个bash别名。但是,对于这个问题,还有另一种更好,更简单的解决方案。OpenSSH允许您设置每用户配置文件,您可以在其中为连接的每台远程计算机存储不同的SSH选项。

本指南介绍了SSH客户端配置文件的基础知识,并介绍了一些最常用的配置选项。

先决条件

我们假设您使用的是安装了OpenSSH客户端的Linux或macOS系统。

SSH配置文件位置

OpenSSH客户端配置文件已命名config,它存储在.ssh用户主目录下的目录中。~/.ssh当用户第一次运行ssh命令时,将自动创建该目录。+

如果您从未使用过ssh,则command需要使用以下命令创建目录:

mkdir -p ~/.ssh && chmod 700 ~/.ssh

默认情况下,SSH配置文件可能不存在,因此您可能需要使用touch命令创建它:

touch ~/.ssh/config && chmod 600 ~/.ssh/config

此文件必须只能由用户读写,并且其他人无法访问:

chmod 700 ~/.ssh/config

SSH配置文件结构和模式

SSH配置文件采用以下结构:

Host hostname1
    SSH_OPTION value
    SSH_OPTION value

Host hostname2
    SSH_OPTION value

Host *
    SSH_OPTION value

SSH客户端配置文件的内容组织为节(部分)。每个节都以该Host指令开头,并包含在与远程SSH服务器建立连接时使用的特定SSH选项。

缩进不是必需的,但建议使用缩进,因为它会使文件更易于阅读。

该Host指令可以包含一个模式或以空格分隔的模式列表。每个模式可以包含零个或多个非空白字符或以下模式说明符之一:

  • * - 匹配零个或多个字符。例如,Host *将匹配所有主机,同时192.168.0.*匹配192.168.0.0/24子网中的所有主机。
  • ? - 恰好匹配一个字符。该模式Host 10.10.0.?将匹配10.10.0.[0-9]范围内的所有主机。
  • !- 在模式的开头将否定其匹配例如,Host 10.10.0.* !10.10.0.5将匹配10.10.0.0/24子网中的任何主机,除了10.10.0.5。

SSH客户端按节读取配置文件节,如果多个模式匹配,则第一个匹配节中的选项优先。因此,应在文件开头提供更多特定于主机的声明,并在文件末尾提供更一般的覆盖。

您可以通过键入man ssh_config终端或访问ssh_config手册页来查找可用ssh选项的完整列表。

SSH的配置文件也被其他程序,如阅读scp,sftp和rsync。

基本SSH配置文件示例

现在我们已经介绍了SSH配置文件的基础知识,让我们看一下下面的例子。

通常,当您通过SSH连接到远程服务器时,您将指定远程用户名,主机名和端口。例如,为了连接为指定用户john到一个名为主机dev.example.com端口2322的命令行,键入:

ssh [email protected] -p 2322

如果您想使用上面命令中提供的相同选项连接到服务器,只需输入named,ssh dev您需要将以下行放入您的"~/.ssh/config文件:

的〜/ .ssh /配置

Host dev
    HostName dev.example.com
    User john
    Port 2322

现在,如果你输入:

ssh dev

ssh客户端将读取配置文件,它将使用为dev主机指定的连接详细信息,

共享SSH配置文件示例

此示例提供有关主机模式和选项优先级的更多详细信息。

我们来看下面的示例文件:

Host targaryen
    HostName 192.168.1.10
    User daenerys
    Port 7654
    IdentityFile ~/.ssh/targaryen.key

Host tyrell
    HostName 192.168.10.20

Host martell
    HostName 192.168.10.50

Host *ell
    user oberyn

Host * !martell
    LogLevel INFO

Host *
    User root
    Compression yes
  • 如果您键入ssh targaryenssh客户端将读取该文件并将应用第一个匹配的选项Host targaryen。然后它将逐个检查下一个节以匹配模式。下一个匹配的是Host * !martell,除了martell它之外的所有主机,它将应用此节中的连接选项。最后,最后一个定义Host *也是匹配的,但ssh客户端只采用该Compression选项,因为该User选项已在该Host targaryen节中定义。本案例中使用的完整选项列表如下:

    HostName 192.168.1.10
    User daenerys
    Port 7654
    IdentityFile ~/.ssh/targaryen.key
    LogLevel INFO
    Compression yes
    • 在运行时ssh tyrell匹配的主机模式是:Host tyrell,Host *ell,Host * !martell和Host *。在这种情况下使用的选项是:
    HostName 192.168.10.20
    User oberyn
    LogLevel INFO
    Compression yes
  • 如果运行ssh martell匹配的主机模式是:Host martell,Host *ell和Host *。在这种情况下使用的选项是:

    HostName 192.168.10.50
    User oberyn
    Compression yes
    • 对于所有其他连接Host * !martell,Host *将使用和部分中指定的选项。

    覆盖SSH配置文件选项

    ssh客户端按以下优先顺序接收其配置:

    1. 从命令行指定的选项
    2. 中定义的选项 ~/.ssh/config
    3. 中定义的选项 /etc/ssh/ssh_config

    如果要覆盖单个选项,可以在命令行中指定它。例如,如果您有以下定义:

    Host dev
    HostName dev.example.com
    User john
    Port 2322

并且您希望使用所有其他选项,但要以用户身份进行连接,root而不是john仅在命令行上指定用户:

ssh -o "User=root" dev

在-F(configfile)开关允许你指定一个替代每个用户配置文件。

如果您希望ssh客户端忽略ssh配置文件中指定的所有选项,则可以使用:

ssh -F /dev/null [email protected]

结论

您已经学习了如何配置用户ssh配置文件。您可能还需要设置基于SSH密钥的身份验证并连接到Linux服务器而无需输入密码。

默认情况下,SSH侦听端口22。 更改默认SSH端口可以降低自动攻击的风险,从而为服务器增加额外的安全层。

猜你喜欢

转载自www.linuxidc.com/Linux/2019-08/159952.htm
0条评论
添加一条新回复
  
今日推荐