【问题标题】:ssh "permissions are too open" errorssh“权限太开放”错误
【发布时间】:2012-03-05 10:59:11
【问题描述】:

我的 Mac 出现问题,无法再在磁盘上保存任何类型的文件。 我不得不重新启动 OSX lion 并重置文件和 acl 的权限。

但是现在当我想提交一个存储库时,我从 ssh 收到以下错误:

Permissions 0777 for '/Users/username/.ssh/id_rsa' are too open.
It is recommended that your private key files are NOT accessible by others.
This private key will be ignored.

我应该为 id_rsa 文件赋予什么权限级别?

【问题讨论】:

  • 感谢您提出问题。对于编写此错误消息的人来说,更好的体验是建议一些有效的配置(例如下面建议的 600 或 400)。没有编写足够完整的有用错误消息的程序员多年来一直在折磨我们所有人!
  • FWIW,这与在 sshd 服务器上启用 StrictModes 有关,来自 man 页面:“StrictModes 指定 sshd(8) 是否应检查文件模式和用户的所有权接受登录之前的文件和主目录。” - 您可以禁用此功能,但不建议这样做。
  • 我的操作系统显示It is required,而不是It is recommended。也许我的操作系统更新(2020 年),这就是原因。
  • 也适用于其他设置,例如Permissions 640 ... are too open和其他操作系统,例如Unix以及Linux
  • 很遗憾,这个问题不能再编辑了。 Title cannot contain "ssh "permissions are too open" error" 它告诉我“请提供一个总结您的问题的标题。如需帮助,请参阅:How do I ask a good question?” - 我想建议并立即分享。

标签: permissions ssh


【解决方案1】:

0600 是我的设置(并且它正在工作)

