SSH远程端口转发空响应
SSH Remote Port Forwarding Empty Response
我正在尝试在我的 windows 电脑上使用 ssh 从本地网络中的 Raspberry pi 进行远程端口转发
ssh -R 5941:localhost:8000 pi@192.168.1.191
所以根据上面的命令,我试图将连接从 Raspberry pi 服务器 (192.168.1.191) 上的端口 5941 转发到我的电脑 (localhost) 上的端口 8000,它在端口 8000 上托管了一个 Web 服务器
上面的 ssh 命令执行时没有错误,但是当我尝试在 Raspberry Pi (192.168.1.191) 上访问 http://localhost:5941/ 时,我得到
ERR_EMPTY_RESPONSE
我试过了
- 关闭了我 Windows PC 上的防火墙
- raspberrypi 上的 netstat 给了我
$ sudo netstat -a | grep 5941
tcp 0 0 0.0.0.0:5941 0.0.0.0:* LISTEN
tcp6 0 0 [::]:5941 [::]:* LISTEN
- 当我 运行 详细模式下的 ssh 命令
ssh -R 5941:localhost:8000 pi@192.168.1.191 -v
我明白了
debug1: Remote connections from LOCALHOST:5941 forwarded to local address localhost:8000
debug1: channel 0: new [client-session]
debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.
debug1: pledge: network
debug1: console supports the ansi parsing
debug1: client_input_global_request: rtype hostkeys-00@openssh.com want_reply 0
debug1: Remote: Forwarding listen address "localhost" overridden by server GatewayPorts
debug1: remote forward success for: listen 5941, connect localhost:8000
debug1: All remote forwarding requests processed
当我尝试在 Raspberry Pi (192.168.1.191) 上访问 http://localhost:5941/ 时,我在 ssh 控制台上得到了这个
debug1: client_input_channel_open: ctype forwarded-tcpip rchan 3 win 2097152 max 32768
debug1: client_request_forwarded_tcpip: listen localhost port 5941, originator ::1 port 58122
debug1: getsockopt TCP_NODELAY: Invalid argument
debug1: connect_next: host localhost ([::1]:8000) in progress, fd=7
debug1: channel 1: new [::1]
debug1: confirm forwarded-tcpip
debug1: channel 1: connected to localhost port 8000
debug1: channel 1: free: ::1, nchannels 2
我应该如何进一步诊断我的问题?
解决办法是把127.0.0.1
代替localhost
ssh -R 5941:127.0.0.1:8000 pi@192.168.1.191
这会强制使用 ipv4 而不是 ipv6,由于某些原因,windows 中的 ssh 端口转发无法在 ipv6 上工作,我能够在 linux 上使用 localhost
执行相同的命令就好了。
我从这个 post here
中找到了解决方案
我正在尝试在我的 windows 电脑上使用 ssh 从本地网络中的 Raspberry pi 进行远程端口转发
ssh -R 5941:localhost:8000 pi@192.168.1.191
所以根据上面的命令,我试图将连接从 Raspberry pi 服务器 (192.168.1.191) 上的端口 5941 转发到我的电脑 (localhost) 上的端口 8000,它在端口 8000 上托管了一个 Web 服务器
上面的 ssh 命令执行时没有错误,但是当我尝试在 Raspberry Pi (192.168.1.191) 上访问 http://localhost:5941/ 时,我得到
ERR_EMPTY_RESPONSE
我试过了
- 关闭了我 Windows PC 上的防火墙
- raspberrypi 上的 netstat 给了我
$ sudo netstat -a | grep 5941
tcp 0 0 0.0.0.0:5941 0.0.0.0:* LISTEN
tcp6 0 0 [::]:5941 [::]:* LISTEN
- 当我 运行 详细模式下的 ssh 命令
ssh -R 5941:localhost:8000 pi@192.168.1.191 -v
我明白了
debug1: Remote connections from LOCALHOST:5941 forwarded to local address localhost:8000
debug1: channel 0: new [client-session]
debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.
debug1: pledge: network
debug1: console supports the ansi parsing
debug1: client_input_global_request: rtype hostkeys-00@openssh.com want_reply 0
debug1: Remote: Forwarding listen address "localhost" overridden by server GatewayPorts
debug1: remote forward success for: listen 5941, connect localhost:8000
debug1: All remote forwarding requests processed
当我尝试在 Raspberry Pi (192.168.1.191) 上访问 http://localhost:5941/ 时,我在 ssh 控制台上得到了这个
debug1: client_input_channel_open: ctype forwarded-tcpip rchan 3 win 2097152 max 32768
debug1: client_request_forwarded_tcpip: listen localhost port 5941, originator ::1 port 58122
debug1: getsockopt TCP_NODELAY: Invalid argument
debug1: connect_next: host localhost ([::1]:8000) in progress, fd=7
debug1: channel 1: new [::1]
debug1: confirm forwarded-tcpip
debug1: channel 1: connected to localhost port 8000
debug1: channel 1: free: ::1, nchannels 2
我应该如何进一步诊断我的问题?
解决办法是把127.0.0.1
代替localhost
ssh -R 5941:127.0.0.1:8000 pi@192.168.1.191
这会强制使用 ipv4 而不是 ipv6,由于某些原因,windows 中的 ssh 端口转发无法在 ipv6 上工作,我能够在 linux 上使用 localhost
执行相同的命令就好了。
我从这个 post here
中找到了解决方案