В Windows я создаю задание по расписанию при запуске Windows:
C:\cygwin64\bin\ssh.exe -R 2222:127.0.0.1:3389 user@PublicHost
чтобы открыть мою службу rdp на сервере общедоступного IP, и я могу успешно подключить rdp, но я не могу найти ssh.exe в диспетчере задач, и когда я закрываю окна, иногда порт 2222 PublicHost не освобождается, поэтому позже я загружаюсь снова Windows, ssh.exe выдаст мне предупреждение, переадресация порта не удалась.
Есть ли способ попросить PublicHost освободить порт (у меня нет root-прав на PublicHost)?
Я бы посоветовал посмотреть на 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), чтобы соединение было разорвано?