Назад | Перейти на главную страницу

Правило сопоставления адресов в 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, которая может локально 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) только удаленно, а не локально?