Как закрыть существующий туннель SSH?

В Windows я создаю запланированное задание при запуске Windows:

C:\cygwin64\bin\ssh.exe -R 2222:127.0.0.1:3389 user@PublicHost

выставить свою службу rdp на сервере public-ip, и я могу успешно подключиться к rdp, но я не могу найти ssh.exe в диспетчере задач, и когда я закрываю окна, иногда порт 2222 PublicHost не освобождается, поэтому позже я загружаюсь Windows снова, ssh.exe выдаст мне предупреждение, переадресация портов не удалась.

Есть ли способ попросить PublicHost освободить порт (у меня нет root-доступа на PublicHost)?

2 ответа

Я бы предложил посмотреть на ClientAliveCountMax а также ClientAliveInterval Параметры sshd_config - это поможет sshd обнаружить неконтролируемое соединение и очистить его в таком случае.

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

Вы делаете это, используя любое количество инструментов, но вот один из способов сделать это автоматически из Windows:

C:\cygwin64\bin\ssh.exe user@PublicHost "echo x | nc 127.0.0.1 2222"

Можете ли вы запустить ssh на переднем плане, чтобы получить приглашение оболочки и просто выйти из сеанса ssh?

Потому что, если Windows закрывается и завершает работу ssh.exe, он должен закрыть этот порт. И если он не будет выпущен сервером, отправка собственного сигнала уничтожения, скорее всего, будет иметь тот же эффект (если вы сможете найти его в диспетчере задач).

Или, может быть, вы можете войти (вручную или с помощью скрипта) в PublicHost и убить что-то на этой стороне (например, /bin/bash вашего UID), чтобы соединение было разорвано?

Другие вопросы по тегам