![Tailscale: SSH работает с Openssh, скомпилированным вручную, но не с Openssh, установленным в системе](https://rvso.com/image/776327/Tailscale%3A%20SSH%20%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D0%B5%D1%82%20%D1%81%20Openssh%2C%20%D1%81%D0%BA%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%BC%20%D0%B2%D1%80%D1%83%D1%87%D0%BD%D1%83%D1%8E%2C%20%D0%BD%D0%BE%20%D0%BD%D0%B5%20%D1%81%20Openssh%2C%20%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%BD%D1%8B%D0%BC%20%D0%B2%20%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B5.png)
(Этот вопрос должен быть помечен тегом «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"
режиме.
Некоторые ссылки, которые помогли мне исследовать и устранить похожую проблему: