Я хотел бы понять, почему эти три правила в sshd_config
вести себя иначе:
Match host localhost
PasswordAuthentication yes
Match address 127.0.0.1
PasswordAuthentication yes
Match address ::1
PasswordAuthentication yes
Предположим, что одно из этих правил установлено на машине A, и есть еще одна машина B, которая может локально ssh к A через один из этих 3 туннелей:
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 различных правил Match есть 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 неудачных: 1/3 неудачных для A с A$ ssh 127.0.0.1
и 3/3 не удается для B, когда туннель установлен 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
) только удаленно, а не локально?