Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.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/4/macos/8.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
Git身份验证-作为新用户拉动_Git_Git Pull - Fatal编程技术网

Git身份验证-作为新用户拉动

Git身份验证-作为新用户拉动,git,git-pull,Git,Git Pull,以下命令集工作正常 $ mkdir carboncake $ cd carboncake $ git init $ git remote add origin gitosis@myserver.net:repositories/carboncake.git $ git pull 但当我试着以另一个用户的身份拉动时 $ mkdir carboncake $ cd carboncake $ git init $ git remote add origin mithun@myserver.net:

以下命令集工作正常

$ mkdir carboncake
$ cd carboncake
$ git init
$ git remote add origin gitosis@myserver.net:repositories/carboncake.git 
$ git pull
但当我试着以另一个用户的身份拉动时

$ mkdir carboncake
$ cd carboncake
$ git init
$ git remote add origin mithun@myserver.net:repositories/carboncake.git 
$ git pull
我犯了以下错误

fatal: 'repositories/carboncake.git' does not appear to be a git repository
fatal: The remote end hung up unexpectedly
my
gitosis.conf
包含

[gitosis]

[group team]
writable = sweepshots
members = git_id_rsa

[group gitosis-admin]
writable = gitosis-admin
members = git_id_rsa


[repo carboncake]
description = A brand new app by Mithun.
owner = Mithun P

[group carboncake]
writable = carboncake
members = mithun @core
keydir
包含
git\u id\u rsa.pub KEY-----.pub mithun.pub mithun-rsa-KEY-20110427.pub

用户的
.ssh
目录包含

mithun@testserver:~$ ls .ssh/
id_rsa  id_rsa.pub  mithun_rsa  mithun_rsa.pub
--更新

我尝试了
$git远程添加源代码mithun@myserver.net:carboncake.git
也是,但错误相同


实际上,carboncake.git位于
/srv/gitosis/repositories/carboncake.git
mithun@myserver.net

通过使用
mithun@myserver.net
,您完全绕过了gitosis,因为正确的url将涉及安装gitolite的“
git
”用户。
每个gitosis命令都会涉及相同的“git”用户:
gitosis@myserver.net
(假设此处有“gitosis”账户)

此外,您不必指定回购的完整路径:

 git remote add origin gitosis@myserver.net:carboncake.git

为了给@VonC(完全正确)的答案增加一点简单明了的英语

gitosis(不再处于活动开发中,您应该使用gitolite,但这个答案适用于这两个)将每个用户的公钥存储在(您的情况下)
~gitosis/.ssh/authorized_keys
中。当用户ssh访问帐户
gitosis
时,ssh执行加密握手,在授权密钥文件中找到与提供的密钥匹配的一行,并执行该行所说的任何操作。如果查看该authorized_keys文件,每一行都提供了一个在该用户登录时调用的命令,这是对gitosis进程的调用,其中包含有问题的用户的名称

因此,每个用户实际上都是ssh'ing到同一个
gitosis
“machine”帐户,但是他们ssh到那里的密钥会激发gitosis,就像他们是用户一样。这就是gitosis如何知道它正在与哪个用户通话,即使他们登录了名为
gitosis
的同一个“机器”帐户


因此,您希望跟踪到gitosis的每个本地回购都需要获得一个格式为
gitosis@your.server:.git

这是正常的:正如我在回答中所解释的,您通过使用mithun用户尝试ssh绕过gitosis。您需要始终使用gitosis user,但由于git在其
$HOME/.ssh/id_rsa.pub
中获取了该用户的公钥,因此会检测到该用户。这就是作为gitosis的不同用户克隆/获取/推送repo所需的:您的主页发生了更改,发送给gitosis的公钥也发生了更改。但是用于ssh会话的帐户保持不变。是否不能作为不同的用户签出?但是为什么gitosis.conf文件中有组和成员呢?@Mithun:这是绝对可能的,您只需要使用$HOME/.ssh/id_rsa.pub特定于该用户的公共ssh密钥作为用户登录,并在gitosis repo中发布所述公钥。Gitosis然后将ssh请求的远程用户标识为所述不同的用户。但是ssh请求本身始终作为“gitosis”帐户完成。除非你想完全绕过关节炎。只有gitosis帐户包含包含所有用户公钥的
ssh/authorized_keys
文件(以及调用gitosis脚本的强制命令)。@Mithun:请参阅gitosis自述:“目前,
gitosis
使用
HOME
环境变量来定位文件的写入位置。如果在不使用
-H
的情况下使用
sudo-u
sudo
将保留原来的
HOME
值,这将导致故障。稍后会有一个解决方法,但是现在,如果要对帐户执行sudo操作,请始终记住使用
-H
。注意,您可以在
$HOME/.ssh/config
中指定另一个公钥,这样一个用户就可以使用两个不同的身份进行连接。@Jan:但这将假定定义一个
~/.ssh/config
文件,您可以在其中命名这两个ssh会话,每个会话都通过
IdentityFile
显式引用一个私钥。这样,在使用ssh:
ssh-mysshssession:mysever/..
时,您不必使用任何外来选项,
mysshssession
引用gitosis用户、gitosis服务器和所需的私钥/公钥。Gitosis(如gitolite)基于****以:a/通过公钥对远程用户进行身份验证,b/始终调用Gitosis脚本进行授权,拒绝用户使用交互式ssh会话作为“Gitosis”,并完全保护存储库(特别是如果Gitosis帐户的homedir在700中!)。