代码之家  ›  专栏  ›  技术社区  ›  Alexander

ssh上的git守护程序-致命:协议错误:错误的行长字符:ssh-

  •  2
  • Alexander  · 技术社区  · 7 年前

    我在服务器端创建了用户“gitproxy”,将我的ssh密钥添加到其授权密钥中,并尝试通过ssh使用git守护程序:

    gitproxy:~$ git daemon --port=2222 --verbose
    

    但有一个错误: 在客户端:

    o:~/git$ git clone ssh://server>:2222/home/gitproxy/git
    Cloning into 'git'...
    ssh: connect to host <server> port 2222: Connection refused
    fatal: Could not read from remote repository.
    

    在服务器端:

    [18666] Ready to rumble
    [18667] Connection from 192.168.211.174:42416
    fatal: protocol error: bad line length character: SSH-
    [18666] [18667] Disconnected (with error)
    

    存在回购。此外,我通常通过SSH进入此服务器,无需密码(因此,我的SSH密钥被接受):

    $ ssh gitproxy@192.168.201.84
    gitproxy@192.168.201.84:~$
    

    此外,我可以从我的桌面(客户端)获取git receive pack的分支列表:

    $ ssh gitproxy@192.168.201.84  git-receive-pack  /home/gitproxy/git
    008fef8bbf80818e6b634ca56c3ef6c24e5bbdb7bf74 refs/heads/masterreport-status delete-refs side-band-64k quiet atomic ofs-delta agent=git/2.16.1
    0046ef8bbf80818e6b634ca56c3ef6c24e5bbdb7bf74 refs/remotes/origin/HEAD
    0048ef8bbf80818e6b634ca56c3ef6c24e5bbdb7bf74 refs/remotes/origin/master
    

    我检查了stackoverflow上提出的所有可能的修复。但是git守护进程仍然返回错误。 我将非常感谢您的帮助。提前感谢!

    3 回复  |  直到 7 年前
        1
  •  0
  •   VonC    7 年前

    但我需要 --access-hook 属于 git daemon (或在客户端运行“git pull”时执行某些操作的任何其他机制)。

    然后,只使用SSH(一个完全没有git的守护程序),就可以使用 SSH forced command mechanism 那个 I illustrate for instance with gitolite .

    在~gitproxy/中。ssh/authorized\u密钥,您可以调用任何要执行操作的脚本,以及 然后 调用Git本身,使用 $SSH_ORIGINAL_COMMAND (其中包括“ git-upload-pack|git-receive-pack|git-upload-archive" Git命令)。

    您甚至可以安装 gitolite 本身,因为它将为您管理授权部分。

        2
  •  0
  •   mmlr    7 年前

    git守护程序是实现 git 协议,即与 git://... URL。它不理解SSH协议,因此在执行此操作时:

    git克隆ssh://<服务器(>):2222/主页/gitproxy/git

    您正在尝试连接到 <server>:2222 通过SSH协议(由于 ssh://... URL)。这个 git daemon 然后不了解SSH发送给它的内容( SSH- 错误消息中是初始SSH握手的一部分)。

    如果您实际上打算使用SSH协议与远程存储库交互,则无需使用 git守护程序 完全通过使用 ssh://... URL形式,git命令将使用SSH调用所需的远程命令( receive-pack 例如,手动执行的)。在这种情况下,只需删除URL的端口规范并退出 git守护程序 在服务器上。身份验证和加密由SSH作为传输机制提供,授权使用文件系统权限完成。

    如果你真的想使用 git守护程序 以及 吉特 协议,将URL更改为 git://<server>:2222/... 相反请注意 吉特 协议不提供任何身份验证、加密或授权机制,公开的存储库将完全公开。

        3
  •  0
  •   phd    7 年前

    git-daemon 不讲SSH协议,只讲简单的git协议;协议的URL必须以开头 git:// ssh:// . 一、 e.服务器的URL为 git://192.168.201.84:2222/ .

    要通过ssh使用git repo,您需要一个ssh服务器。看来你有一个:在gitproxy@192.168.201.84; 好的,那么回购的URL是 ssh://gitproxy@192.168.201.84/home/gitproxy/git . 同一URL的另一种“类似scp”的语法是 gitproxy@192.168.201.84:git .