Answers:
一个好的企业防火墙将检查流量,而不考虑端口,因此更改端口可能无法正常工作。
如果您可以控制服务器并且仍想尝试,则可以将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并进行一些设置:
VPN可能是一个选项,但是如果ssh
被锁定,我希望也将其排除在外。
您可能只想和您的网络管理员打个招呼。您需要做一些事情,他们正在阻止您。如果他们有阻止的理由ssh
,那么很可能他们会以相当消极的态度看待任何极端的尝试...
简而言之,与他们交谈可能更安全。
Port
行来使其在端口22和80上侦听,/etc/ssh/sshd_config
文件中的每个端口都应包含一行。
如果防火墙允许,则可以在任何端口上运行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到一个叫机mygateway
,你想达到的SSH服务器mytarget
,安装的netcat-OpenBSD系统上mygateway
(或者,如果它没有运行Ubuntu,确保它的nc
命令)。把它放在你的~/.ssh/config
:
Host mytarget
ProxyCommand ssh mygateway nc %h %p
如果要连接的主机已经在运行Apache并正在侦听端口443,并且可以控制该主机,则可以将此Apache设置为接受SSH连接并转发它们。请参阅通过HTTP(S)传输SSH。
我刚刚在这里阅读了一个复杂的解决方案:
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
如果您无法控制服务器将SSH端口更改为端口80,或者由于防火墙阻止您通过端口80传输此类数据而无法通过端口80进行SSH,则可以尝试使用TOR。
TOR是一个庞大的网络。您的计算机连接到世界各地的另一台计算机,该计算机连接到另一台计算机,直到到达SSH服务器为止。这一切都是防火墙友好的,发生在端口443(您的公司没有阻止它,否则,..那不是很聪明)。它实际上只是一个巨大的代理或VPN,并且也已加密。这样,您可以访问任何端口上的任何主机(也可以访问端口22上的服务器的SSH)。
对不起,我必须扮演魔鬼拥护者。
我知道最有可能这样做的原因,但是,为什么您的网络/防火墙管理员没有打开您要查找的特定端口?从安全角度来看,您是否想抓住机会进行网络检查?如果已将其配置为绕过端口80进行std通信,则您将自己置于危害之中。
我同意上面的一些建议,其中点对点VPN可能是更安全的选择。同样,从安全角度来看,我想知道您真正绕过安全策略的原因,以及为什么不能将服务器置于dmz或骨干网中以进行访问。只有我。祝好运。
man ssh
显示端口:主机:主机端口。所以尝试一下ssh 80:server.com
。