我有一个位于专用网络内的虚拟机。
首先,我应该进入server.com
,然后进入my-machine
。
我想将笔记本电脑ssh-tunnel
改为my-machine
。
ssh -v -A -nNT -L 40000:127.0.0.1:40000 login@server.com ssh -v -nNT -L 40000:127.0.0.1:40000 my-machine &
现在我想用ssh-tunnel
测试netcat
。
我在my-machine
:
nc -l 40000
在我的笔记本电脑上:
~ ❯❯❯ nc 127.0.0.1 40000
但它给了我:
debug1: Connection to port 40000 forwarding to 127.0.0.1 port 40000 requested.
debug1: channel 2: new [direct-tcpip]
channel 2: open failed: connect failed: Connection refused
debug1: channel 2: free: direct-tcpip: listening port 40000 for 127.0.0.1 port 40000, connect from 127.0.0.1 port 49692 to 127.0.0.1 port 40000, nchannels 3
为什么会发生这种情况以及如何解决?我希望我在笔记本电脑控制台中输入的任何内容都会显示在my-machine
控制台中。
最后一个字符串是什么意思?特别是127.0.0.1 port 49692
为什么使用这个端口?我从不打字。
debug1: channel 2: free: direct-tcpip: listening port 40000 for 127.0.0.1 port 40000, connect from 127.0.0.1 port 49692 to 127.0.0.1 port 40000, nchannels 3
答案 0 :(得分:2)
每个TCP连接都是点到点需要两对IP地址和端口。阅读所有信息(不仅仅是你展示的部分):
connect from 127.0.0.1 port 49692
确实,您正在连接到端口40000,但是您正在连接来自端口49692(随机分配给您的netcat
或某些转发步骤。)
如何解决这个问题?
这种双跳转发不起作用,因为你需要在第一个之前建立的第二个。
此外,您正在使用-N
开关来执行第一个命令,这会阻止运行第二个ssh
命令。
但我会尝试使用ProxyCommand,它会让您直接从主机通过单个命令连接到目的地:
ssh -v -nNT -L 40000:127.0.0.1:40000 \
-oProxyCommand="ssh -W %h:%p login@server.com" my-machine &