反向SSH隧道未在EC2上暴露端口

3
这个问题可能已经有答案了,有很多文章展示如何做反向SSH隧道。但是我卡在了最后一步。
我有一个Linux盒子,在8080端口上运行Web服务。这个盒子在NAT后面,我无法从覆盖路由器进行端口转发。
我在AWS上有一个新的Ubuntu 18 EC2实例,并使用以下命令从我的Linux盒子反向隧道:
ssh -i "key.pem" -R *:8080:*:8080 ubuntu@ec2 -p 45332
EC2 SSH服务器监听端口45332
在服务器上:
$ sudo lsof -i -P -n | grep LISTEN
systemd-r   650 systemd-resolve   13u  IPv4  15830      0t0  TCP 127.0.0.53:53 (LISTEN)
sshd        893            root    3u  IPv4  18322      0t0  TCP *:45332 (LISTEN)
sshd        893            root    4u  IPv6  18333      0t0  TCP *:45332 (LISTEN)
sshd      20731          ubuntu    9u  IPv6  75581      0t0  TCP [::1]:8080 (LISTEN)
sshd      20731          ubuntu   10u  IPv4  75582      0t0  TCP 127.0.0.1:8080 (LISTEN)

如果我在Ec2上执行curl localhost:8080,则会得到正确的Web服务响应。
但是,当我使用相同Ec2或完全不同的设备的公共IP /公共DNS名称进行curl时,我会收到以下错误信息:
curl:(7)无法连接到<IP>端口8080:连接被拒绝
我已经检查了我的VPC ACL并允许安全组中的所有入站和出站流量。
我确保防火墙规则不会阻止它:
$ sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
45332/tcp                  ALLOW IN    Anywhere                  
45332/udp                  ALLOW IN    Anywhere                  
8080/tcp                   ALLOW IN    Anywhere                  
8080/udp                   ALLOW IN    Anywhere                  
45332/tcp (v6)             ALLOW IN    Anywhere (v6)             
45332/udp (v6)             ALLOW IN    Anywhere (v6)             
8080/tcp (v6)              ALLOW IN    Anywhere (v6)             
8080/udp (v6)              ALLOW IN    Anywhere (v6)

当这种方式不起作用时,我移除了ssh隧道,并直接在EC2上运行了相同的Web服务。 这种方式非常完美。
但是,我想从我的Linux桌面运行该服务。

我认为在这种情况下,你需要从ssh到家庭主机的普通隧道。可以尝试使用ssh -N -L 8080:localhost:8080 ubuntu@ec2 -p 45332 -v - Marcin
当我在我家的Linux盒子上运行这个命令时,该服务在8080端口上运行,我收到了端口8080已被使用的错误。bind [127.0.0.1]:8080: Address already in use我想在从家里的Linux盒子到ec2实例的ssh连接中使我的家用Linux盒子可用。 我认为简单的ssh隧道在这种情况下无法帮助。 - zxcV32
2个回答

3

1

我曾经遇到过同样的问题,这个方法对我有用。

从你的本地Linux电脑:

ssh -i "key.pem" -R 8081:\*:8080 ubuntu@ec2 -p 45332

注意我使用的是8081而不是8080。

然后在EC2实例中,通过ssh连接到自身,并将8081隧道传输到8080。

ssh locahlost -L 8080:localhost:8081

我并不真正理解为什么,但在尝试了不同的组合之后,这个方法对我有效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接