是否可以通过端口80 SSH?

我在网络防火墙后面,不让我通过默认端口。 因此,我无法将任何bzr分支推送到我的存储库。 我想知道是否有可能以某种方式通过端口80代理ssh所以我可以推动分支机构。

我听说开瓶器让你这样做,但我不知道该怎么做。

如果您知道任何可以使用的代理服务器,请提及它们。

一个好的企业防火墙将检查流量而不管端口如何,因此更改端口可能不起作用。

如果您可以控制服务器,但仍想尝试它,则可以将sshd端口更改为端口80. 警告如果您在端口80上运行其他东西(在服务器上),这将无效并且可能意味着您完全失去对服务器的SSH访问!

您需要编辑/etc/ssh/sshd_config并将Port更改为80 。 然后跑

 sudo restart ssh 

然后连接:

 ssh user@host -p80 

你的bzr路径看起来像: bzr+ssh://host:80/path/


另一种方法是使用WebDav。 这应该完全绕过防火墙问题,因为它全部发生在端口80上,但它需要你运行Apache并设置许多东西:

  1. 安装WebDav
  2. 将您的分支移动到正确的位置
  3. 使用bzr-webdav插件进行连接

VPN可能是一个选项,但如果ssh被锁定,我也希望它也被排除在外。

您可能只想与网络管理员联系。 你需要做点什么而且他们会阻止你。 如果他们有理由阻止ssh ,那么很可能他们会认为任何极端的尝试都会相当消极……

简而言之,与他们交谈可能更安全。

SSH通过代理

如果防火墙允许您,您可以运行ssh到任何端口,但这需要ssh服务器在该端口上侦听。 端口80不太可能工作,因为大多数有防火墙的地方都会分析该端口上的流量并阻止任何非HTTP的流量。 但是端口443(通常是HTTPS端口)通常可以工作,因为SSH和HTTPS看起来很像过滤软件,因此您的SSH会话看起来像是HTTPS会话。 (可以区分HTTPS和SSH,因此如果防火墙足够复杂,这将无效。)

如果您可以控制服务器,除了22(正常的ssh端口)之外,还要在端口443上监听。 您可以在/etc/ssh/sshd_config配置端口:添加一行

 Port 443 

除了应该已经在那里的Port 22 。 请注意,这假定ssh服务器也不是HTTPS服务器。 如果是,您需要找到防火墙允许您使用的另一个端口或查找另一个ssh服务器(请参阅下面的转发)。

如果您不需要在Web浏览器中设置Web代理,则可以尝试直接连接:

 ssh -p 443 myserver.example.com 

如果可行,请在~/.ssh/config定义别名:

 Host myserver HostName myserver.example.com Port 443 

如果您需要在Web浏览器中设置Web代理,请告诉ssh通过代理。 安装开瓶器 。 在~/.ssh/config定义这样的别名,其中http://proxy.acme.com:3128/是用于HTTPS的代理到外部(由适当的主机名和端口替换):

 Host myserver HostName myserver.example.com Port 443 ProxyCommand /usr/bin/corkscrew proxy.acme.com 3128 %h %p 

通过SSH SSH

如果您可以通过上述技术之一到达某些外部机器而不是您感兴趣的机器,请使用它来转发连接。 假设您可以ssh到名为mygateway的计算机,并且想要在mytargetmytarget SSH服务器,请在mytarget安装netcat-openbsd (或者,如果它没有运行Ubuntu,请确保它具有nc命令)。 把它放在~/.ssh/config

 Host mytarget ProxyCommand ssh mygateway nc %h %p 

SSH到Apache

如果要连接的主机已在运行Apache并在端口443上侦听,并且您可以控制该主机,则可以将此Apache设置为接受SSH连接并转发它们。 请参阅通过HTTP隧道连接SSH(S) 。

如果您无法控制服务器以将SSH端口更改为端口80,或者由于防火墙阻止您通过端口80传输此类数据而无法通过端口80进行SSH,则可以尝试TOR。

TOR是一个巨大的网络。 您的计算机连接到世界某处的另一台计算机,该计算机连接到另一台计算机,直到它到达SSH服务器。 这一切都是防火墙友好的,发生在443端口(你的公司没有阻止,或者……好吧,那不是那么聪明)。 它实际上只是一个巨大的代理或VPN,它也是加密的。 这样,您可以访问任何端口上的任何主机(也可以访问端口22上的服务器SSH)。

请访问www.torproject.org在线查看 。

对不起,我要扮演恶魔的主张。

我知道这很有可能是这样做的原因,但是,为什么您的网络/防火墙管理员不会打开您正在寻找的特定端口? 从安全角度来看,您是否希望抓住网络检查错过任何内容的机会? 如果它被配置为旁路端口80用于标准流量,并且您正在将自己置于危害之中。

我同意上面的一些建议,其中点对点vpn可能是一个更安全的选项。 同样,从安全角度来看,我很想知道你真正绕过安全策略的原因,以及为什么你不能将服务器放在dmz或骨干网中进行访问。 只有我。 祝好运。

我刚刚在这里阅读了一个复杂的解决方案:

http://benctechnicalblog.blogspot.hu/2011/03/ssh-over-connect-over-port-80.html

即使您的主服务器也在端口80上运行Web服务器,您也可以在端口80上SSH。

假设家庭服务器运行Apache。 这个想法涉及在服务器中启用mod_proxy,然后将其限制为连接到localhost(proxy.conf):

  ProxyRequests On  AddDefaultCharset off Order deny,allow Deny from all   Allow from all  AllowCONNECT 22 ProxyVia On  

现在您可以对localhost执行HTTP连接请求,并且Web服务器将为您建立隧道,您只需要确保所有流量都通过您的代理:

 ssh -o 'ProxyCommand nc -X connect -x myhost.example.com:80 localhost 22' myhost.example.com 

确保与SSH的localhost连接没有特权(以避免让陌生人进入…)

如果您位于仅允许端口80输出的路由器后面,这应该可以工作。

如果您在代理服务器后面(因此您需要在浏览器中设置代理服务器以获取Web),您将需要首先建立到您自己的主机的隧道,然后在此隧道内发出另一个CONNECT请求以访问您的主机。 这更复杂,你需要使用2个netcats。

一切皆有可能,但为了自己的风险,这样做……

更新:

或者简单地说,只需使用通过浏览器为您提供SSH的Web应用程序。 http://en.wikipedia.org/wiki/Web-based_SSH