我在服务器端创建了用户"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
我检查了堆栈溢出上提出的所有可能的修复程序。但是 git 守护进程仍然返回错误。 我将非常感谢任何帮助。提前感谢!
我需要
--access-hook
git daemon
(或者在客户端运行"git pull"时执行某些操作的任何其他机制)。
然后,仅使用 SSH(根本没有 git 守护程序),您可以使用我举例说明的 gitolite 的 SSH 强制命令机制。
在 ~gitproxy/.ssh/authorized_keys 中,你可以调用任何你想要的脚本来执行操作,然后使用$SSH_ORIGINAL_COMMAND
调用 Git 本身(这将包括"git-upload-pack|git-receive-pack|git-upload-archive"
Git 命令)。
您甚至可以安装gitolite本身,因为它将为您管理授权部分。
git 守护进程是实现git
协议的服务器,即与git://...
URL 一起使用的协议。它不理解SSH协议,所以当你这样做时:
git clone ssh://
:2222/home/gitproxy/git
您正在尝试通过 SSH 协议连接到<server>:2222
(由于 URLssh://...
)。然后,git daemon
不了解SSH发送给它的内容(错误消息中的SSH-
是初始SSH握手的一部分)。
如果您实际上打算使用 SSH 协议与远程仓库进行交互,则根本不需要使用git daemon
。通过使用ssh://...
URL 表单,git 命令将使用 SSH 调用所需的远程命令(例如,您手动执行的receive-pack
)。在这种情况下,只需删除 URL 的端口规范并退出服务器上的git daemon
即可。身份验证和加密由 SSH 作为传输机制提供,授权使用文件系统权限完成。
如果确实要使用git daemon
和git
协议,请改为将 URL 更改为git://<server>:2222/...
。请注意,git
协议不提供任何身份验证、加密或授权机制,并且公开的存储库将完全公开。
> git-daemon 不说 SSH 协议,它说简单的 git 协议;协议的 URL 必须以git://
开头,而不是ssh://
。 即您的服务器的 URL 是git://192.168.201.84:2222/
.
要通过 ssh 使用 git 存储库,您需要一个 ssh 服务器。所以你似乎有一个:在 gitproxy@192.168.201.84;好的,那么存储库的 URL 是ssh://gitproxy@192.168.201.84/home/gitproxy/git
.同一 URL 的另一个"类似 scp"的语法是gitproxy@192.168.201.84:git
。