Tailscale: SSH работает с Openssh, скомпилированным вручную, но не с Openssh, установленным в системе

Tailscale: SSH работает с Openssh, скомпилированным вручную, но не с Openssh, установленным в системе

(Этот вопрос должен быть помечен тегом «Tailscale», но пока его не существует — требуются знания Tailscale)

У меня стандартный ноутбук Ubuntu 20.04, подключенный по ssh к удаленному Raspberry Pi (порт 22). На удаленном компьютере есть переадресация портов на маршрутизаторе (59995->22).

Примечание: я удалил ~/.ssh/configво время тестирования.

SSH всегда успешно подключается, используя:

ssh user@public_ip -i ~/.ssh/id_rsa -p 59995

Однако когда я использую Tailscale IP, он так и не подключается, а просто зависает на 120 секунд, а затем происходит тайм-аут:

ssh user@tailscale-ip -i ~/.ssh/id_rsa(не работает)

Однако, если я вручную скомпилирую OpenSSH v8.2 и использую эту версию вместо двоичного файла /usr/bin/ssh, то все работает отлично! Хотя /usr/bin/ssh тоже v8.2

./ssh user@tailscale-ip -i ~/.ssh/id_rsa(это работает!)

Резюме: системный двоичный файл отлично работает с "нормальным" ssh, но не с ssh-via-tailscale. Однако вручную скомпилированная (та же) версия Openssh отлично работает как с обычным ssh, так и с ssh-over-tailsale. Кто-нибудь знает, что может быть причиной этого?

Дополнительные замечания

Я не думаю, что это какая-то очевидная проблема с сетью tailscale: то есть, если я провожу проверку через IP-адрес tailscale, то nmapсканирование показывает, что открыты правильные порты, и я могу netcatнапрямую подключиться к сети tailscale_ip:22, она получает данные и отвечает.

diff ~/openssh-8.2p1/ssh /usr/bin/sshпоказывает, что двоичные файлы отличаются. (также огромная разница в размере, около 3 МБ против 0,7 МБ)

/usr/bin/ssh -V: OpenSSH_8.2p1 Ubuntu-4ubuntu0.4, OpenSSL 1.1.1f 31 марта 2020 г.

~/openssh-8.2p1/ssh -V: OpenSSH_8.2p1, OpenSSL 1.1.1f 31 марта 2020 г.

Журнал /usr/bin/ssh -vvv user@tailscale_ip -i ~/.ssh/id_rsa(IP-адрес отредактирован)

OpenSSH_8.2p1 Ubuntu-4ubuntu0.4, OpenSSL 1.1.1f  31 Mar 2020
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: include /etc/ssh/ssh_config.d/*.conf matched no files
debug1: /etc/ssh/ssh_config line 21: Applying options for *
debug2: resolve_canonicalize: hostname 100.1.1.1 is address
debug2: ssh_connect_direct
debug1: Connecting to 100.1.1.1 [100.1.1.1] port 22.
< 2 minute hang here >
ssh: connect to host 100.1.1.1 port 22: Connection timed out

решение1

У меня была похожая проблема, потому что мой ssh-клиент не отображал сообщение 2FA Tailscale, при этом политика ACL по умолчанию была ssh/actionустановлена ​​на "check".

Попробуйте проверить настройки ACL для вашего пользователя/тега? Какое значение действия для ssh? Если установлено "check"- попробуйте изменить его на "access"и попробуйте получить доступ к вашему хосту через ssh. Если это сработает - я предложу рассмотреть, как добавить 2FA в клиент ssh, чтобы он отображал ссылку аутентификации Tailscale, которая требуется в "check"режиме.

Некоторые ссылки, которые помогли мне исследовать и устранить похожую проблему:

Связанный контент