7

我在 CentOS 5.9 服务器上安装 gitolite。我已经创建了 git 用户,然后在su - git我设法将我的公钥放入 ~/.ssh/ 目录之后,我已经成功地从 github 克隆了 gitolite repo 并运行了gitolite/install -ln. 下一步是运行 gitolite 设置。

git@hostname [~]# gitolite setup -pk $HOME/.ssh/micha.pub
Initialized empty Git repository in /home/git/repositories/gitolite-admin.git/
Initialized empty Git repository in /home/git/repositories/testing.git/
FATAL: fingerprinting failed for '/tmp/Q3pnE4WVbu'

谷歌搜索和在 SO 上的搜索并没有帮助我解决这个FATAL错误,我现在受到了阻碍。

我应该在运行设置之前自定义 gitolite.conf 文件吗?我一直按照http://gitolite.com/gitolite/progit.html的说明进行操作,因为对于像我这样的新手来说,它们比普通的 gitolite 文档更容易理解。但是,这些说明没有提及自定义 .conf 文件。


更新: 我尝试生成一个新密钥,但仍然失败:

git@hostname [~]# ssh-keygen -t rsa -C "Gitolite Admin Access (not interactive)" -P "" 
Generating public/private rsa key pair.
Enter file in which to save the key (/home/git/.ssh/id_rsa): /home/git/.ssh/micha
/home/git/.ssh/micha already exists.
Overwrite (y/n)? y
Your identification has been saved in /home/git/.ssh/micha.
Your public key has been saved in /home/git/.ssh/micha.pub.
The key fingerprint is:
33:b6:62:8b:b9:58:07:7a:71:6a:02:a5:ff:7e:c3:3a Gitolite Admin Access (not interactive)
git@hostname [~]# gitolite setup -pk $HOME/.ssh/micha.pub
Initialized empty Git repository in /home/git/repositories/gitolite-admin.git/
Initialized empty Git repository in /home/git/repositories/testing.git/
FATAL: fingerprinting failed for '/tmp/pUKqewb66w'

我也尝试用$HOME完整路径替换,以防万一su - git混淆了。我的 ssh 安装有问题吗?不确定我使用 ssh 连接到该服务器时会怎样。


更新: 事实证明 gitolite 保留了我之前尝试设置但失败的公钥。然后我删除了所有的 repos、gitolite 源目录、~/bin 中的符号链接和 .gitolite 目录,并再次开始安装过程。我从 github 克隆了 gitolite repo,在删除了我之前尝试使用的所有其他密钥后生成了一个新密钥。然后我跑了gitolite install -ln,最后

git@hostname [~]# gitolite setup -pk $HOME/admin.pub
Initialized empty Git repository in /home/git/repositories/gitolite-admin.git/
Initialized empty Git repository in /home/git/repositories/testing.git/
FATAL: fingerprinting failed for '/tmp/tsIx4cKWHj'

仍然失败。

4

9 回答 9

8

如果您从 puttykeygen 等获取 pub 密钥。它将与标题等多行

---- BEGIN SSH2 PUBLIC KEY ----
Comment: "test@example.com"
startofkeylines
....
endofkey==
---- END SSH2 PUBLIC KEY ----

删除 --- begin 和 end 行,以及 Comment: 行。将所有关键线放在一行中。并以 ssh-rsa 为前缀,如下所示:

ssh-rsa startofkeylines....endofkey==

这对我有用。

于 2014-04-05T09:31:57.347 回答
3

gitolite 正在对 .ssh 目录中的所有密钥进行指纹识别 - 包括 authorized_keys 文件。从 .ssh 目录和 authorized_keys 文件中删除任何不需要或损坏的密钥。

于 2013-04-24T04:09:57.980 回答
2

我遇到了同样的问题。原来,在复制粘贴期间,我在我的一个键中包含了一个换行符。我花了一些时间才发现它...

于 2013-11-25T13:28:24.380 回答
2

你写道:“事实证明 gitolite 保留了我之前尝试设置但失败的公钥。”

我有同样的问题。我收到了错误:

致命:“keydir/jsmith.pub”的指纹识别失败

我在客户端删除了失败的密钥,并做了一个 git push,但仍然是同样的问题。因此我必须登录到 gitolite 服务器并运行以下命令:

rm ~/.gitolite/keydir/jsmith.pub
gitolite setup

这解决了问题。这是有效的,因为根据 gitolite 文档,“来自此推送的 pubkey 文件已检出到 ~/.gitolite/keydir”。好吧,如果发生了一些致命错误,那么 pub 键将不会放在正确的位置。因此,您甚至可以正确格式化您的 ssh 密钥,但它仍然不会被写入。

于 2015-11-09T21:58:48.730 回答
1

正如我之前提到的,这意味着 ssh 密钥尚未正确生成。

尝试:

ssh-keygen -t rsa -f "${H}/.ssh/micha" -C "Gitolite Admin access (not interactive)" -q -P ""

OP mwotton 报告从任何先前的 ssh 密钥中清除 ~/.ssh 是解决方案。
这是因为该ssh-authkeys.fp_file()函数是使用 find调用的:

chomp( my @pubkeys = `find keydir/ -type f -name "*.pub" | sort` );

因此,它可以获取已经存在于~/.ssh.

于 2013-04-22T18:34:45.293 回答
1

我已经尝试了所有的密钥再生、gitolite 重新安装、清除所有密钥文件等,但都没有成功,直到我开始查看 gitolite 的 Git 历史记录。

问题是 github & google.code repos 上的 master 分支被破坏了。我在指纹问题消失时检查了最后一个稳定版本 v3.6.4。我想我可以发现最近的一个提交会影响这一点。

于 2016-01-14T15:24:03.107 回答
1

我遇到的问题是,在版本 v6.8 中或附近的 openssh 更改了指纹的默认密码(ssh-keygen -lf path-to-key),因此现在必须显式传递密码类型(-E md5)才能获得遗留行为。查看 CHANGES 文件显示 gitolite v3.6.5 将“正确处理新样式的 ssh 指纹识别(感谢 Robin Johnson)”。gitolite 的升级为我解决了这个问题。

于 2017-04-23T23:00:08.100 回答
0

对我来说,我通过以用户身份运行gitolite命令来使其工作root。我创建了一个git用户帐户(发现它需要是一个可以登录的帐户......即没有/bin/falsein /etc/passwd)。

于 2014-11-02T05:40:24.027 回答
0

我将 gitolite 从 v2 升级到 v3,运行安装并设置管理员密钥

然后强制推送配置存储库,现在所有问题都已修复。

于 2016-05-21T07:54:54.613 回答