Я использую динамическую переадресацию портов SSH (-D
) и обычная переадресация портов SSH (-L
или -R
) для множества разных вещей, включая добавление уровня шифрования для моего беспроводного веб-трафика. Команда, которую я использую, обычно выглядит примерно так:
ssh -l raam -D 9000 my-linux-server.com
После запуска туннеля я настраиваю свой веб-браузер на использование прокси-сервера SOCKS v5 127.0.0.1 с портом 9000. Теперь весь трафик в моем браузере (кроме DNS) передается через туннель SSH.
Когда я готов закрыть туннель (например, когда я беру ноутбук в другое место), я просто печатаю "logout
". Однако сеанс SSH зависает, и мне нужно нажать CTRL + c чтобы вернуть мою местную подсказку.
Почему это происходит и как это предотвратить?
(Я предполагаю, что соединения, которые я открыл через туннель, остаются открытыми, и мой локальный клиент SSH ожидает их закрытия, прежде чем вернуть мне мою подсказку. Если это так, как я могу заставить все эти соединения закрыться, когда я ' м готовы выйти?)
Как вы и ожидали, это происходит из-за того, что SSH не выйдет, если через туннель проходят незавершенные соединения.
Если вы закроете браузер (и все другие программы, которые проходят через туннель порта 9000), то SSH должен выйти.
На странице руководства ssh говорится:
The session terminates when the command or shell on the remote machine exits and all X11 and TCP connections have been closed.
И я не вижу никаких вариантов изменить это поведение, поэтому подозреваю, что вы ничего не можете сделать.
Вы можете использовать SSH в фоновом режиме:
<enter>~&
Как указано в комментарии, вы можете создать соединение только для туннеля с помощью -f, но у вас все равно будет проблема с тем, что соединение не завершится, пока все, что использует туннель, не завершится. Вы можете использовать опцию ~ # (escape-последовательность и «фунт»), чтобы перечислить перенаправленные соединения, которые вы открыли в данном соединении перед выходом из системы.