如何通过HTTP或https使用ssh?


42

我在公司防火墙(允许通过http和https端口但不能通过ssh 22)后面有一个linux fedora21客户端便携式计算机,并且在我自己的路由器后面的家里有一个linux fedora21服务器。当我指定家庭服务器的公用IP地址时,使用https可以浏览(因为我配置了家庭路由器)

是否可以通过http / s端口ssh(远程shell)到我的家庭服务器?

我看到了一个名为的工具corkscrew。有帮助吗?

opensshdhttpd在家庭服务器上运行。还有什么需要配置的?


1
将sshd放在家里以侦听端口443,但应在家庭httpd上禁用端口443。
taliezin 2015年

我不太明白。我还需要将git推送到httpd。因此我必须在443上收听httpd。–
MMM

尝试httptunnel-yum安装httptunnel http://www.nocrew.org/software/httptunnel.html,或者如您在问题中提到的那样:开瓶器。
taliezin 2015年

无论哪种方式,sshd都会侦听22,httpd侦听80/443,而httptunnel或corkscrew会将httpd收到的流量转发给sshd?
MMM 2015年

是。不必更改服务的端口。
taliezin

Answers:


42

可能的情况取决于防火墙允许的内容。

如果防火墙允许端口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-multiplexing-with-sshttp.htmlhttp://wrouesnel.github.io/articles/Setting%20up%20sshttp/并通过sshttp进行配置,并且在这些端口上运行网络服务器(nginx)时在端口80或443上使用SSH

如果您具有允许CONNECT隧道传输的Web代理

某些防火墙阻止所有传出连接,但允许通过允许HTTPCONNECT方法有效刺穿防火墙漏洞的代理浏览网页。该CONNECT方法可能仅限于某些端口,因此您可能需要将其与上述监听端口443结合使用。

要使SSH通过代理运行,可以使用corkscrew之类的工具。如果您的Web代理是,请在您的~/.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包装在HTTP(S)中

有些防火墙甚至在端口443上也不允许SSH通信。要解决这些问题,您需要伪装SSH或将SSH隧道传输到防火墙允许的范围内。有关使用proxytunnel执行此操作的教程,请参见http://dag.wiee.rs/howto/ssh-http-tunneling/


443把戏做到了!我很惊讶这个工程:)-任何系统管理员都知道为什么大多数防火墙都是这种情况?
AK_16年

@AK_因为尽管防火墙可以将TLS与SSH区分开,但这是一个额外的配置步骤,并且会花费更多的性能,而对于传出连接却没有真正的好处(因为无论如何都可以在TLS中隧道传输任何内容)。
吉尔(Gilles)'所以别再邪恶了'

@Gilles,甚至还有阻止HTTPS却允许HTTP CONNECT HTTPS的代理服务器吗?
佩里耶

1
@Pacerier他们很多。并不是说代理服务器阻止HTTPS —代理服务器不会阻止绕过代理服务器的连接—而是直接连接被阻止,但是代理服务器允许CONNECT连接任何流量,前提是它必须连接到端口443。反正没有真正的方法来过滤HTTPS ,缺乏信任注入和证书重写的基础,这是一个非常糟糕的主意。
吉尔(Gilles)'所以别再邪恶了'

请注意,您也可以在代理命令中使用netcat-openbsd代替ProxyCommand nc -X connect -x __proxy_IP__:__port__ %h %p
软木塞


1

如果要在同一端口443上同时运行HTTPS服务器和SSHd服务器,则可以使用sslh

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.