Я использую выскочку, чтобы поддерживать обратный туннель ssh, используя автоматический ssh, аналогичный Использование Upstart для управления обратным туннелем AutoSSH.
Это работает нормально, за исключением того, что после ручного отключения питания я больше не могу подключаться к машине через «центральный сервер» через туннель. Я получаю «ssh_exchange_identification: соединение закрыто удаленным хостом». Процесс autossh является работает на клиенте. Я могу подключиться снова после перезапуска сети.
Я пытаюсь понять, почему это постоянно дает сбой после выключения вручную. Возможно ли, что мне нужно выполнить некоторую очистку при запуске, которая позволила бы туннелю работать в этой ситуации, или есть другие шаги по отладке / устранению неполадок, которые я могу предпринять, чтобы определить проблему?
Машина A - это клиентская машина, использующая autossh. Этот компьютер находится за брандмауэром и использует следующую команду в upstart для создания туннеля ssh:
/usr/bin/autossh -fN -i /keyfile -o StrictHostKeyChecking=no -R 20098:localhost:22 user@centralserver
Машину B мы назовем «центральным сервером», который находится в облаке и является хостом. Эта машина является "центральным сервером" в приведенной выше команде.
Когда машина A жестко выключена и снова включена, я не могу подключиться к ней по SSH с моей машины (C) на машину B в облаке, а затем использовать следующую команду, чтобы добраться до машины A:
ssh -p 2098 user@localhost
Опять же, после перезагрузки клиента (A) это работает нормально. Проблема возникает только после резкого отключения питания. Есть процессы autossh, которые выполняются на клиентском компьютере (A) после выключения и резервного копирования, но они, похоже, просто не выполняют свою работу.
Правда, когда клиенты с запущенным autossh не завершали корректное завершение работы, экземпляры ssh все еще существуют на сервере. Чтобы решить эту проблему, попробуйте убить эти экземпляры. я использовал killall -u
и это работает. После этого autossh успешно повторно подключается к серверу, и я могу подключиться к клиенту через ssh. На клиенте, где работает autossh, я также установил параметр AUTOSSH_GATETIME=0
.
Проблема заключалась в том, что система некорректно завершала работу. Я установил острый который добавляет скрипт powerbtn.sh в / etc / acpi, который вызывает завершение работы при нажатии кнопки питания.
Я нашел этот урок полезным и понятным:
http://jiang925.com/content/tunnel-through-firewall-using-reverse-ssh-and-vpn-dd-wrt
они добавили команду autossh в /etc/rc.local, чтобы она выполнялась при запуске.