Ssh HTTP反向隧道 问题:

Ssh HTTP反向隧道 问题:,ssh,tunnel,tunneling,Ssh,Tunnel,Tunneling,是否可以使用socks隧道(或端口80或443上的任何其他形式的隧道)来控制从远程计算机创建隧道的本地计算机?基本上,当ssh不是一个选项并且只有端口80和443上的TCP连接是可能的时,一个ssh-R[…] 具体情景 由于我们其中一位客户的安全政策非常严格,我们目前必须连接到Windows跳转主机,而无法在那里复制和粘贴内容。从那里,我们通过web浏览器下载所需的文件并通过ssh复制到目标机器,或者直接使用ssh在目标机器上进行维护工作。然而,这个工作流程非常耗时,而且老实说相当烦人 不幸的是

是否可以使用socks隧道(或端口80或443上的任何其他形式的隧道)来控制从远程计算机创建隧道的本地计算机?基本上,当
ssh
不是一个选项并且只有端口
80
443
上的TCP连接是可能的时,一个
ssh-R[…]

具体情景 由于我们其中一位客户的安全政策非常严格,我们目前必须连接到Windows跳转主机,而无法在那里复制和粘贴内容。从那里,我们通过web浏览器下载所需的文件并通过ssh复制到目标机器,或者直接使用
ssh
在目标机器上进行维护工作。然而,这个工作流程非常耗时,而且老实说相当烦人

不幸的是,防火墙似乎能够区分真正的HTTP流量和ssh,因为打开服务器上的
sshd
以接受
443
上的连接不起作用

Firewall
(HTTP only)
┌──────────────┐
│              │
│  ┌─────────┐ │ ???    ┌──────────┐
│  │Jumphost ├─┼───────►│Our Server│
│  │(Windows)│ │        └───▲──────┘
│  └──┬──────┘ │            │
│     │ssh     │            │ssh
│     │        │            │
│   ┌─▼─────┐  │        ┌───┴─────┐
│   │Target │  │        │Developer│
│   │(Linux)│  │        │Machine  │
│   └───────┘  │        └─────────┘
│              │
└──────────────┘

任何提示都值得高度赞赏问题似乎是具有深度数据包检查的防火墙

您可以通过使用ssh over ssl、使用
stunnel
openssl

来克服这个问题 从windows框中,您可以使用stunnel客户端通过隧道连接到
我们的服务器
stunnel服务器。
它将所有(ssh)数据封装到ssl中,因此与HTTPS连接没有区别

另一个选项可以是ptunnel ng,它支持通过ICMP(ping)的tcp连接

大多数防火墙会忽略ICMP,如果您可以ping您的
我们的服务器
,这也应该可以工作。
但ptunnel ng有时似乎有点不稳定

如果无法在windows jumbBox上安装/执行程序,则可以打开端口,通过ssh重定向它们,并由目标linux直接使用它们

在windows jumpbox上:

ssh target -R target:7070:our-server:443
在目标(linux)上,您可以使用
localhost:7070
连接到
我们的服务器:443

我建议客户机和服务器部件使用docker。
我只能在容器中使用ptunnel服务器,可能是因为所需的特权

使用ptunnel 在服务器上 ptunnel二进制文件是在docker内部构建的,但由主机直接使用
此示例需要一个ubuntu服务器

Dockerfile.server

FROM ubuntu:latest
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y build-essential autoconf automake git
RUN mkdir -p /workdir
WORKDIR /workdir
RUN git clone https://github.com/lnslbrty/ptunnel-ng.git && cd ptunnel-ng && ./autogen.sh
start-server.sh

#!/bin/sh
# Starts the icmp tunnel server, this doesn't work inside a docker container
# Or perhaps it works, but I dont't know how
script_dir=$(cd "$(dirname "$0")"; pwd)
if [ ! -f $script_dir/ptunnel-ng ]; then
  # Build the ptunnel binary and copy it to the host
  docker build -t ptunnel-ng-build-server -f $script_dir/Dockerfile.server $script_dir
  docker run --rm -v $script_dir:/shared ptunnel-ng-build-server cp /workdir/ptunnel-ng/src/ptunnel-ng /shared
fi

magic=${1-123456}
sudo $script_dir/ptunnel-ng --magic $magic
论客户 start-client.sh

#!/bin/sh

image=ptunnel-ng
if ! docker inspect $image > /dev/null 2> /dev/null; then
  docker build -t $image .
fi

magic=${1-123456}
ptunnel_host=${2-myserver.de}
port=${3-2001}

docker run --rm --detach -ti --name 'ptunnel1' -v $PWD:/shared -p 2222:2222 $image //workdir/ptunnel-ng --magic ${magic} -p${ptunnel_host} -l${port}

如果您尝试在termux上运行ptunnel客户端,这是可以做到的,但需要一些小的代码更改

如果客户不想要,他必须支付您的时间,但规避他的安全性似乎不是一个好主意。您可以尝试打开websocket,它们使用TCP连接并支持全双工数据通信。我对系统一无所知,因此我无法告诉您如何打开websocket,但javascript可以作为一个例子。@jeb我不知道我们如何规避任何问题。只要从jumphost到我们的服务器的连接是安全的,我看不到由此引入的任何漏洞。@DFSFOT这当然是一个选项。然而,我不知道有哪种软件可以让你做这样的事情:/@NickLehmann你可以试试NodeJS或者在浏览器中用javascript打开websocket。我刚刚意识到ssh通常也通过TCP运行,所以如果您不能使用ssh运行连接,那么它不是ssh被阻止,而是可能有很多基于TCP的协议。你可能仍然可以使用WebSocket,因为它们是HTTP。非常感谢你,我会尝试一下!工作真的很好,非常感谢!
#!/bin/sh

image=ptunnel-ng
if ! docker inspect $image > /dev/null 2> /dev/null; then
  docker build -t $image .
fi

magic=${1-123456}
ptunnel_host=${2-myserver.de}
port=${3-2001}

docker run --rm --detach -ti --name 'ptunnel1' -v $PWD:/shared -p 2222:2222 $image //workdir/ptunnel-ng --magic ${magic} -p${ptunnel_host} -l${port}