是否可以通过端口80进行SSH?


20

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

我听说开瓶器可以使您做到这一点,但是我不确定如何准确地做到这一点。

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


2
man ssh显示端口:主机:主机端口。所以尝试一下ssh 80:server.com
MarkovCh1 2012年

那是为了通过-L或-R建立隧道。因此,您需要另一个盒子将其穿过。

Answers:


19

一个好的企业防火墙将检查流量,而不考虑端口,因此更改端口可能无法正常工作。

如果您可以控制服务器并且仍想尝试,则可以将sshd端口更改为端口80。警告如果在服务器的端口80上运行了其他操作,则将无法使用,并且可能完全意味着您失去对服务器的SSH访问!

您需要编辑/etc/ssh/sshd_config并更改Port80。然后跑

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,那么很可能他们会以相当消极的态度看待任何极端的尝试...

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


7
+1与您的IT部门讨论您的需求。在包括我的许多环境中,此类活动将成为终止的理由。
Panther

1
另外,如果他要使ssh服务器在另一个端口上侦听,则可以通过两Port行来使其在端口22和80上侦听,/etc/ssh/sshd_config文件中的每个端口都应包含一行。
Azendale

我会避免列出清单(清单很长,讨论其中的某些项目可能很快会引起政治上的注意),但是这个问题涵盖除员工试图规避由公司忠实执行的公司政策之外的许多情况公司自己的IT部门。我所有人都在讨论与IT部门的工作需求,但这并不总是适用的,有时IT部门甚至会回答:“很好,但我们不会为适应您而进行任何更改。” 另外,端口22被VPN阻止并不是很合理的,所以我认为值得一试。
伊利亚·卡根

@Panther然后,有些人甚至会更乐于结束公司制度。
NeverEndingQueue

15

通过代理进行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服务器(请参阅下面的转发)。

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

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,你想达到的SSH服务器mytarget,安装的netcat-OpenBSD系统mygateway(或者,如果它没有运行Ubuntu,确保它的nc命令)。把它放在你的~/.ssh/config

Host mytarget
ProxyCommand ssh mygateway nc %h %p

SSH到Apache

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


您还可以使用nc代替corkscrew来使用https,是吗?stackoverflow.com/a/15577758/32453
rogerdpack 2014年

3

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

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

即使家庭服务器也在端口80上运行Web服务器,也可以在端口80上进行SSH home。

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

<IfModule mod_proxy.c>
         ProxyRequests On
        <Proxy *>
                AddDefaultCharset off
                Order deny,allow
                Deny from all
        </Proxy>
        <Proxy localhost>
          Allow from all
        </Proxy>
        AllowCONNECT 22
        ProxyVia On
</IfModule>

现在,您可以向本地主机发出HTTP连接请求,并且Web服务器将为您建立隧道,您只需要确保所有流量都通过代理即可:

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

确保到SSH的本地连接没有特权(以避免让陌生人进入...)

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

如果您位于代理后面(因此您需要在浏览器中设置代理以获取Web),则需要首先建立通往自己主机的隧道,然后在该隧道内发出另一个CONNECT请求以到达您的主机。这更加复杂,您将需要使用2个netcat。

一切皆有可能,但后果自负...

更新:

或者简单地说,只需使用通过浏览器提供SSH的Web应用程序即可。http://zh.wikipedia.org/wiki/基于Web的_SSH


2

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

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

www.torproject.org上在线查看


2

对不起,我必须扮演魔鬼拥护者。

我知道最有可能这样做的原因,但是,为什么您的网络/防火墙管理员没有打开您要查找的特定端口?从安全角度来看,您是否想抓住机会进行网络检查?如果已将其配置为绕过端口80进行std通信,则您将自己置于危害之中。

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


2
并非总是可以与网络管理员交谈,并且网络管理员也不总是很合理。
杰里米·毕查

例如,如果您坐在咖啡馆中,已连接到WiFi,但管理员限制了访问(并且您仍需要立即连接)。
old-ufo
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.