Запуск ssh-туннеля в цикле; плохая идея? Порт уже используется?

Запуск ssh-туннеля в цикле; плохая идея? Порт уже используется?

Я настроил SSH-туннель с сервера, который физически расположен там, где я работаю (он работает под управлением CentOS), на домашний компьютер (Ubuntu), чтобы я мог войти в свой рабочий туннель из дома, используя следующую команду на рабочем компьютере:

ssh -R 49666:localhost:22 homename@homeIP -N

Я сделал ключи и т. д. Я заходил с работы домой по ssh, а затем, находясь удаленно на своем домашнем компьютере, заходил на работу по ssh, чтобы проверить. Казалось, все в порядке, все работало. Я мог scp-файлы в обоих направлениях и т. д.

Когда я позже пришел домой, я обнаружил, что туннель закрылся по какой-то причине. Я не мог понять, почему. Позже я спросил об этом коллегу, и он сказал, что у него та же проблема, и он использует скрипт вроде этого, который постоянно работает на его рабочем компьютере:

while true
 ssh -R 49666:localhost:22 homename@homeIP -N
 sleep 15

По сути, он сделал так, чтобы этот механизм работал вечно, чтобы автоматически перезапустить сломанный туннель, если он сломается.

Я тоже попробовал это, провел тестирование (sshed с работы домой, находясь на работе удаленно, используя свой домашний компьютер), и все снова казалось в порядке. Но снова, когда я пришел домой, туннель не работал. Я просмотрел auth.log и нашел эти три строки с одной и той же временной меткой, которая была примерно на полпути домой:

Accepted publickey from work IP (I erased the rest for my privacy)
error: bind: Address already in use
error: channel_setup_fwd_listener_tcpip: cannot listen to port: 49666

Кажется, он пытался привязать мой туннель к порту 49666, пока его использовало что-то другое. Ладно, я понимаю, почему это не удалось. Поэтому я попытался найти то, что использует порт 49666, чтобы я мог это убить. Но ничего не работает. Я пробовал netstat, lsof и т. д. Ничто не использует порт 49666. Я не думаю, что что-либо КОГДА-ЛИБО использует порт 49666, кроме туннеля. Может ли быть так, что он создал туннель, когда туннель уже существовал? Или если туннель уже существовал, то скрипт туннелирования просто ничего не делал бы?

Поскольку порт 49666 никто не использует, я бы ожидал, что туннель будет восстановлен автоматически, когда скрипт туннеля на моем рабочем компьютере снова пройдет через цикл, но, похоже, этого не происходит.

Есть ли способ решить эту проблему, не возвращаясь физически на сервер на работе? Или, по крайней мере, решить ее всего одним изменением, чтобы мне не приходилось возвращаться туда регулярно?

Сервер никогда не отключается, так что в теории циклический скрипт должен продолжать работать. Но, может быть, он завершит работу после того, как не сможет создать туннель?

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