2017-01-03 136 views
1

我正在尝试编写一个go应​​用程序,该应用程序允许我使用go ssh库在Windows计算机和Linux计算机之间执行反向ssh隧道。SSH侦听器不关闭

在这样做的过程中,我创建远程机器上的监听器,如下: remoteListener, err := sshClient.Listen("tcp", remoteString)

其中sshClient是类型ssh.Client的目的,并且被配置以连接到远程计算机。

这里的问题是,当Linux机器上的sshd进程中断与应用程序的连接时,ssh Listener在远程机器上保持活动状态。因此,重新连接应用程序会失败,因为侦听器已经在远程计算机的同一端口上运行。

我该如何解决这个问题? ssh库是否允许我定义侦听器的超时?

+0

你如何关闭远程机器的会话?如果会话已终止,则ssh服务器应清理连接。 - – JimB

+0

我通过使用以下命令阻止端口2222上的ssh连接(我正在sshing的端口)来测试ssh失败: 'sudo iptables -D INPUT -p tcp --dport 2222 -j DROP' 。这似乎并没有清理已终止的会话。 – shreyashk

+0

如果您只丢弃数据包,则远程服务器无法知道您已终止会话。 – JimB

回答

0

我只是在重新连接后等待超时。我发现没有其他简单的解决方案。