我从 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 文件什么权限?
sshd
服务器上启用 StrictModes
有关,来自 man 页面:“StrictModes 指定 sshd(8) 是否应在接受登录之前检查文件模式和用户文件和主目录的所有权。 " - 您可以禁用此功能,但不建议这样做。
It is required
而不是 It is recommended
。也许我的操作系统更新(2020 年),这就是原因。
Title cannot contain "ssh "permissions are too open" error"
它告诉我“请提供一个概括您问题的标题。如需帮助,请参阅:How do I ask a good question?”——我想在此提出建议并立即分享。
密钥只能由您读写:
chmod 600 ~/.ssh/id_rsa
或者,密钥只能由您读取(这也会阻止您的写访问):
chmod 400 ~/.ssh/id_rsa
600
在大多数情况下似乎更好,因为您以后无需更改文件权限即可对其进行编辑。 (有关更多细微差别,请参阅评论)
手册页中的相关部分 (man ssh
)
~/.ssh/id_rsa 包含用于身份验证的私钥。这些文件包含敏感数据,用户应该可以读取,但其他人不能访问(读/写/执行)。如果其他人可以访问,ssh 将简单地忽略私钥文件。在生成将用于使用 3DES 加密此文件的敏感部分的密钥时,可以指定一个密码短语。 ~/.ssh/identity.pub ~/.ssh/id_dsa.pub ~/.ssh/id_ecdsa.pub ~/.ssh/id_rsa.pub 包含用于认证的公钥。这些文件不敏感,任何人都可以(但不必)读取。
在 Windows 8.1 中使用 Cygwin,需要运行一个命令:
chgrp Users ~/.ssh/id_rsa
那么这里贴的解决方案就可以应用了,400或者600都可以。
chmod 600 ~/.ssh/id_rsa
C:\cygwin64
),因此它可能继承了权限。奇怪的是,这在我拥有的其他笔记本电脑上没有发生。
我的 Windows 10 出现错误,因此我将权限设置如下,它可以工作。
https://i.stack.imgur.com/Arb4o.png
详细地说,删除其他用户/组,直到它只有“系统”和“管理员”。然后将您的 Windows 登录名添加到其中,仅具有读取权限。
请注意,id_rsa
文件位于 c:\users\<username>
文件夹下。
Edit...
添加,然后按 Add...
,然后在文本框中输入您的姓名 "Enter the object names to select"
,然后按 Check Names
按钮(然后按 OK
和另一个 OK
),那么您的姓名应列在 Security
选项卡中
.pem
添加到 myuser directory
即可解决问题
适用于 Windows 8.1 的独立于语言环境的解决方案是:
chgrp 545 ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
GID 545 是一个始终指代“用户”组的 special ID,即使您的区域设置对用户使用了不同的词。
AFAIK的价值观是:
密钥文件所在的隐藏目录 .ssh 为 700
密钥文件 id_rsa 为 600
0600 是我的设置(并且它正在工作)
AWS 上的 Windows 10 SSH 进入 Ubuntu EC2 “权限太开放”错误
我在尝试使用 AWS 的 .pem 文件 ssh 进入 Ubuntu EC2 实例时遇到了这个问题。
在 Windows 中,当我将此密钥放在 .ssh 文件夹下创建的文件夹中时,这有效
C:\Users\USERNAME\.ssh\private_key
在 Windows 10 中更改权限设置:
文件设置 > 安全 > 高级 禁用继承 将继承的权限转换为显式权限 删除除管理员之外的所有权限条目
然后可以安全地连接。
当我尝试使用公钥登录远程 ftp 服务器时,我遇到了类似的问题。为了解决这个问题,我做了以下过程:
首先找到公钥的位置,因为当你尝试登录 ftp 时,会使用这个公钥。
或者,您可以创建一个密钥并将该密钥的权限设置为 600。
确保您位于正确的位置并执行以下命令:
chmod 600 id_rsa
在 Windows 10 上,cygwin 的 chmod
和 chgrp
对我来说还不够。我不得不
右键单击文件
-> 属性
-> 安全(选项卡)
并删除除我的活动用户之外的所有用户和组。
提供400权限,执行以下命令
chmod 400 /Users/username/.ssh/id_rsa
https://i.stack.imgur.com/8Nj3Q.jpg
我通过 sudo
获得了成功
sudo chmod 400 pem-file.pem
sudo ssh -i pem-file.pem username@X.X.X.X
密钥的 0x00
权限要求有一个例外。如果密钥由 root 拥有并且由包含用户的组拥有,则它可以是 0440
并且该组中的任何用户都可以使用该密钥。
我相信这适用于集合 0xx0
中的任何权限,但我还没有测试每个版本的每个组合。我已经在 CentOS 6 上尝试使用 0660
和 5.3p1-84
,并且该组不是用户的主要组,而是次要组,它工作正常。
这通常不会针对某人的个人密钥,而是针对用于自动化的密钥,在您不希望应用程序能够弄乱密钥的情况下。
类似的规则适用于 .ssh
目录限制。
仅适用于 Windows 用户。转到文件属性 --> 安全性 --> 高级
禁用继承属性将继承的权限转换为显式权限。删除除管理员之外的所有权限条目。
https://i.stack.imgur.com/yKxxI.jpg
这对我有用(在mac上)
sudo chmod 600 path_to_your_key.pem
然后 :
ssh -i path_to_your_key user@server_ip
希望有帮助
对我来说(使用适用于 Windows 的 Ubuntu 子系统),错误消息更改为:
Permissions 0555 for 'key.pem' are too open
使用 chmod 400 之后。事实证明,使用 root 作为默认用户是原因。
使用 cmd 更改此设置:
ubuntu config --default-user your_username
什么对我有用
chgrp 用户文件夹 chmod 600 文件夹
从另一台 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.
如果您在 Windows 上使用 WSL
最简单的答案就是输入:sudo ssh -i keyfile.pem <user>@ip
无需更改文件权限。 reason 为什么会发生这种情况? Another resource
您无法在 Windows 上的 Ubuntu 上使用 Bash 上的 chmod 修改 Windows 文件系统上文件的权限。您必须将私钥复制到 WSL 主目录 (~) 并在那里执行。
另一方面,sudo
绝不应与 ssh 一起使用。使用 sudo
发出有效的原因是它现在可能以 root 身份执行,这不是执行此操作的正确方法,并且存在巨大的安全风险,因为允许任何其他 600/400 权限违背了使用 SSH 密钥,从而损害密钥的安全性。
执行此操作的最佳方法是将文件复制到 $HOME/.ssh
:
cp keyfile.pem ~/.ssh
对它做sudo chmod 400 keyfile.pem
。
然后ssh -i keyfile.pem <user>@ip
。
700 folder
644 id_rsa.pub
这对我有用。
有趣的消息在这里。如果您的私钥太开放,操作系统足够聪明,可以拒绝远程连接。它了解 id_rsa 权限完全开放(读取,任何人都可以编辑)的风险。
{一个人可以先换你的锁,然后用他已经拥有的钥匙打开它}
cd ~/.ssh
chmod 400 id_rsa
在多台服务器(非生产)上工作时,我们大多数人都觉得需要用 ssh 连接远程服务器。一个好主意是有一段应用程序级代码(可能是使用 jsch 的 java)来在服务器之间创建 ssh 信任。这种方式连接将是无密码的。万一安装了 perl - 也可以使用 net ssh 模块。
我将所有自己的证书和密钥保存在一个目录中,这适用于 PuTTY 等工具,但我从 scp 命令收到此 too open
错误消息。我发现 Windows 已经维护了一个 C:\users\ACCOUNTNAME\.ssh
文件夹,该文件夹具有存储 SSH 密钥的适当访问权限。只要您保留内容备份(Windows 有时会在更新期间将其删除),或者在您的用户文件夹中为 ssh 密钥创建自己的文件夹,这将正常工作,因为只有您和管理员有权访问该父文件夹。
更改 Windows 文件夹的访问权限时要非常小心。我这样做了,并且每天 Windows 会扫描、读取和写入我的 C:
驱动器上的所有文件,这个过程会使计算机减慢几分钟。
正如人们所说,在 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
我正在使用 Windows 10 并尝试通过 SSH 连接到 EC2 实例。与其使用 Cygwin for Windows,不如尝试使用 Git Bash。为密钥执行 chmod 400
后,我可以通过 SSH 连接到 EC2 实例,但 Cygwin 对我来说同样不起作用。 Windows 将 .pem 文件视为来自 Internet 并阻止它,即使禁用继承也不起作用。
我将文件转换为 .ppk 格式,并且在 PuTTY 中也可以正常工作,但在 Cygwin 中无法正常工作。
另一个技巧是在下载文件夹中执行此操作。从 AWS EC2 实例下载私钥后,文件将在此文件夹中,然后只需键入命令
ssh-keygen -y -f myprivateKey.pem > mypublicKey.pub
我在玩 Ansible 时遇到了这个错误。为了解决这个问题,我已将私钥的权限更改为 600。它奏效了!
chmod 600 .vagrant/machines/default/virtualbox/private_key
对于 Windows 10,这是我发现对我有用的:
将您的密钥移动到 Linux 文件系统: mv ~/.ssh /home/{username} 设置该密钥的权限: chmod 700 /home/{username}/.ssh/id_rsa 创建密钥的符号链接: ln - s /home/{用户名}/.ssh ~/.ssh
如果您将主目录 (~
) 设置为存储在 Windows 而不是 Linux 中(在 /mnt/
与 /home/
下),则会发生这种情况。
就我而言,问题是太多的空白。
ssh -i mykey.pem ubuntu@instace.eu-north-1.compute.amazonaws.com
但
ssh -i mykey.pem ubuntu@instace.eu-north-1.compute.amazonaws.com
工作正常。问题是空格被作为用户名的一部分。
在连接到 AWS 实例时,我在 Windows 上的 WSL 上遇到了这个问题。我的问题通过切换到经典命令提示符得到解决。您可以尝试切换到不同的终端界面,看看是否有帮助。
我为我的私钥尝试了 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
PuTTY 可以在 Windows 10 上完成这项工作。它使用私钥作为输入生成公钥。
下载 PuTTY 安装 PuTTY。安装时出现两个应用程序:putty config、putty key gen 启动 puttyGen 单击加载并选择一个私钥文件。请注意,您需要用 .ppk 扩展名重命名您的私钥文件,例如 private-key.ppk
https://i.stack.imgur.com/wosME.png
不定期副业成功案例分享