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

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

我位于网络防火墙后面,它不允许我通过默认端口进行 ssh 操作。因此,我无法将任何 bzr 分支推送到我的存储库。我想知道是否可以通过端口 80 代理 ssh,以便我可以推送分支。

我听说螺旋状让你这样做,但我不确定具体如何做。

如果您知道任何可以让您执行此操作的代理服务器,请提及它们。

答案1

好的企业防火墙会检查任何端口的流量,因此更改端口可能不起作用。

如果您可以控制服务器,并且仍想尝试,您可以将 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,那么他们很可能会以相当负面的态度看待任何极端的规避尝试……

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

答案2

通过代理进行 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,并且想要访问 上的 SSH 服务器mytarget,请安装netcat-openbsdmygateway或者,如果它没有运行 Ubuntu,请确保它有命令nc)。将其放入您的~/.ssh/config

Host mytarget
ProxyCommand ssh mygateway nc %h %p

SSH 到 Apache

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

答案3

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

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

即使您的家庭服务器也在端口 80 上运行 Web 服务器,您也可以通过端口 80 通过 SSH 回家。

假设家庭服务器运行 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 输出的路由器后面,这应该可以工作。

如果您使用代理(因此您需要在浏览器中设置代理才能访问网络),则需要先建立到您自己的主机的隧道,然后在该隧道内发出另一个 CONNECT 请求以访问您的主机。这更复杂,您需要为此使用 2 个 netcat。

一切皆有可能,但风险自负……

更新:

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

答案4

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

TOR 是一个巨大的网络。您的计算机连接到世界上某个地方的另一台计算机,该计算机再连接到另一台计算机,直到到达 SSH 服务器。这一切都是防火墙友好的,发生在端口 443 上(您的公司不会阻止该端口,否则……好吧,他们就不太聪明了)。它是为这种流量重新路由而设计的,而且也是加密的。这样,您就可以在任何端口上访问任何主机(也可以在端口 22 上访问服务器的 SSH)。

在线查看https://www.torproject.org

相关内容