![通过 SSL 进行 SSH 隧道](https://linux22.com/image/1045202/%E9%80%9A%E8%BF%87%20SSL%20%E8%BF%9B%E8%A1%8C%20SSH%20%E9%9A%A7%E9%81%93.png)
在我的某个系统上,有一个防火墙禁止任何传出内容,除非 http(s)...
有些用户必须使用 ssh,但他们不能。我首先尝试在端口 443 上运行 ssh,但没有成功。
我在 Google 上搜索了一下,发现我可以使用来实现这一点stunnel
,但需要一些配置,那么该怎么做呢?
答案1
此配置分为两部分。第一部分在远程 SSH 服务器上完成。第二部分在本地机器上完成。
服务器端说明:
首先安装stunnel:
sudo apt-get install stunnel4
制作SSL证书(365天):
openssl genrsa 1024 > stunnel.key
openssl req -new -key stunnel.key -x509 -days 365 -out stunnel.crt
cat stunnel.crt stunnel.key > stunnel.pem
sudo mv stunnel.pem /etc/stunnel/
配置 stunnel 将 443 (https) 隧道连接至 22 (ssh):
创建配置文件以满足使用 SSH over SSL 的需求。
gksu gedit /etc/stunnel/stunnel.conf
写下这些:
pid = /var/run/stunnel.pid
cert = /etc/stunnel/stunnel.pem
[ssh] accept = public_ip:443
connect = 127.0.0.1:22
上述配置告诉 stunnel 在哪里找到我们生成的证书以及在哪里接受和转发连接。在这种情况下,stunnel 将在端口 443(https)上监听 public_ip,并将连接重定向回 22(ssh)上的 localhost。
为了启动 stunnel 服务,我们需要在 /etc/default/stunnel4 中激活它。将 ENABLED 行从 0 更改为 1。
最后,我们可以启动服务并继续进行客户端配置:
sudo service stunnel4 start
您可以使用 netstat 命令验证 stunnel 现在是否正在监听:
netstat -natp | grep :443
客户端说明:
首先安装 stunnel 包:
sudo apt-get install stunnel4
制作SSL证书(365天):
openssl genrsa 1024 > stunnel.key
openssl req -new -key stunnel.key -x509 -days 365 -out stunnel.crt
cat stunnel.crt stunnel.key > stunnel.pem
sudo mv stunnel.pem /etc/stunnel/
创建配置文件:
gksu gedit /etc/stunnel/stunnel.conf
写下这些:
pid = /var/run/stunnel.pid
cert = /etc/stunnel/stunnel.pem
[ssh] accept = 127.0.0.1:2200
connect = remote_ip:443
为了启动 stunnel 服务,我们需要在 /etc/default/stunnel4 中激活它。将 ENABLED 行从 0 更改为 1。
启动服务。
sudo service stunnel4 start
建立联系
现在,stunnel 服务已在服务器和客户端上运行,我们就可以建立安全连接了。现在,当您在端口 2200 上连接到本地计算机时,它将在端口 443 上连接到远程 IP,创建安全 SSL 连接,并连接到另一端的端口 22。您的加密 SSH 连接现在已使用端口 443 封装在加密 SSL 连接中。
ssh localhost -p 2200
答案2
stunnel
适合永久设置,但如果您想要更临时的解决方案,您可以连接 2 个隧道。
例如,你希望主机 A 访问主机 B 上的端口 443,但被防火墙阻止,因此你尝试从主机 C 创建隧道,主机 C 可以访问 A 端口 22 和 B 端口 443
ssh -R 443:B:443 root@A
无法在 Ubuntu 或任何禁用 root 帐户或 root ssh 访问的 dist 上运行。
ssh -R 443:B:443 other_user@A
不起作用,因为只有 root 可以在 A 上设置监听端口,即使用户“other_user”有 sudo 权限。
ssh -R 1443:B:443 other_user@A
将允许 A 使用 127.0.0.1:1443 访问 B:443。这很好,但有时您无法更改端口(端口号可能在应用程序中被硬编码)。在这种情况下,除了之前的 A->C->B 隧道之外,
您还可以添加另一个从 A:443 到 A:1443 的隧道 。ssh -L 443:127.0.0.1:1443 127.0.0.1