Как получить постоянный обратный туннель SSH, используя autossh?
6369
Cedric Martin
(только что спросил это на SO, но посоветовали взять его здесь)
Мне удалось создать обратный SSH-туннель между Raspberry Pi 2 и моим сервером (сервер со статическим IP), и он отлично работает. Учетная запись пользователя, которую я использую на сервере, называется «ksproxy» (на самом деле это не «прокси», а что угодно).
Сейчас я пытаюсь заставить autossh(из пакета Debian / Raspbian autossh) работать, но у меня ничего не получается. Я могу быть рядом.
(Я изменил реальный IP здесь в этом вопросе, 37.xxx.yyy.zzzчтобы не публиковать фактический IP сервера)
Это «работает», но просто застревает там, ничего не делая.
Я попытался «-vvv» выводить команды ssh, но это просто показывает, что ничего не происходит.
Если я попробую другой порт, он потерпит неудачу:
ksproxy@37.xxx.yyy.zzz:~$ ssh rspi@localhost -p 1234 ssh: connect to host localhost port 1234: Connection refused
Если я пробую правильный порт (20000), но на этот раз с -tпараметром, то же самое: он «работает», но я не получаю никакого терминала / приглашения.
Вот -vvvвыход
ksproxy@37.xxx.yyy.zzz:~$ ssh -vvv rspi@localhost -t -p 20000 OpenSSH_6.7p1 Debian-5+deb8u1, OpenSSL 1.0.1k 8 Jan 2015 debug1: Reading configuration data /etc/ssh/ssh_config debug1: /etc/ssh/ssh_config line 19: Applying options for * debug2: ssh_connect: needpriv 0 debug1: Connecting to localhost [127.0.0.1] port 20000. debug1: Connection established. debug1: key_load_public: No such file or directory debug1: identity file /home/ksproxy/.ssh/id_rsa type -1 debug1: key_load_public: No such file or directory debug1: identity file /home/ksproxy/.ssh/id_rsa-cert type -1 debug1: key_load_public: No such file or directory ... debug1: Enabling compatibility mode for protocol 2.0 debug1: Local version string SSH-2.0-OpenSSH_6.7p1 Debian-5+deb8u1
Он не запрашивает пароль, он не показывает какой-либо терминал / приглашение.
Что я не понимаю здесь или делаю неправильно?
Обратите внимание, что я не думаю, что это проблема брандмауэра, так как метод «non autossh» работает нормально (но тогда я не получаю функцию «всегда активен / переподключаться»). Мне бы очень хотелось, чтобы autossh работал (я знаю, что мог бы найти обходной путь, например, какой-нибудь crontab, автоматически перезапускающий мой ручной SSH-туннель, но это, вероятно, было бы более хрупким, чем заставить autossh работать).
В этом случае вы не используете -Rопцию ssh для настройки обратного туннеля; -Mвместо этого вы указываете параметр autossh . Параметр autossh -M заставляет autossh настроить туннель на этом порту, который autossh использует для своих собственных целей (для регулярной проверки того, что канал SSH все еще работает). Это не эквивалент параметра ssh -R. При подключении к порту 20000 в этом сценарии вы подключаетесь к частному порту тестирования подключения autossh.
Вы должны продолжить указывать обратный туннель, который вы хотите, используя опцию -R ssh. Если вы хотите использовать функцию эхо-порта autossh, вы должны запустить ее на другом порту:
Большое спасибо, это сработало, как только я использовал * "- R" *, чтобы указать обратный туннель. Я не очень знаком с SSH, но заставил его работать так, как мне было нужно, благодаря вашему ответу: теперь я все это записываю (и здесь ответ на SO в безопасности).
Cedric Martin 8 лет назад
0