美好的一天,我正在尝试与我大学的远程服务器创建一个反向 ssh 隧道。我在笔记本电脑上运行以下命令:
< home >$ ssh -R 9999:localhost:9190 my_user@school_server.edu
然后我打开另一个终端并运行
< home >$ nc -l 9190
在我创建隧道的终端上,登录后,我运行
< university >$ nc localhost 9999
当我在其他计算机上尝试此操作时,远程服务器和本地计算机之间的连接没有问题,但在我的笔记本电脑上,我得到
< university >$ connect_to localhost port 9190: failed.
当我从远程服务器运行 nc 命令时。
我的笔记本电脑上同时安装了 MacOS 和 Manjaro,但两者都会出现问题,因此这不是防火墙或操作系统网络配置问题。我尝试使用不同的网络,问题仍然存在。我刚刚尝试用我姐姐的笔记本电脑做同样的事情,它可以工作,我的同学也可以毫无问题地做到这一点,所以远程服务器不应该是问题。
知道什么可能导致这样的问题吗?谢谢。
编辑:我忘了提及,非反向隧道工作得很好。
更多信息:尝试连接时使用 -v 标志运行输出以下内容:
debug1: client_input_channel_open: ctype forwarded-tcpip rchan 3 win 2097152 max 32768
debug1: client_request_forwarded_tcpip: listen localhost port 9999, originator 127.0.0.1 port 34590
debug1: connect_next: host 127.0.0.1 ([127.0.0.1]:9190) in progress, fd=9
debug1: channel 1: new [127.0.0.1]
debug1: confirm forwarded-tcpip
debug1: channel 1: connection failed: Connection refused
connect_to 127.0.0.1 port 9190: failed.
debug1: channel 1: free: 127.0.0.1, nchannels 2
答案1
这是一个操作顺序问题。 SSH 客户端在建立 SSH 连接后,nc
甚至在大学系统的远程启动之前,尝试抢先建立与家庭计算机端口 9190 的连接。如果此时本地端口 9190 没有监听,则远程转发设置将失败。
所以,你必须运行你的本地nc -l 9190
前启动 SSH 连接,而不是后它。
OpenSSH 版本之间在远程转发的确切行为方面可能存在差异:较新的版本可能会延迟打开隧道的本地扩展,直到有东西连接到远程端。
答案2
localhost
是从 的角度来看school_server.edu
。所以它正在尝试连接到遥控器上的 9190。
我想你希望它连接到你的本地。因此(这一点我不是 100% 确定)你应该删除主机名。ssh -R 9999:9190 my_user@school_server.edu