如何使链式 ssh 与 git 配合使用

如何使链式 ssh 与 git 配合使用

我正在尝试解决一个愚蠢的防火墙问题。我正尝试通过代理 ssh 链接 ssh 访问 git:

〜/ git-链:

#!/bin/bash
ssh hosticangetto ssh $*
# End

进而:

$ export GIT_SSH=~/git-chain
$ git clone ssh://[email protected]/somerepo.git

E, [2012-02-07T12:50:21.434913 #28359] ERROR -- : git command not recognized
fatal: The remote end hung up unexpectedly

传递到我的脚本的参数是:

[email protected] git-upload-pack 'somerepo.git'

我已经检查了从 hosticangetto 到 git 存储库的密钥,一切正常。

我不确定为什么会失败。我以前用 mercurial -e 开关做过这种事。

答案1

将这些行添加到您的文件中~/.ssh/config(如果该文件尚不存在,则使用这些行创建该文件):

Host somerepostore.com
    ProxyCommand ssh -W %h:%p hosticangetto

然后取消设置 GIT_SSH。

这告诉 ssh 使用 hosticangetto 作为代理。这比您的解决方案更好,因为在您的解决方案中,数据包在 hosticangetto 上解密,然后在远程主机上为 somerepostore.com 重新加密。使用这样的代理命令意味着数据包在您的本地计算机上为 somerepostore.com 加密,并且这些加密数据包通过 hosticangetto 传递。

答案2

我认为您需要对 TTY 采取一些措施。

这不起作用:

ssh server1 ssh server2

它只是挂在那儿。

这似乎有效:

ssh -t server1 ssh server2

查看详细输出,ssh -v server1 ssh server2看起来第一个/外部 ssh 已完成并且我到达了 server1,但我没有为 server2 执行内部/第二个 ssh。

相关内容