【讨论】:

    【解决方案2】:

    密钥只能由您读取:

    chmod 400 ~/.ssh/id_rsa
    

    如果您需要对 Key 进行读写:

    chmod 600 ~/.ssh/id_rsa
    

    600 看起来也不错(实际上在大多数情况下更好,因为您以后无需更改文件权限即可对其进行编辑)。

    手册页中的相关部分 (man ssh)

     ~/.ssh/id_rsa
             Contains the private key for authentication.  These files contain sensitive 
             data and should be readable by the user but not
             accessible by others (read/write/execute).  ssh will simply ignore a private 
             key file if it is              
             accessible by others.  It is possible to specify a
             passphrase when generating the key which will be used to encrypt the sensitive 
             part of this file using 3DES.
    
     ~/.ssh/identity.pub
     ~/.ssh/id_dsa.pub
     ~/.ssh/id_ecdsa.pub
     ~/.ssh/id_rsa.pub
             Contains the public key for authentication.  These files are not sensitive and 
             can (but need not) be readable by anyone.
    

    【讨论】:

    • 400 太低,因为这使得您自己的用户无法写入。实际上建议使用 600,因为它允许所有者读写而不仅仅是读取。
    • 我今天发现有时 400 是相关的。假设您有一个authorized_keys 文件,其中包含no-pty et al 功能集。如果文件是可写的,用户实际上可以覆盖authorized_keys 文件并获得交互式shell 访问权限!需要记住的一点,尽管对于大多数人来说肯定不是一般情况。
    • AWS 实际上在他们的网站上推荐了 400 权限。这就是我在 OS X 上所做的,并且成功了。
    • 这绝对有效并且更安全。唯一的缺点是您必须将其更改为 600 才能进行编辑。对于 id_rsa 和 id_rsa.pub,我怀疑这很重要,因为您很少会编辑这些文件,但对于 authorized_keys,这可能很烦人。最好了解权衡并适当配置每个系统。
    • 我想这也取决于您编辑它们的频率。许多人设置它并忘记它,因此 400 对他人和您自己的行为会更安全;必要时修改为600。如果它是您工作流程的一部分并且您精通 ssh,那么它可能会成为不断更改权限的更多障碍。
    【解决方案3】:

    对密钥的0x00 权限要求有一个例外。如果密钥由 root 拥有并且由包含用户的组拥有,则它可以是 0440,并且该组中的任何用户都可以使用该密钥。

    我相信这适用于集合 0xx0 中的任何权限,但我还没有测试每个版本的每个组合。我在 CentOS 6 上尝试了 06605.3p1-84,并且该组不是用户的主要组而是辅助组,并且工作正常。

    这通常不会针对某人的个人密钥,而是针对用于自动化的密钥,在您不希望应用程序能够弄乱密钥的情况下。

    类似的规则适用于.ssh 目录限制。

    【讨论】:

      【解决方案4】:

      我在 EC2 上使用 VPC 并收到相同的错误消息。我注意到我使用的是公共 DNS。我将其更改为私有 DNS 和 vola!成功了……

      【讨论】:

      【解决方案5】:

      什么对我有用

      chgrp 用户文件夹

      chmod 600 文件夹

      【讨论】:

      • chgrp: grupo inválido: «用户»
      • 我试过了,但总是抛出'无效组`:用户'',为什么?使用 Windows 10,powershell
      • @user1418225 'Users' 取决于区域设置,请在stackoverflow.com/a/28647713/11154841 尝试 thehouse 的答案。
      【解决方案6】:

      在Windows 8.1中使用Cygwin,需要运行一个命令:

      chgrp Users ~/.ssh/id_rsa
      

      那么这里贴的解决方案就可以应用了,400或者600都可以。

      chmod 600 ~/.ssh/id_rsa
      

      Reference here

      【讨论】:

      • 取决于语言环境。我不得不运行“chgrp Użytkownicy ~/.ssh/id_rsa”,因为“用户”错误地没有这样的组。
      • 我也必须这样做。我的 cygwin 目录位于默认位置 (C:\cygwin64),因此它可能继承了权限。奇怪的是,这在我拥有的其他笔记本电脑上没有发生。
      • @Marcos 我添加了一个适用于任何地区的答案:stackoverflow.com/a/28647713/67013
      • Windows 10。仅使用第二个命令。像魅力一样工作。
      • 请注意,对于其他语言的安装,“用户”组具有其他标识符。
      【解决方案7】:

      AFAIK 的值是:

      • 700 为隐藏目录.ssh 密钥文件所在的位置

      • 600 用于密钥文件 id_rsa

      【讨论】:

        【解决方案8】:

        适用于 Windows 8.1 的独立于语言环境的解决方案是:

        chgrp 545 ~/.ssh/id_rsa
        chmod 600 ~/.ssh/id_rsa
        

        GID 545 是一个special ID,它始终指代“用户”组,即使您的语言环境使用不同的词来表示用户。

        【讨论】:

          【解决方案9】:

          这里有有趣的消息。 如果您的私钥太开放,操作系统足够聪明,可以拒绝远程连接。它了解 id_rsa 权限完全开放(读取,任何人都可以编辑)的风险。

          {一个人可以先换锁,然后用他已经拥有的钥匙打开它}

          cd ~/.ssh
          chmod 400 id_rsa
          

          在多台服务器(非生产)上工作时,我们大多数人都觉得需要使用 ssh 连接远程服务器。一个好主意是有一段应用程序级代码(可能是使用 jsch 的 java)来在服务器之间创建 ssh 信任。这种方式连接将是无密码的。万一安装了 perl - 也可以使用 net ssh 模块。

          【讨论】:

            【解决方案10】:

            我在玩 Ansible 时遇到了这个错误。为了解决这个问题,我已将私钥的权限更改为 600。它奏效了!

            chmod 600 .vagrant/machines/default/virtualbox/private_key
            

            【讨论】:

              【解决方案11】:

              在 Windows 10 上,cygwin 的 chmodchgrp 对我来说还不够。我不得不

              • 右键单击文件
              • -> 属性
              • -> 安全性(选项卡)
              • 并删除除我的活动用户之外的所有用户和组。

              【讨论】:

              • 这是唯一有效的解决方案 :) 谢谢你节省了我的时间
              • 我发现,在这样做之后,我也可以从普通的 Windows 命令提示符执行 ssh。无需使用 Cygwin。太好了!
              【解决方案12】:

              提供400权限, 执行以下命令

              chmod 400 /Users/username/.ssh/id_rsa
              

              【讨论】:

                【解决方案13】:

                对于 Win10 需要将您的密钥移动到用户的主目录 对于 linuxlike 操作系统,您需要 chmod700600 等。

                【讨论】:

                • 对于 Win10 需要将您的密钥移动到用户家中 - 这非常有效。我正在尝试提供密钥的完整路径并弄乱权限-没有用。
                【解决方案14】:

                对我来说(使用适用于 Windows 的 Ubuntu 子系统)错误消息更改为:

                 Permissions 0555 for 'key.pem' are too open
                

                使用 chmod 400 后。 事实证明,使用 root 作为默认用户是原因。

                使用 cmd 更改:

                 ubuntu config --default-user your_username
                

                【讨论】:

                  【解决方案15】:

                  我的 Windows 10 出现错误,因此我将权限设置为以下,并且它可以工作。

                  详细地说,删除其他用户/组,直到它只有“系统”和“管理员”。然后将您的 Windows 登录添加到其中,仅具有读取权限。

                  注意id_rsa 文件位于c:\users\<username> 文件夹下。

                  【讨论】:

                  • 我在 Win-10 上遇到了同样的问题。根据您的解释,不清楚您实际允许和拒绝了什么 - 我有“用户”和“经过身份验证的用户”而不是“特定用户”作为选项 + 系统和管理员。此外,我无法弄清楚 cygwin - 安装或使用。(?)
                  • 对于 Win10 需要将您的密钥移动到用户家中 - 这非常有效。我正在尝试提供密钥的完整路径并弄乱权限 - 没有任何效果。
                  • @Sam-T 如果您在列表中看不到您的姓名,您可以按Edit... 添加然后按Add... 然后在文本框中输入您的姓名"Enter the object names to select" 然后按Check Names按钮(然后按OK 和另一个OK)然后你的名字应该列在Security 选项卡中
                  • 我可能可以专门添加名称 - 根据您的指示。但我的主要问题是 - 拒绝和允许所有人的确切权限。同时,如上所述,我只需将.pem 添加到myuser directory 即可解决问题
                  • 哦,谢谢。这在 Windows 10 上完美运行,我试图实现这一目标数周。
                  【解决方案16】:

                  这对我有用(在 mac 上)

                  sudo chmod 600 path_to_your_key.pem 
                  

                  然后:

                  ssh -i path_to_your_key user@server_ip
                  

                  希望对你有帮助

                  【讨论】:

                    【解决方案17】:

                    我为我的私钥尝试了600 级别的权限,它对我有用。

                    chmod 600 privateKey 
                    [dev]$ ssh -i privateKey user@ip
                    

                    另一方面,

                    chmod 755 privateKey 
                    [dev]$ ssh -i privateKey user@ip
                    

                    给出以下问题:

                    Permissions 0755 for 'privateKey' are too open.
                    It is required that your private key files are NOT accessible by others.
                    This private key will be ignored.
                    Load key "privateKey": bad permissions
                    

                    【讨论】:

                      【解决方案18】:

                      从另一台 Mac 迁移后,我遇到了同样的问题。 并且它阻止了我的密钥连接github。

                      我如下重置权限,现在效果很好。

                      chmod 700 ~/.ssh     # (drwx------)
                      cd ~/.ssh            
                      chmod 644 *.pub      # (-rw-r--r--)
                      chmod 600 id_rsa     # (-rw-------)
                      

                      【讨论】:

                      • 我遇到了同样的错误:Permissions 0644 for '.../...pub' are too open. It is required that your private key files are NOT accessible by others. This private key will be ignored.
                      【解决方案19】:

                      Windows 10 SSH 进入 Ubuntu EC2 在 AWS 上出现“权限太开放”错误

                      我在尝试使用来自 AWS 的 .pem 文件通过 ssh 连接到 Ubuntu EC2 实例时遇到了这个问题。

                      在 Windows 中,当我将此密钥放在 .ssh 文件夹下创建的文件夹中时,此方法有效

                      C:\Users\USERNAME\.ssh\private_key
                      

                      在 Windows 10 中更改权限设置:

                      文件设置 > 安全 > 高级

                      禁用继承

                      将继承的权限转换为显式权限

                      删除除管理员之外的所有权限条目

                      然后可以安全连接。

                      【讨论】:

                      • 这真的很有帮助!谢谢!
                      【解决方案20】:

                      我在尝试使用公钥登录远程 ftp 服务器时遇到了类似的问题。
                      为了解决这个问题,我做了以下过程:

                      • 首先找到公钥的位置,因为当你尝试登录ftp时,会用到这个公钥。
                      • 或者,您可以创建一个密钥并将该密钥的权限设置为600
                      • 确保您位于正确的位置并执行以下命令:
                      chmod 600 id_rsa
                      

                      【讨论】:

                        【解决方案21】:

                        在我的情况下,我试图从 Windows 10 中的 Ubuntu 应用程序连接并收到上述错误。 通过在实际命令之前在 Ubuntu 控制台中运行 sudo su 可以解决此问题而无需任何权限更改

                        【讨论】:

                          【解决方案22】:

                          正如人们所说,在 Windows 中,我只是将我的 .pem 文件放入 C:\Users\[user]\.ssh\ 并解决了它。尽管您可以在 bash 或 powershell 提示符下执行 chmod 和其他命令行选项,但这些都不起作用。我没有改变 rsa 或其他任何东西。然后在运行连接时,您必须将 pem 文件的路径放在 .ssh 文件夹中:

                          ssh -i "C:\Users\[user]\.ssh\ubuntukp01.pem" ubuntu@ec[ipaddress].us-west-2.compute.amazonaws.com
                          

                          【讨论】:

                            【解决方案23】:

                            对于 Windows 10,这是我发现的适合我的方法:

                            1. 将您的密钥移至 Linux 文件系统: mv ~/.ssh /home/{username}
                            2. 设置该密钥的权限: chmod 700 /home/{username}/.ssh/id_rsa
                            3. 创建指向密钥的符号链接: ln -s /home/{username}/.ssh ~/.ssh

                            如果您将主目录 (~) 设置为存储在 Windows 而不是 Linux 中(/mnt//home/ 下),则会发生这种情况。

                            【讨论】:

                              【解决方案24】:

                              仅适用于 Windows 用户。 转到 文件属性 --> 安全性 --> 高级

                              1. 禁用继承属性
                              2. 将继承的权限转换为显式权限。
                              3. 删除除管理员之外的所有权限条目。

                              【讨论】:

                                【解决方案25】:

                                PuTTY 可以在 Windows 10 上完成这项工作。它使用私钥作为输入生成公钥。

                                1. Download PuTTY
                                2. 安装 PuTTY。安装时会出现两个应用程序:putty config、putty key gen
                                3. 启动 puttyGen
                                4. 单击加载并选择一个私钥文件。请注意,您需要使用 .ppk 扩展名重命名您的私钥文件,例如 private-key.ppk

                                【讨论】:

                                • 感谢您的帮助。这是一个非常古老的问题,关于 OSX,而​​不是 Windows,已经有一个被接受和高度赞成的答案。
                                【解决方案26】:

                                另一个技巧是在下载文件夹中执行此操作。 从 AWS EC2 实例下载私钥后,文件将在此文件夹中,然后只需键入命令

                                ssh-keygen -y -f myprivateKey.pem > mypublicKey.pub
                                

                                【讨论】:

                                  【解决方案27】:

                                  我将所有自己的证书和密钥保存在一个目录中,这适用于 PuTTY 之类的工具,但我从 scp 命令收到此 too open 错误消息。我发现 Windows 已经维护了一个 C:\users\ACCOUNTNAME\.ssh 文件夹,该文件夹具有存储 SSH 密钥的适当访问权限。只要您保留内容备份(Windows 有时会在更新期间将其删除),或者在您的用户文件夹中为 ssh 密钥创建自己的文件夹,这将正常工作,因为只有您和管理员有权访问该父文件夹。

                                  在更改 Windows 文件夹的访问权限时要非常小心。我这样做了,并且每天 Windows 会扫描、读取和写入我的 C: 驱动器上的所有文件,这个过程会降低计算机数分钟。

                                  【讨论】:

                                    【解决方案28】:

                                    在连接到 AWS 实例时,我在 Windows 上的 WSL 上遇到了这个问题。通过切换到经典的命令提示符,我的问题得到了解决。您可以尝试切换到不同的终端界面,看看是否有帮助。

                                    【讨论】:

                                      【解决方案29】:

                                      我通过sudo获得了成功

                                      sudo chmod 400 pem-file.pem
                                      sudo ssh -i pem-file.pem username@X.X.X.X
                                      

                                      【讨论】:

                                      • 唯一对我有用的东西
                                      • sudo 是唯一有效的方法
                                      【解决方案30】:

                                      在我的情况下,问题是空格太多。

                                      ssh -i mykey.pem  ubuntu@instace.eu-north-1.compute.amazonaws.com
                                      

                                      但是

                                      ssh -i mykey.pem ubuntu@instace.eu-north-1.compute.amazonaws.com
                                      

                                      工作正常。问题是空格被当作用户名的一部分。

                                      【讨论】:

                                        猜你喜欢
                                        • 2013-11-27
                                        • 2017-03-12
                                        • 2010-12-06
                                        • 2015-07-08
                                        • 1970-01-01
                                        • 2017-09-28
                                        • 2018-02-19
                                        • 1970-01-01
                                        相关资源
                                        最近更新 更多