sshd_config 中的匹配地址规则,localhost、127.0.0.1 和 [::1] 之间的区别

sshd_config 中的匹配地址规则,localhost、127.0.0.1 和 [::1] 之间的区别

我想了解为什么这三条规则的sshd_config行为不同:

Match host localhost 
   PasswordAuthentication yes
Match address 127.0.0.1
   PasswordAuthentication yes
Match address ::1
   PasswordAuthentication yes

假设在机器 A 上设置了其中一条规则,并且还有另一台机器 B,它可以通过以下 3 个隧道之一在本地 ssh 到 A:

A$ ssh B -R2222:localhost:22 
A$ ssh B -R2222:127.0.0.1:22
A$ ssh B -R2222:[::1]:22

为了在机器 A 上进行测试,我使用:

A$ ssh localhost
A$ ssh 127.0.0.1
A$ ssh ::1

对于每个隧道设置我在 B 上进行测试:

B$ ssh -p2222 localhost
B$ ssh -p2222 127.0.0.1
B$ ssh -p2222 ::1

(同一时刻只有一个隧道处于活动状态)

如果它要求输入密码,则匹配,否则不匹配。共有 3*(3+3*3)=36 个测试。对于每 3 个不同的匹配规则,每 3 个不同的隧道在 A 上进行 3 次测试,在 B 上进行 3 次测试。也就是说,每个规则有 12 个测试。

结果:

因为Match host localhost有 12/12 场比赛(总是要求输入密码)。

因为Match address 127.0.0.1有 4/12 的匹配:1/3 的匹配机器 A,A$ ssh 127.0.0.13/3 的匹配机器 B,当隧道设置为A$ ssh B -R2222:127.0.0.1:22

因为Match address ::1有 8/12 匹配,也就是 4 失败:A$ ssh 127.0.0.1当隧道设置时,A 有 1/3 失败,B 有 3/3 失败A$ ssh B -R2222:127.0.0.1:22

显然,根据规则,Match address 127.0.0.1,::1所有组合都会被匹配。

但是我不明白这是如何工作的,特别是为什么地址localhost是通过规则匹配::1而不是通过规则匹配127.0.0.1,以及为什么地址127.0.0.1(分别是)只能通过规则(分别是)远程::1匹配而不是本地匹配?::1127.0.0.1

相关内容