git push使用端口转发(SSH隧道)

时间:2011-06-18 15:10:06

标签: git ssh port portforwarding tunnel

我正在尝试访问托管在防火墙后面的群集上的GIT仓库。当我在校园(防火墙后面)时,我可以直接访问集群,我可以从校外SSH到特定的机器,然后在需要时ssh到集群。

我尝试使用以下方式设置隧道:

sudo ssh -L 9418:cluster:9418 username@ssh.server

但我仍然无法从我的机器上运行“git push”。我知道我错过了一些东西但却无法弄明白。

编辑: 我将〜/ .ssh / config修改为:

Host cluster
     NoHostAuthenticationForLocalhost  yes
     Hostname localhost
     Port 9418

运行git push时出错:

ssh_exchange_identification: Connection closed by remote host
fatal: The remote end hung up unexpectedly

2 个答案:

答案 0 :(得分:3)

我猜测Git远程网址的主机名部分是cluster而不是localhostgit config remote.origin.url的输出是多少?如果它是这样的:

git://cluster/repo.git

然后将其更改为:

git://localhost/repo.git

ssh端口转发如何工作是ssh客户端打开本地计算机上的端口(在您的情况下为9418)并侦听连接。每当应用程序连接到该端口时,您的ssh客户端会询问ssh服务器(在您的情况下为ssh.server)以打开到隧道远程端的连接(在您的情况下为cluster端口9418)。发送到本地端口的所有数据都通过现有的ssh会话转发到ssh服务器。然后,ssh服务器将数据注入其与目标计算机的连接。因此,从您的角度来看,您正在连接到本地计算机。从目的地的角度来看,您是从ssh服务器连接的。

此外,您的ssh配置似乎不正确。该配置告诉您的客户端,无论何时您希望ssh到名为cluster的计算机,它都应该连接到localhost端口9418.根据您提供的ssh命令,localhost端口9418将转发到{{ 1}}的端口9418. cluster的ssh服务器是否真的在端口9418上侦听而不是默认端口22?我猜cluster实际上是在端口9418上运行Git服务器,在这种情况下你根本不需要修改你的ssh配置。

答案 1 :(得分:0)

很奇怪,因为这通常应该有效:this有帮助吗?你有ssh配置位吗?