2 3 SSH服务 SSH配置文件
目录:
一种选择是为每个远程服务器连接创建一个bash别名。 但是,还有另一个更好,更简单的解决方案。 OpenSSH允许您设置每个用户的配置文件,可以在其中为连接到的每台远程计算机存储不同的SSH选项。
本指南介绍了SSH客户端配置文件的基础知识,并介绍了一些最常见的配置选项。
先决条件
我们假设您使用的Linux或macOS系统已安装OpenSSH客户端。
SSH配置文件位置
OpenSSH客户端配置文件名为
config
,它存储在用户主目录下的
.ssh
目录中。
用户首次运行
ssh
命令时,会自动创建
~/.ssh
目录。 如果您的系统上不存在该目录,请使用以下命令创建该目录:
mkdir -p ~/.ssh && chmod 700 ~/.ssh
默认情况下,SSH配置文件可能不存在,因此您可能需要使用touch命令创建它:
touch ~/.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.中的所有主机10.10.0.范围。!-在图案开头使用时,它会否定匹配。 例如,Host 10.10.0.* !10.10.0.5匹配10.10.0.0/24子网中除10.10.0.5之外的任何主机。
SSH客户端逐节读取配置文件节,如果多个模式匹配,则第一个匹配节中的选项优先。 因此,应在文件开头给出更多特定于主机的声明,并在文件末尾给出更多常规替代。
通过在终端中键入
man ssh_config
或访问ssh_config手册页,可以找到可用的ssh选项的完整列表。
其他程序(例如
scp
,
sftp
和
rsync
)也会读取SSH配置文件。
SSH配置文件示例
现在,我们已经涵盖了SSH配置文件的基本知识,让我们来看下面的示例。
通常,当通过SSH连接到远程服务器时,您将指定远程用户名,主机名和端口。 例如,要
dev.example.com
以名为
john
的用户身份登录到端口
2322
上名为
dev.example.com
的主机,请输入:
ssh [email protected] -p 2322
要使用上面命令中提供的相同选项连接到服务器,只需键入
ssh dev
,请将以下几行添加到您的
"~/.ssh/config
文件中:
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 targaryen,ssh客户端将读取文件并从第一个匹配项Host targaryen应用选项。 然后,它一个接一个地检查下一个节以找到匹配的模式。 下一个匹配的Host * !martell是Host * !martell(表示除martell之外的所有主机),它将应用此节中的连接选项。 最后一个定义Host *也匹配,但是ssh客户端将仅采用Compression选项,因为Host targaryen节中已经定义了User选项。键入
ssh 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 yesHostName 192.168.10.50 User oberyn Compression yes对于所有其他连接,ssh客户端将使用
Host * !martell和Host *部分中指定的选项。
覆盖SSH配置文件选项
ssh客户端按以下优先级顺序读取其配置:
- 从命令行指定的选项。〜
~/.ssh/config定义的选项./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端口可通过降低自动攻击的风险为服务器增加一层额外的安全保护。
SSH终端






