在 Windows 中,我在 Windows 启动时创建计划任务:
C:\cygwin64\bin\ssh.exe -R 2222:127.0.0.1:3389 user@PublicHost
在公共 IP 服务器上公开我的 rdp 服务,我可以成功连接 rdp,但是在任务管理器中找不到 ssh.exe,并且当我关闭 Windows 时,有时 PublicHost 的 2222 端口未释放,所以稍后我再次启动 Windows,ssh.exe 会给我一个警告,端口转发失败。
有没有办法要求 PublicHost 释放端口(我在 PublicHost 上没有 root 访问权限)?
答案1
我建议查看ClientAliveCountMax
sshd_configClientAliveInterval
选项 - 这将帮助 sshd 检测以不受控制的方式断开的连接并在这种情况下清理它。
答案2
您可以在前台运行 ssh 吗,以便获得 shell 提示符并可以直接退出 ssh 会话?
因为如果 Windows 正在关闭并终止 ssh.exe,它应该关闭该端口。如果服务器没有释放它,发送您自己的终止信号可能会产生相同的效果(如果您能在任务管理器中找到它)。
或者也许您可以登录(手动或脚本)到 PublicHost 并终止该端的内容(例如您的 UID 的 /bin/bash)以便断开连接?
答案3
如果您只是连接到 PublicHost 的 2222 端口,它应该会尝试通过隧道发送流量。这将超时(几分钟后)或收到重置响应(立即),这将导致连接关闭并且 sshd 进程退出。
您可以使用任意数量的工具来执行此操作,但这里有一种从 Windows 自动执行此操作的方法:
C:\cygwin64\bin\ssh.exe user@PublicHost "echo x | nc 127.0.0.1 2222"