我可以通过 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 不匹配问题,我执行以下操作:
- 在 putty 中配置 SSH 隧道,以便本地端口 443 将流量转发到远程服务器
(L443 : <remote.server.com>:443 )
- 更新
C:\Windows\System32\drivers\etc\hosts
文件以添加如下条目127.0.0.1 <remote.server.com>
- 如果您正在使用 HTTP 代理服务器(例如,如果您使用公司代理),则绕过
<remote.server.com>
系统代理中的主机 - 现在你可以使用以下命令访问远程服务器 URL
https://<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 证书错误。
...可能需要清除浏览器缓存,或者启动一个新的浏览器...