为什么在使用端口转发时注销SSH会话挂起?

我使用dynamicSSH端口转发( -D )和正常的SSH端口转发( -L-R-R很多不同的事情,包括为我的无线networkingstream量添加一层encryption。 我通常使用的命令如下所示:

 ssh -l raam -D 9000 my-linux-server.com 

启动隧道后,我将Web浏览器configuration为使用端口为9000的127.0.0.1的SOCKS v5代理。现在,浏览器中的所有stream量(DNS除外)都通过SSH隧道传输。

当我准备closures隧道(例如,当我将笔记本电脑带到另一个地方时),我只需键入“ logout ”。 但是,SSH会话挂起,我必须按CTRL + C来获取我的本地提示。

为什么会发生这种情况,我该如何预防呢?

(我的猜测是,我通过隧道打开的连接保持打开状态,我的本地SSH客户端正在等待它们closures,然后再给我提示,如果是这种情况,如何强制所有这些连接closures,米准备注销?)

    正如你所期望的那样,这是因为如果有未完成的连接通过隧道,SSH将不会退出。

    如果您退出浏览器(以及所有其他正在通过端口9000隧道的程序),则应该退出SSH。

    ssh手册页说:

      The session terminates when the command or shell on the remote machine exits and all X11 and TCP connections have been closed. 

    而且我没有看到任何改变这种行为的select,所以我怀疑你没有办法。

    你可以背景SSH做:

     <enter>~& 

    如注释中所述,您可以使用-f创build仅隧道连接,但是在使用隧道的所有内容都退出之前,您仍然会遇到连接问题没有终止。 您可以使用〜#选项(转义序列和“磅”)来列出您在注销之前在给定连接上打开的转发连接。