Ветвление SSH уничтожает соединение

Отображение между IP-адресом и доменным именем не является непосредственным. У Вас может быть любое количество (возможно абсолютно не связанный) доменные имена, указывающие на тот же IP-адрес. (И с другой стороны, данное доменное имя может решить к нескольким различным IP-адресам.)

Это совершенно нормально, и довольно обычно.

3
22.08.2017, 20:35
1 ответ

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

Однако, если в пути между SSH-клиентом и SSH есть какая-либо медицинская королярная коробка. Это означает, что вам нужно сделать дополнительную помощь, если на пути на пути есть NAT или брандмауэр.

Сообщения Keepalive могут предотвратить умирание соединения из-за тайм-аута. Они не будут препятствовать смерти связи из-за других причин, таких как перезапущенные ближневые коробки, но в тех случаях, когда keepalive может обнаружить, что оно произошло, и убедившись, что связь сразу же умирает, а не вытесняется.

На клиенте вы можете использовать -O ServerAliveInterval = 299 или что-то похожее на отправку Keepalives и убедитесь, что команда SSH вскоре завершится в случае завершения соединения. Оборачивая, что в сценарии петли Shell можно убедиться, что он будет продолжать открывать новое соединение SSH каждый раз, когда предыдущее соединение умирает (но, очевидно, потребует скрипта на вилку, а не команду ssh).

Если вы хотите сохранить переадресацию порта, открытым с -L -L , затем ServerAliveInterval и RespaWning SSH-команда будет достаточным. Но с -R есть другая вещь, которая может пойти не так.

Если что-либо уже прослушивает на порте на сервере, то -R -R не удастся настроить переадресацию портов, но команда SSH будет продолжать работать в любом случае. Таким образом, цикл, предназначенный для возрождения команды SSH, не будет хорошо в этом случае.

Исправление для этого - это пропустить -O EXITONFORDARDFAILURE = YES в команду ssh. Очевидно, что если вы просто запустите SSH в цикле с этой комбинацией флагов, он может попытаться много раз в ряд привязать к тому же занятому порту. Таким образом, сон между последовательными попытками будет очень хорошая идея. Каждый раз, когда команда SSH умирает, ваш скрипт должен просто спать несколько секунд, прежде чем снова попробовать.

Я был бы удивлен, если бы не уже не существовали несколько скриптов, которые делают все, что я описал выше.

То, что я упомянул до сих пор, не покрывает все необходимое.

Если соединение пробивает и клиент уведомляют и попытайтесь вернуться команду SSH, сервер еще не заметил, при этом порт все еще может быть занят на стороне сервера. В случае, если кто-то настроил брандмауэр глупым способом, эта проблема неограниченно сохраняется с помощью скрипта на клиенте, которые неоднократно пытаются связывать с портом, который остается заблокированным.

Так как убедительно, что все, чтобы исправить свои конфигурации брандмауэра вряд ли хорошо выключены, вам лучше избегать этой проблемы с настройкой SSHD_CONFIG , настройку ClientaliveInterval . Чтобы сервер отправить почтовые сообщения клиенту, и закрыть соединение, если он не получает ответ.

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

0
27.01.2020, 21:42

Теги

Похожие вопросы