【发布时间】:2020-06-22 02:18:45
【问题描述】:
这个问题可能已经回答了,并且有很多文章展示了如何进行反向 ssh 隧道。然而,我被困在最后一步。
我有一个在 8080 端口上运行 Web 服务的 Linux 机器。它位于 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 到 home box 的普通隧道。可以试试
ssh -N -L 8080:localhost:8080 ubuntu@ec2 -p 45332 -v -
当我在家里的 Linux 机器上运行此命令时,在端口 8080 上运行服务,我收到端口 8080 已在使用中的错误。
bind [127.0.0.1]:8080: Address already in use我想通过我的 ec2 实例使我的家庭 Linux 机器可用,同时启动从家庭 Linux 机器到 ec2 的 ssh 连接。在这种情况下,我认为简单的 ssh 隧道没有帮助。
标签: linux amazon-web-services amazon-ec2 ssh ssh-tunnel