Я запускаю этот ssh туннелирующий скрипт на моем удаленном сервере (CentOS) в терминале для получения до моего домашнего компьютера (Ubuntu):
while true
do
ssh -R 49666:localhost:22 (my name@ my home ip) -N
sleep 15
done
У меня есть он цикл (сон 15 частей), потому что туннели выходят из строя иногда и когда это делает, кто-то должен физически быть там для запуска его снова. Цикл является обходным решением, хотя, возможно, не хорошее...
Затем из дома, я могу ssh к серверу ssh'ing к localhost на порте 49666.
Все время от времени, тем не менее, я случайным образом просто разъединяюсь в течение ТОЧНО двух часов и 15 секунд. Я вижу это в своем auth.log:
Accepted publickey from (work ip)
error: bind: Address already in use
error: channel_setup_fwd_listener_tcpip: cannot listen to port: 49666
Я первоначально думал, что не должен выполнять SSH-R в цикле, потому что это будет, очевидно, продолжать пытаться связать с тем же портом. Но вещь, вышеупомянутый отказ происходит, возможно, каждые 14 часов, не каждые 15 секунд, когда цикл подразумевал бы. Я подозреваю, что при попытке к SSH-R соединения, которое уже существует, это просто ничего не делает?
Моя следующая мысль была то, что, возможно, некоторый другой сервис открывается на порте 49666 иногда и портит туннель, и затем когда сценарий пытается связать с ним 15 секунд спустя, он не может, потому что другой сервис использует его. Но я не могу выяснить, каков другой сервис, если он существует, мог бы быть. Я использую netstat, lsof, и т.д. но я никогда не вижу, что что-либо работает на том порте. Я не уверен, существует ли способ видеть историю порта, или если можно только видеть вещи использовать его, в то время как они активны. Но я подозреваю, что ничто не пытается использовать его, но это возможно...
После того, как я получу "уже используемый" отказ, я не могу ssh. Но затем, каждый раз, ТОЧНО два часа и 15 секунд спустя, я получаю это:
Accepted publickey from (same work ip)
но без последующих отказов, и я могу ssh как нормальный снова. Количество времени до следующего отказа кажется случайным, но от отказа до следующего восстановления туннеля, это - ТОЧНО два часа и 15 секунд. Я предполагаю, что существуют некоторые 2 часа cooldown вещь брандмауэра, и затем в сценарии говорится для ожидания 15 секунд, так, чтобы составил в целом время. Шаблон здесь заставляет меня думать, что существует некоторый способ сконфигурировать это. Проблема, я понятия не имею, почему "адрес уже используемая" вещь происходит для начала, и я не знаю, на какой стороне (клиент-серверный или удаленный сервер) двухчасовой cooldown происходит. У меня есть в значительной степени все настройки по умолчанию на моем домашнем компьютере. У меня нет sudo на работе (но я могу заставить sudo проверять что-то на меня иногда), таким образом, я не знаю то, на что похож их sshd_config, но я предполагаю, что нет ничего странного.
Может кто-то помогать мне определить: 1: Почему "адрес уже используемый" отказ происходит и что делать с этим? и 2: Почему точное двухчасовое и 15 вторых разрывов и что делать с этим?
Используйте autossh
. Это будет периодически проверять туннель и после того как это повреждается, это снова соединяется автоматически:
autossh -M 2000 -R 49666:localhost:22 (my name@ my home ip) -N