В Windows я создаю запланированную задачу при запуске Windows:
C:\cygwin64\bin\ssh.exe -R 2222:127.0.0.1:3389 user@PublicHost
для предоставления моей службы rdp на сервере с общедоступным IP, и я могу успешно подключить rdp, но я не могу найти ssh.exe в диспетчере задач, и когда я закрываю окна, иногда порт 2222 PublicHost не освобождается, поэтому позже я снова загружаю окна, ssh.exe выдаст мне предупреждение , переадресация порта не удалась.
Есть ли способ попросить PublicHost освободить порт (у меня нет доступа root на PublicHost)?
Можете ли вы запустить ssh на переднем плане, чтобы получить приглашение оболочки и просто выйти из сеанса ssh?
Потому что, если Windows завершает работу и завершает работу ssh.exe, он должен закрыть этот порт. И если сервер не запускает его, отправка вашего собственного сигнала уничтожения, скорее всего, будет иметь такой же эффект (если вы сможете найти его в диспетчере задач).
Или, возможно, вы можете войти (вручную или с помощью сценария) в PublicHost и убить что-то на этой стороне (например, / bin / bash вашего UID), чтобы соединение было разорвано?
Если вы просто подключаетесь к порту 2222 PublicHost, он должен попытаться отправить трафик через туннель. Это приведет к тайм-ауту (через несколько минут) или получению ответа сброса (немедленно), что приведет к закрытию соединения и завершению процесса sshd.
Вы можете сделать это с помощью любого количества инструментов, но вот один из способов сделать это автоматически из Windows:
C:\cygwin64\bin\ssh.exe user@PublicHost "echo x | nc 127.0.0.1 2222"
Я бы посоветовал посмотреть параметры ClientAliveCountMax
и ClientAliveInterval
sshd_config - это поможет sshd обнаружить неконтролируемое соединение и очистить его в этом случае.