![如何使用 ssh 创建到特定端口的本地-远程-本地隧道](https://linux22.com/image/1399122/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20ssh%20%E5%88%9B%E5%BB%BA%E5%88%B0%E7%89%B9%E5%AE%9A%E7%AB%AF%E5%8F%A3%E7%9A%84%E6%9C%AC%E5%9C%B0-%E8%BF%9C%E7%A8%8B-%E6%9C%AC%E5%9C%B0%E9%9A%A7%E9%81%93.png)
我可以通过执行以下操作从我的 Windows 计算机(localhost - eth1)到我的 Linux 计算机(remotehost - eth0)建立 ssh 连接:
ssh [email protected]
因为我使用非标准端口,所以我不能使用它,所以我必须指定端口:
ssh -p remoteSSH [email protected]
然后我将 http 和 ssl 转发到远程主机的 http 和 ssl 端口。我有一些想在 Linux 机器上使用的服务,因此我使用这个:
ssh -L 80:127.0.0.1:80
ssh -L 443:127.0.0.1:443
最后,我尝试“安全地”将流量从 (localhost) 反向转发到 (remotehost) 并返回到 (localhost)。但是,对于此连接,我需要 socks 代理为 127.0.0.1:proxy1。我成功地通过上述转发方法创建了一个非 socks 代理,该代理将 proxy1 指向 (localhost) 上的 [特定端口,又名 proxy2],但我试图避免不断修改 html 文件以指向代理端口。
当我使用 Putty 时,除了动态 socks 连接(仅用于转发标准 http/s 流量)外,我已连接上述所有连接。我不想创建互联网代理。我已停止使用 Putty,因为它会断开连接,并且每次转发流量时都会崩溃。后者是一个已知错误:
http://www.chiark.greenend.org.uk/~sgtatham/putty/changes.html
These features were new in beta 0.61 (released 2011-07-12):
Bug fix: corruption of port forwarding is fixed (we think).
These features were new in beta 0.59 (released 2007-01-24):
Bug fix: SSH-1 connections tended to crash, particularly when using port forwarding.
These features were new in beta 0.58 (released 2005-04-05):
Fixed crashing bug with remote port forwarding.
These features were new in beta 0.53 (released 2002-10-01):
Various bug fixes, including (with luck) much greater stability in high-traffic port forwarding situations.
因此,在 Windows 上,我转到 cygwin 来使用 openssh。到目前为止,我想出的命令是:
ssh -t -t -L 80:127.0.0.1:80 -L 443:127.0.0.1:443 -p remoteSSH [email protected] -R proxy1:127.0.0.1:randomport "ssh -D randomport 127.0.0.1"
为了测试从代理1到代理2的连接,我在 Firefox 中设置了:
HTTP Proxy: Port:
SSL Proxy: Port:
FTP Proxy: Port:
SOCKS Host: 127.0.0.1 Port: proxy1
SOCKSv5
No Proxy for:
我收到一条响应,说代理服务器拒绝连接。我在 Windows 框中创建了允许连接的规则。我禁用了 Windows 防火墙,并通过以下方式在 Linux 框上的 iptables 中允许连接:
$IPTABLES -A OUTPUT -o eth1 -p tcp -m tcp -s 192.168.1.100 -d 192.168.1.200 --dport randomport -j ACCEPT
iptables 已设置为允许本地流量。我使用受密码保护的基于主机的私钥身份验证。我有 syslog-ng (cygwin) 日志记录 ssh。
也许,作为问题的替代或补充,有人可以指导我使用 Linux 和/或 Windows 工具来帮助我诊断问题。对于 Windows,我有 Windows 系统控制中心、Sysinternals Suite 和 Nirsoft Utilities。Windows 系统:Windows 7。Linux:Slackware 64
http://technet.microsoft.com/en-us/sysinternals/bb842062.aspx
答案1
我决定采用一种久经考验的反复试验的方法。这是允许访问代理 2 的方法:
ssh -t -t -D proxy1 -R proxy2:127.0.0.1:proxy2 -p remoteSSH [email protected]
在 Firefox 中,我现在可以输入:
https://127.0.0.1:proxy2
它将通过隧道(代理 1)将连接发送到本地代理(代理 2),本质上成为到特定端口的本地-远程-本地隧道。
虽然可以通过代理 1 访问代理 2,但允许代理 1 访问互联网。为了限制代理可以访问的内容,我根据手册页在远程主机 192.168.1.100 的 sshd_config 文件中添加了 PermitOpen 条目:
http://www.openssh.com/cgi-bin/man.cgi?query=sshd_config
PermitOpen 127.0.0.1:proxy2 127.0.0.1:80 127.0.0.1:443