Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从windows将git推送验证集作者设置为未知_Git_Ssh_Msysgit_Gitosis_Tortoisegit - Fatal编程技术网

从windows将git推送验证集作者设置为未知

从windows将git推送验证集作者设置为未知,git,ssh,msysgit,gitosis,tortoisegit,Git,Ssh,Msysgit,Gitosis,Tortoisegit,我最近在Ubuntu服务器上的私人网络中安装了一个新的gitosis。网络中的所有其他客户端都是Windows XP计算机,只有一个Linux客户端除外 我在gitosis.conf中有以下设置: [group MyProjectTeam] writable = MyProjectRepo members = user1 user2 user3 我还在keydir中放置了user1.pub、user2.pub和user3.pub密钥文件。这些密钥是在Ubuntu服务器上使用ssh keygen

我最近在Ubuntu服务器上的私人网络中安装了一个新的gitosis。网络中的所有其他客户端都是Windows XP计算机,只有一个Linux客户端除外

我在gitosis.conf中有以下设置:

[group MyProjectTeam]
writable = MyProjectRepo
members = user1 user2 user3
我还在keydir中放置了user1.pub、user2.pub和user3.pub密钥文件。这些密钥是在Ubuntu服务器上使用ssh keygen生成的,并分发给相应的用户。公钥副本放在keydir中

前两个用户是Windows XP用户,他们使用msysgit+TortoiseGit与存储库一起工作,一个用户在Linux机器上使用默认命令行版本的git访问存储库

现在一切都设置好了,每个人都可以做任何他们希望做的事情,他们可以拉,推,提交-一切看起来都很好,除了我们检查日志

在Linux机器上使用user3,我尝试了“git log”命令,并得到以下输出:

commit 1b249e239d270b814aab31eed7dc6f04ceceba32
Author: User3 <Admin@ubuntu-server.(none)>
Date:   Fri Sep 11 07:26:58 2009 +0530

    modifed by user3

commit 646f8b11a715273dc26280fc1da2507c997f981c
Author: unknown <Admin@.(none)>
Date:   Fri Sep 11 07:10:56 2009 +0530

    modified by user2

commit 9f86dc7a6bfafc1c1e520d6de3dac7c613ac85cb
Author: unknown <Admin@.(none)>
Date:   Fri Sep 11 06:50:22 2009 +0530

    modified

commit b1a3b64005795f9592aae05c422c70a03dbb9b58
Author: admin <Admin@ubuntu-server.(none)>
Date:   Fri Sep 11 06:18:54 2009 +0530

    test file added by admin
提交1b249e239d270b814aab31eed7dc6f04ceceba32
作者:User3
日期:2009年9月11日星期五07:26:58+0530
由user3修改
提交646f8b11a715273dc26280fc1da2507c997f981c
作者:不详
日期:2009年9月11日星期五07:10:56+0530
由user2修改
提交9F86DC7A6BFAFC1E520D6DE3DAC7C613AC85CB
作者:不详
日期:2009年9月11日星期五06:50:22+0530
被改进的
提交B1A3B64005795F9592AAE05C42C70A03DBB9B58
作者:管理员
日期:2009年9月11日星期五06:18:54+0530
管理员添加的测试文件
这是不对的。这个日志应该可以告诉我谁是Push的作者。我的感觉是,它为Linux上的用户提供了正确的值,因为他们的用户名和电子邮件也被添加到Linux用户信息中,但对于windows客户端,它不是真的,因此他们的名称显示不正确。但即使我在Windows机器上修复了名称,这也可能会因为模仿其他用户名而受到影响,为了避免这种情况,我不想依赖用户名

我希望SSH文件中提供的名称出现在那个里,或者将推送时使用的SSH文件的名称添加为作者

也许git的hook pre-receive可以在这里提供帮助,但我不知道如何使用它。。。有人能帮忙吗

谢谢, 拉凯什

更新:

谢谢你的回答

alexandrul,我没有设置全局设置,这是因为我希望每个用户的信息都能被真实地记录下来

静噪,你是对的,我可以看到用户省略了他们的用户名,但我如何强制他们这样做。我可以告诉他们配置他们的本地项目并设置用户名和电子邮件地址,但如果有人使用假用户名或试图使用其他人的用户名和电子邮件地址,基本上是试图扮演其他人呢

这就是为什么我认为为什么不记录私钥文件的名称,例如,我已经将user1的文件名设置为user1.ppk,user2的文件名设置为user2.ppk。在这种情况下,即使有人试图扮演其他人,他们也不会成功,因为用于检查的密钥名称会告诉我真相

有什么想法吗

问候,, 拉凯什

更新2:

谢谢你的帮助。安静,谢谢你花时间解释这么多细节。我认为电视的蜘蛛网有很多信息,现在正在阅读

到目前为止,我已经做了一件事:要求我的用户使用更新他们的配置来包括用户名和电子邮件地址。但我解决了这个问题,因为我不能追逐每一个用户


我想要像SVN+SSH这样的东西,我们在密钥文件中使用tunned username,并使用SVN进行记录。

您是否尝试使用以下命令设置用户名:

// global settings
$ git config --global user.name "FirstName LastName"
$ git config --global user.email "user@example.com"


编辑:全局设置存储在主环境变量指定的文件夹中,对于每个Windows用户,该文件夹应是唯一的,因此您将拥有有关登录用户的真实数据。

问题在于您的Windows用户。如果你要求他们向你提供

$ git config --list 
在项目文件夹中运行时,您可能会看到他们忽略了设置用户名和电子邮件

要求他们再次在项目文件夹中运行alexandrul建议的命令,因为如果不绕过gitosis的设计目的,即在没有外壳帐户的情况下提供安全的git访问,那么在服务器端就没有什么可以做的了

如果您将来可能有其他windows用户,可以使用预接收钩子来检查有效的用户名和电子邮件,以避免出现这种情况。它所需要做的就是拒绝推送,并显示一条消息,让用户先进行设置


有关最后一点的帮助,请参见。

进一步扩展alexandrul的amswers,当用户访问存储库时,有几个过程正在进行

  • 用户通过SSH作为用户“Git”(或您的gitosis用户被称为什么)连接,使用其密钥对进行身份验证。将其视为用户“Git”,具有多个访问主机的密钥
  • 用户“Git”有一个受限帐户,只能访问由gitosis admin管理的存储库
  • Gitosis在/keydir中使用公钥的名称,该名称与连接的用户密钥相匹配,并且只允许访问他们所属的存储库。这些名称是任意的,只是用来标识密钥的标记
  • Git既不知道也不关心连接的用户,只是在gitosis的控制下在主机上以用户“Git”的身份本地应用提交
  • 真正的git用户在commit中标识自己,这与SSH身份验证名称无关
正如您所发现的,gitosis只能验证用户是否有权连接,并且他们只能访问他们所属的存储库。它不会在提交中检查有效名称,一个用户完全可以在存储库中模拟另一个用户,只要他们有访问权限

用户不会滥用系统,这是一个隐含的信任问题
$ git config --list