git错误“无法在passwd文件中查找当前用户:没有这样的用户” - 这是什么意思?

时间:2013-11-28 17:35:18

标签: git ssh git-push

我将git repo克隆到远程服务器,使用ssh与之通信。使用git fetch remote有效,但是当我输入git push remote时,我得到了这个输出:

Counting objects: 242, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (184/184), done.
Writing objects: 100% (215/215), 238.00 KiB | 0 bytes/s, done.
Total 215 (delta 58), reused 0 (delta 0)
fatal: unable to look up current user in the passwd file: no such user
fatal: The remote end hung up unexpectedly
fatal: The remote end hung up unexpectedly

我的服务器管理员说我的ssh用户是在chroot-jail中配置的。可以做些什么来解决这个错误?

3 个答案:

答案 0 :(得分:4)

事实证明这是"修复"在2.6.5中 - 不再需要对许多git操作进行适当的识别。

Here's the commit in question

提交的要点:

  

ident:在非严格模式下放松getpwuid错误

     

如果用户未指定身份,我们必须转向   getpwuid()找到用户名或gecos字段,我们马上就死了   当getpwuid失败时(例如,因为用户不存在)。这是   可以进行提交,我们已经设置了IDENT_STRICT并且想要   保佑虚假输入。

     

但是对于像reflog这样的东西,身份是最好的努力",它   可能是痛苦的。例如,即使运行" git clone"使用UID   不在/ etc / passwd会导致git barfing,因为我们无法做到   找到要放入reflog的标识。

     

我们可以改为回退,而不是在xgetpwuid_self中死亡   价值,并设置"虚假"旗。对于电子邮件中的用户名,我们   已经有一个" default_email_is_bogus"旗。对于名称字段,我们   引入(并检查)匹配的" default_name_is_bogus"旗。作为一个   奖金,这意味着你现在可以得到平常的"告诉我你是谁"忠告   而不只是一个"没有这样的用户"错误。

新的xgetpwuid_self现在实现如下:

static struct passwd *xgetpwuid_self(int *is_bogus)
{
    struct passwd *pw;

    errno = 0;
    pw = getpwuid(getuid());
    if (!pw) {
        static struct passwd fallback;
        fallback.pw_name = "unknown";
#ifndef NO_GECOS_IN_PWENT
        fallback.pw_gecos = "Unknown";
#endif
        pw = &fallback;
        if (is_bogus)
            *is_bogus = 1;
    }
    return pw;
}

答案 1 :(得分:3)

wrapper.c

返回此错误消息
struct passwd *xgetpwuid_self(void)
{
        struct passwd *pw;

        errno = 0;
        pw = getpwuid(getuid());
        if (!pw)
                die(_("unable to look up current user in the passwd file: %s"),
                 errno ? strerror(errno) : _("no such user"));
        return pw;
}

这意味着common library getpwuid函数在/ etc / passwd中找不到用于调用git进程的用户帐户的密码条目

就像nscd service不知道如何解决某些服务一样。

请管理员仔细检查帐户监狱目录(我们称之为$D),如this article所示。特别是它的$D/etc文件夹:

cp -fv /etc/{group,prelink.cache,services,adjtime,shells,gshadow,shadow,hosts.deny,localtime,nsswitch.conf,nscd.conf,prelink.conf,protocols,hosts,passwd,ld.so.cache,ld.so.conf,resolv.conf,host.conf} $D/et

答案 2 :(得分:0)

问题在于git无法识别您的身份。这是由于缺少.gitconfig文件,该文件应存在于主目录中。 (请ls -la〜验证它是否丢失)

修复:

git config --global user.name "FIRST_NAME LAST_NAME" 
git config --global user.email "OUR_NAME@example.com" 

这将生成该文件并解决错误。