Как очистить сокет обратного туннеля SSH после закрытия соединения?

Другой вариант sed с использованием пространства для удержания

sed 'H              #add line to hold space
     /--START--/h   #put START into hold space (substitute holded in)
     /--END--/!d    #clean pattern space (start next line) if not END
     x              #put hold space into pattern space
     /Device=A/!d   #clean pattern space if it have not "Device=A"
    ' file
4
28.02.2018, 14:56
1 ответ

TL;DR;

Решение состоит в том, чтобы установить значение StreamLocalBindUnlink на да в конфигурации sshd на сервере:sudo sh -c 'echo "StreamLocalBindUnlink yes" >> /etc/ssh/sshd_config'.

Долгая история

Это происходит потому, что файлы сокетов unix не удаляются автоматически при закрытии сокета. Их нужно очищать вручную при закрытии, если это желательно, вызывая remove/unlinkс указанием пути к файлу, но openssh этого не делает. Однако, когда я исследовал тему дальше, я пришел к выводу, что «лучшая практика» с сокетами unix заключается в том, чтобы unlinkправильно перед привязкой к нему (. Проверьте этот ответ SO для получения более подробной информации ). ]. И это именно то, что StreamLocalBindUnlink yesговорит sshd делать.

В справочной странице говорится:

 StreamLocalBindUnlink
         Specifies whether to remove an existing Unix-domain socket file for local or remote port forwarding before creating a new
         one.  If the socket file already exists and StreamLocalBindUnlink is not enabled, sshd will be unable to forward the port to
         the Unix-domain socket file.  This option is only used for port forwarding to a Unix-domain socket file.

         The argument must be yes or no.  The default is no.

Недостатком этого подхода является то, что повторная привязка к сокету теперь разрешена, даже если старое соединение все еще существует. Кажется, что при этом старый туннель остается висящим там, так что любые существующие TCP-соединения, проходящие через них, остаются нетронутыми, но все новые соединения идут в новый туннель.Кроме того, старый туннель, по-видимому, навсегда и необратимо отсоединен от адреса сокета файловой системы и больше не сможет принимать новые соединения, даже если новый туннель закрыт.

Ссылки

24
27.01.2020, 20:48

Теги

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