强制 ssh 忽略 id_rsa 权限

msh*_*yeb 15 permissions ssh

我有一个非常具体的要求,要求多个用户使用一个私钥。我知道这有多糟糕。问题是,如果身份文件的权限允许(在我的情况下为 444),ssh 将简单地忽略它们。

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @        
WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0444 for '/var/vendor/id_rsa' are too open. It is
recommended that your private key files are NOT accessible by others.
This private key will be ignored.
Run Code Online (Sandbox Code Playgroud)

从手册页

包含用于身份验证的私钥。这些文件包含敏感数据,用户应该可以读取但其他人无法访问(读/写/执行)。如果其他人可以访问,ssh 将简单地忽略私钥文件。

有没有办法强制 ssh 使用密钥而不检查权限?

小智 14

正如其他答案所提到的,似乎无法强制 SSH 忽略该选项。检查发生在authfile.c函数sshkey_perm_ok 中

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 SSH_ERR_KEY_BAD_PERMISSIONS;
}
Run Code Online (Sandbox Code Playgroud)

如果无法更改密钥文件的权限,则解决方案是下载 OpenSSH 源代码,从代码中删除该检查并重新构建它。

  • 这种权限检查已经严重过时了(我的意思是,现在谁心智正常,将不受保护的私钥公开保存,而不是加密的容器等?),应该从源代码中删除。我想知道为什么没有 OpenSSH 的分支而不进行这种愚蠢的检查。好消息是,在 Windows 上,您可以将所有密钥放入格式化为 FAT32 文件系统的加密容器中,而无需考虑权限问题。 (5认同)