来自AFS安装的主目录的SSH公钥/私钥认证

时间:2012-01-24 17:58:44

标签: macos ssh file-permissions gitolite

我正在尝试从具有AFS安装的主目录的OS X计算机设置对gitolite管理的git服务器的访问。 AFS会忽略Unix权限,根据我对问题的理解,AFS中有一个OS X权限伪造修复程序,它将所有权限设置为666,以便Finder仍然可以在本地打开文件。

当您尝试对git服务器进行身份验证时,您将获得

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @ 
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
Permissions 0666 for '$HOME/.ssh/id_dsa' are too open

因为ssh认为私钥太明显了(因为权限实际上是由AFS ACL管理的)。 chmod对本地unix权限没有影响。

这是一个关于我发现的问题的Nabble线程没有多大帮助:

http://old.nabble.com/User-friendly-Mac-OS-X-patch-causes-SSH-hardship-tt8851573.html#a8851573

有没有人知道一项工作?反正有没有把.ssh的权限伪装成像700这样的东西?

2 个答案:

答案 0 :(得分:0)

您可以尝试修改/ etc / ssh_config文件以使用指定的标识文件。插入这样的东西,也许:

Host <gitolite-server-host>
  IdentityFile <identity-file-location> # this defaults to your ~/.ssh/id_rsa
  User <gitolite-username>

答案 1 :(得分:0)

下面是6.6版OpenSSH ssh实用程序的相关源代码。基本上,如果文件由运行ssh的用户拥有,则ssh要求密钥文件为模式0600(或更具限制性)。如果该文件由某个其他ID拥有,则它可以具有允许其被读取的任何权限。

因此,假设您可以使用属于其他帐户的密钥文件来解决此限制。我意识到这不是很有帮助。

如果有人具备必要的技能,那么更实际的解决方案是从portable source code构建ssh的自定义版本。

    if (fstat(fd, &st) < 0)
            return 0;
    /*
     * if a key owned by the user is accessed, then we check the
     * permissions of the file. if the key owned by a different user,
     * then we don't care.
     */
#ifdef HAVE_CYGWIN
    if (check_ntsec(filename))
#endif
    if ((st.st_uid == getuid()) && (st.st_mode & 077) != 0) {
            error("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
            error("@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @");
            error("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
            error("Permissions 0%3.3o for '%s' are too open.",
                (u_int)st.st_mode & 0777, filename);
            error("It is required that your private key files are NOT accessible by others.");
            error("This private key will be ignored.");
            return 0;
    }
    return 1;