我想了解为什么这三条规则的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.1
3/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
匹配而不是本地匹配?::1
127.0.0.1