SSH "权限太开放"

3082

我从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文件什么权限?


89
谢谢您的提问。对于编写此错误信息的人来说,更好的体验是建议一些有效的配置(例如下面建议的600或400)。编程人员如果没有编写足够完整且有帮助的错误消息,那么已经折磨我们多年了! - George Pligoropoulos
我的操作系统显示“需要”而不是“建议”。可能是因为我的操作系统更新(2020年)。 - Timo
也适用于其他设置,例如“权限为640的文件太开放”以及其他操作系统,如UnixLinux - Cadoiz
1
很遗憾,该问题无法再进行编辑。它告诉我“请提供一个总结你问题的标题。需要帮助,请查看:如何提出一个好问题?” - 我想在这里分享并建议。 - i_want_more_edits
移除其他人和组的读取权限:chmod go-r id_rsag代表groupo代表othersr表示read。不再出现奇怪的代码,意义才是王道。 - AlikElzin-kilaka
显示剩余2条评论
36个回答

5

正如其他人所说,在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

5
700  folder
644  id_rsa.pub

这对我有效。


4
我将所有的证书和密钥保存在一个目录中,这对像 PuTTY 这样的工具有效,但我在使用 scp 命令时却遇到了 "太开放" 的错误信息。我发现 Windows 已经维护了一个具有适当访问权限用于存储 SSH 密钥的 C:\users\ACCOUNTNAME\.ssh 文件夹。只要您保留内容备份(Windows 在更新期间有时会删除它),或者在用户文件夹中创建自己的 ssh 密钥文件夹,这将很好地工作,因为只有您和管理员可以访问该父文件夹。
非常小心地更改 Windows 文件夹的访问权限。我曾经这样做过,结果每天 Windows 都会扫描、读取和写入我 C: 盘上的所有文件,这个过程会使计算机变慢数分钟。

4

除了已经接受的答案外,如果您已经尝试了所有建议的方法,并且正在使用Windows上的“wsl”ubuntu,则可以在ssh命令后添加“sudo”,例如:

sudo ssh -i xxx.pem xxxx@xxxx.compute-1.amazonaws.com


3

这里有一个有趣的信息。 如果你的私钥过于开放,操作系统会聪明地拒绝远程连接。它了解到id_rsa文件权限过于开放(可读,任何人都可以编辑)的风险。

{有人可能会先更换你的锁,然后用他已有的钥匙打开}

cd ~/.ssh
chmod 400 id_rsa

在处理多个服务器(非生产环境)时,我们大多数人都需要使用ssh连接远程服务器。一个好的想法是编写一段应用级代码(可以使用jsch编写java),以创建服务器之间的ssh信任关系。这样连接将不需要密码。如果安装了perl,则可以使用net ssh模块。


3
另一个技巧是对下载文件夹进行操作。当您从AWS EC2实例下载私钥后,该文件将位于此文件夹中,然后只需键入命令。
ssh-keygen -y -f myprivateKey.pem > mypublicKey.pub

3

我正在使用 Windows 10 并尝试通过 SSH 连接到 EC2 实例。与在 Windows 上使用 Cygwin 不同,建议使用 Git Bash。在对密钥执行 chmod 400 后,我能够通过 SSH 连接到 EC2 实例,但是在 Cygwin 中不起作用。Windows 将 .pem 文件视为来自互联网并阻止它,即使禁用继承也无效。

我将文件转换为 .ppk 格式,并且从 PuTTY 可以正常工作,但是在 Cygwin 中无法正常工作。


在Cygwin中使用ssh时出现问题可能是由于ssh未安装在Cygwin中。Cygwin的默认路径包括Windows版本的ssh,因此如果您在Cygwin中键入“ssh ...”,您可能会认为ssh命令是应该与Cygwin一起使用的命令。但是,如果ssh未安装在Cygwin中,则键入“ssh ...”将调用Windows版本。 - Thomas Hedden

2
在我的情况下,问题是有一个额外的空格。
ssh -i mykey.pem  ubuntu@instace.eu-north-1.compute.amazonaws.com

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

工作正常。问题在于空格被视为用户名的一部分。


2

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


2
对于 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/` vs `/home/` 下),则会出现此问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接