gitolite 设置变得致命:'/tmp/Q3pnE4WVbu' 的指纹识别失败

Posted

技术标签:

【中文标题】gitolite 设置变得致命:\'/tmp/Q3pnE4WVbu\' 的指纹识别失败【英文标题】:gitolite setup getting FATAL: fingerprinting failed for '/tmp/Q3pnE4WVbu'gitolite 设置变得致命:'/tmp/Q3pnE4WVbu' 的指纹识别失败 【发布时间】:2013-04-15 14:46:41 【问题描述】:

我在 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'

Google 搜索和 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'

仍然失败。

【问题讨论】:

【参考方案1】:

如果您从 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==

这对我有用。

【讨论】:

或者,如果您在 PuTTYgen 中加载 PPK 文件或生成新密钥,则在框中有一个格式正确的公钥,其标题为:“用于粘贴到 OpenSSH 授权密钥文件的公钥”。使用它可以消除在您手动编辑公钥时损坏公钥的可能性。【参考方案2】:

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

【讨论】:

优秀。 +1。我已经在我的文档中记录了您的答案,并参考了解释该行为的 gitolite 代码。 谢谢 :) 我已接受您的回答,因为它包含故障点和解决方案以及更好的技术解释。 嗨!当您说“从 .ssh 目录中删除任何损坏的密钥”时,您是指我们用户的 .ssh 目录吗? (来自我们管理 repo)或 gitolite 用户服务器的 .ssh 目录? 它应该是 gitolite 用户的文件夹 - gitolite 用户不应该有普通用户。 Gitolite管理gitolite用户的认证,系统不管理。【参考方案3】:

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

【讨论】:

【参考方案4】:

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

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

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

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

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

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

【讨论】:

【参考方案5】:

正如我mentioned before,这意味着 ssh 密钥尚未正确生成。

试试:

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

OP mwottonreports 从任何先前的 ssh 密钥中清除 ~/.ssh 是解决方案。 这是因为ssh-authkeys.fp_file()函数被称为with a find:

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

因此它可以抓取之前(可能已损坏)已在 ~/.ssh 中的密钥。

【讨论】:

如果我在服务器上运行它,这将生成对。然后我需要将私钥传输到我的工作站。有没有办法告诉我的本地 git 客户端只为这个远程使用该密钥文件? 我也确实看到了那个较早的答案,但是由于它已经初始化了存储库,我认为密钥一定没问题。在早期的尝试中,它甚至在 repos 被初始化之前就因指纹错误而失败,所以我尝试了几个不同的密钥选项并做到了这一点。 @mwotton 您只需将michamicha.pub 复制到本地%HOME%\.ssh (windows) 或~/.ssh (unix),并声明一个配置文件,该文件将允许您使用该特殊帐户用于gitolite -admin repo(同时创建一对新的密钥以将 gitolite 用作用户):请参阅***.com/a/10909791/6309 好的,所以我在 repo 的 .git 文件夹中的配置文件中指定密钥。但是我仍然遇到问题 - 问题已更新。 @mwotton 什么?在.git 文件夹中? config 文件与 git 无关:它是一个 ssh 配置文件,位于 ~/.ssh(在 客户端 端):完整示例参见 ***.com/questions/10906633/…。【参考方案6】:

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

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

【讨论】:

【参考方案7】:

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

【讨论】:

【参考方案8】:

对我来说,我通过 notroot 用户身份运行 gitolite 命令使其工作。我创建了一个git用户账号(发现需要是可以登录的账号……也就是说/etc/passwd中没有/bin/false)。

【讨论】:

root 运行类似 gitolite 的东西有点冒险。通常这表示权限错误。如果您确定您的权限是正确的,如何创建具有登录能力的git 用户?【参考方案9】:

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

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

【讨论】:

以上是关于gitolite 设置变得致命:'/tmp/Q3pnE4WVbu' 的指纹识别失败的主要内容,如果未能解决你的问题,请参考以下文章

CentOS系统搭建gitolite服务

基于linux的Git平台的部署与Gitolite使用

Ubuntu 服务器上的 Gitlab+Gitolite:为啥它不能与 Windows 客户端一起使用?

从登台服务器连接到 GitoLite 时出错 - ECONNREFUSED 部署错误

安装 Gitolite 时发生错误

gitolite 如何将远程用户映射到存储库用户?