在运行 SSH 的服务器上,我需要它接受 1 个特定 SSH 主机的一些旧算法,以便我可以将文件从客户端复制到服务器。我无法更改客户端,因为它又旧又垃圾。因此,在服务器端,我使用以下内容编辑了 /etc/sshd_config ,它解决了我的问题。
HostKeyAlgorithms +ssh-rsa
PubkeyAcceptedKeyTypes +ssh-rsa
然而,问题是,ssh-rsa 不安全。所以我不想就这样离开。我该如何设置,以便如果源 IP 是 1.2.3.4,我可以专门允许这些算法适用于该主机,并且该主机可以单独使用这些算法?
答案1
与指定任何其他每主机配置相同
Host my.hostname.example.com
PubkeyAcceptedKeyTypes +ssh-rsa
HostKeyAlgorithms
顺便说一句,如果您只想连接到旧的远程主机,则不需要该选项。
答案2
sshd
为主机(或用户)使用不同配置选项的方法是使用Match
条件行块。在这种情况下Match Host ...
或Match Address ...
是最合适的,具体取决于是否sshd
可以解析连接客户端的主机名或 IP 地址。举个例子:
Match Address 10.11.12.13 10.9.8.7
PubkeyAcceptedKeyTypes +ssh-rsa
手册sshd_config
页提供了有关使用 的详细信息Match
,但大多数手册页没有说得很清楚的一件事是 sshd_config 文件中 Match 块的正确位置: 在文件的末尾。
我的 Ubuntu 20.04 上的手册页显示:
如果满足“匹配”行上的所有条件,则以下行中的关键字将覆盖配置文件全局部分中设置的关键字,直到另一个“匹配”行或文件末尾。
您必须仔细解释该句子,才能看到 Match 后面的行不应是全局配置指令,而只是其他 Match 块中的指令,直到文件末尾。
源代码中的注释块更明确地揭示了这一点,如这个答案是去年的。当找到 Match 块时,变量activep
将被清除(设置为 0),并且文件其余部分中的任何参数都不会被视为全局配置指令 - 它们都是 Match 块的一部分。
大多数答案都是关于与这个问题无关的一些怪癖。我链接到它是因为它显示了源代码中的注释。