是否可以使用标准 ssh 程序通过 ssh 隧道传输 https 流量?

是否可以使用标准 ssh 程序通过 ssh 隧道传输 https 流量?

我可以通过 ssh-tunnel 重新路由 https 流量(svn 存储库的)吗?

问题是,如果我仅创建一个隧道进行监听,那么使用 https 的服务将无法工作,例如:

ssh -L 12345:server.com:443 localhost

我还需要做点别的吗?目的是要挖隧道https://PROJECT.googlecode.com/svn/其中 PROJECT 是项目名称。

答案1

HTTPS 连接可以通过 SSH 端口转发重定向 - 但是,由于主机名不匹配,SSL/TLS 证书验证将失败:

您正在连接到https://本地主机:12345但服务器证书包含名称server.com。

我不会直接转发 HTTPS 连接,而是会在您要打开 SSH 连接的远程计算机上运行 HTTP(s)/SOCKS 代理。然后设置您要通过端口转发隧道传输的程序以使用此代理。这将是一个干净的解决方案。

更新:SVN 似乎可以使用 HTTP 代理,但不能使用 SOCKS 代理。如果要这样做,您需要在本地系统上安装额外的“socksifier”。请参阅Serverfault.com:如何使用 ssh 隧道为 subversion 设置代理?

答案2

为了能够解决使用 SSH 隧道访问远程服务器时证书 DNS 不匹配问题,我执行以下操作:

  1. 在 putty 中配置 SSH 隧道,以便本地端口 443 将流量转发到远程服务器(L443 : <remote.server.com>:443 )
  2. 更新C:\Windows\System32\drivers\etc\hosts文件以添加如下条目127.0.0.1 <remote.server.com>
  3. 如果您正在使用 HTTP 代理服务器(例如,如果您使用公司代理),则绕过<remote.server.com>系统代理中的主机
  4. 现在你可以使用以下命令访问远程服务器 URLhttps://<remote.server.com>

答案3

对于 Linux,只需 SSH 动态端口转发即可

本地主机ssh -fND 1234 user-name@remote-ip-address-A

远程主机ssh -fNL 12345:remote-ip-address-B:443 remote-ip-address-A

打开 Firefox 安装 FoxyProxy 并按照屏幕截图所示进行设置。 FoxyProxy 设置

在 Firefox 中,单击 FoxyProxy 图标并选择刚刚建立的代理连接。在 URL 栏中输入https://127.0.0.1

此外,您可以绕过整个过程,直接使用sshuttle。使用 的sshuttle参数-H会导致它在发现新的远程主机名时更新您的本地/etc/hosts文件。您将需要它,以便证书正常工作。

sshuttle -H -vr user-name@remote-ip-address-A remote-net/ip-address-B

答案4

Juha Palomäki 的评论对我有帮助。

我的情况如下:

server-i-want-to-get-to.com只能通过特定的 IP 地址列表访问,我的家庭网络不允许,但my-server.com允许(我控制的服务器)的传出 IP 地址。

所以,我想https://server-i-want-get-to.com/,使用来自的传出 IP 地址[email protected]

在我的笔记本电脑(或台式机)上,我添加了一个条目/etc/hosts

sudo vi /etc/hosts
127.0.0.1 server-i-want-get-to.com

现在,我ssh进入myserver.com,并使用dig来查找server-i-want-to-get-to.com

dig server-i-want-to-get-to.com

...现在ANSWER SECTION我知道了 IP 地址XX.XX.XX.XX

从我的笔记本电脑上的终端建立一个 ssh 隧道

...选择一个尚未使用的端口,8686 只是一个例子...

ssh -L 8686:XX.XX.XX.XX:443 [email protected]

现在我可以去https://server-i-want-to-get-to.com:8686/在我的浏览器中。

由于该/etc/hosts条目,因此没有 SSL 证书错误。

...可能需要清除浏览器缓存,或者启动一个新的浏览器...

相关内容