【发布时间】:2017-01-30 15:22:42
【问题描述】:
我正在尝试编写一个 go 应用程序,它允许我使用 go ssh 库在 Windows 机器和 Linux 机器之间执行反向 ssh 隧道。
在这样做的过程中,我在远程机器上创建了一个监听器,如下:
remoteListener, err := sshClient.Listen("tcp", remoteString)
其中 sshClient 是 ssh.Client 类型的对象,并被配置为连接到远程机器。
这里的问题是,当 Linux 机器上的 sshd 进程中断与应用程序的连接时,远程机器上的 ssh Listener 仍然存在。因此,重新连接应用程序会失败,因为侦听器已经在远程机器上的同一端口上运行。
如何解决这个问题? ssh 库是否允许我在侦听器上定义超时?
【问题讨论】:
-
如何关闭与远程机器的会话?如果会话已终止,则 ssh 服务器应该正在清理连接。 ——
-
我正在通过使用以下命令阻止端口 2222(我正在使用 ssh 的端口)上的 ssh 连接来测试 ssh 故障:
sudo iptables -D INPUT -p tcp --dport 2222 -j DROP。这似乎没有清理终止的会话。 -
如果你只是丢包,远程服务器无法知道你已经终止了会话。
标签: networking go ssh