我在公司防火墙后面有一台 Linux fedora21 客户端笔记本电脑(允许通过 http 和 https 端口,但不能通过 ssh 22),并且我在家里在我自己的路由器后面有一个 Linux fedora21 服务器。当我指定家庭服务器的公共 IP 地址时,可以使用 https 进行浏览(因为我配置了家庭路由器)
是否可以通过 http/s 端口 ssh(远程 shell)到我的家庭服务器?
我看到一个工具叫corkscrew
.那会有帮助吗?
opensshd
并httpd
在家庭服务器上运行。还需要什么配置吗?
答案1
什么是可能的取决于防火墙允许什么。
如果防火墙允许端口 443 上的任意流量
有些防火墙采取简单的方法,允许端口 443 上的任何内容。如果是这种情况,访问家庭服务器的最简单方法是让它侦听端口 443 上的 SSH 连接。如果您的计算机直接连接到 Internet,只需添加Port 443
到/etc/ssh/sshd_config
或/etc/sshd_config
下面的行Port 22
。如果您的计算机位于重定向传入连接的路由器/防火墙后面,请使用以下命令将端口 443 的传入连接重定向到服务器的端口 22
iptables -t nat -I PREROUTING -p tcp -i wan0 --dport 443 -j DNAT --to-destination 10.1.2.3:22
其中wan0
是路由器上的 WAN 接口,10.1.2.3 是家庭网络上服务器的 IP 地址。
如果您想让您的家庭服务器在端口 443 上侦听 HTTPS 连接和 SSH 连接,这是可能的 - 可以轻松地区分 SSH 和 HTTPS 流量(在 SSH 中,服务器首先对话,而在 HTTP 和 HTTPS 中,客户端对话第一的)。看http://blog.stalkr.net/2012/02/sshhttps-多路复用-with-sshttp.html和http://wrouesnel.github.io/articles/Setting%20up%20sshttp/有关如何进行设置的教程sshttp,并且当 Web 服务器 (nginx) 在这些端口上运行时,在端口 80 或 443 上使用 SSH
如果您有允许 CONNECT 隧道的 Web 代理
有些防火墙会阻止所有传出连接,但允许通过代理浏览网页,该代理允许HTTP协议CONNECT
有效地在防火墙上打洞的方法。该CONNECT
方法可能仅限于某些端口,因此您可能需要将此与上面的端口 443 上的侦听结合起来。
要使 SSH 通过代理,您可以使用类似的工具开瓶器。如果您~/.ssh/config
的ProxyCommand
网络代理是http://web-proxy.work.example.com:3128
:
Host home
HostName mmm.dyndns.example.net
ProxyCommand corkscrew web-proxy.work.example.com 3128 %h %p
然后你只需运行即可连接ssh home
。
将 SSH 封装在 HTTP(S) 中
有些防火墙不允许 SSH 流量,即使在端口 443 上也是如此。为了应对这些情况,您需要将 SSH 伪装或通过隧道传输到防火墙允许通过的内容中。看http://dag.wiee.rs/howto/ssh-http-tunneling/有关执行此操作的教程代理隧道。
答案2
您可以使用sslh如果您想在同一端口 443 上运行 HTTPS 服务器和 SSHd 服务器。
答案3
你可以尝试另一种方式,设置一个Web服务器,它可以通过ssh连接你的服务器,