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

jok*_*ino 21 ssh bazaar

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

我听说开瓶器可以让你这样做,但我不知道如何做到这一点。

如果您知道任何可以让您这样做的工作代理服务器,请务必提及它们。

Oli*_*Oli 20

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

如果你有对服务器的控制,并且仍然想尝试一下,你可以sshd的端口更改为端口80警告如果您还有别的端口80上运行(在服务器上),这将不会工作,将有可能意味着你完全失去对服务器的 SSH 访问!

您需要编辑/etc/ssh/sshd_config并更改Port80. 然后运行

sudo restart ssh
Run Code Online (Sandbox Code Playgroud)

然后连接:

ssh user@host -p80
Run Code Online (Sandbox Code Playgroud)

您的 bzr 路径将如下所示: bzr+ssh://host:80/path/


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

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

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

您可能只想与您的网络管理员谈谈。你需要做点什么,他们正在阻止你。如果他们有阻止的理由ssh,他们很可能会以相当消极的方式看待任何极端的规避尝试......

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

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

Gil*_*il' 16

通过代理 SSH

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

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

Port 443
Run Code Online (Sandbox Code Playgroud)

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

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

ssh -p 443 myserver.example.com
Run Code Online (Sandbox Code Playgroud)

如果可行,请在您的~/.ssh/config:

Host myserver
HostName myserver.example.com
Port 443
Run Code Online (Sandbox Code Playgroud)

如果您需要在 Web 浏览器中设置 Web 代理,请告诉 ssh 通过代理。安装开瓶器。在您的 中定义一个这样的别名~/.ssh/confighttp://proxy.acme.com:3128/您用于 HTTPS 到外部的代理在哪里(替换为正确的主机名和端口):

Host myserver
HostName myserver.example.com
Port 443
ProxyCommand /usr/bin/corkscrew proxy.acme.com 3128 %h %p
Run Code Online (Sandbox Code Playgroud)

SSH 上的 SSH

如果您可以通过上述技术之一到达某些外部机器,但不能到达您感兴趣的机器,请使用它来转发连接。假设你可以ssh到一个叫机mygateway,你想达到的SSH服务器mytarget,安装的netcat-OpenBSD系统mygateway(或者,如果它没有运行Ubuntu,确保它的nc命令)。把它放在你的~/.ssh/config

Host mytarget
ProxyCommand ssh mygateway nc %h %p
Run Code Online (Sandbox Code Playgroud)

SSH 到 Apache

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