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


0600是我的设定值(并且正在工作)


密钥只需由您读写:

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包含用于身份验证的公钥。这些文件不敏感任何人都可以(但不需要)阅读。


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

我相信这可以在集合0xx0中使用任何权限,但我还没有测试每个版本的每个组合。我已经在CentOS 6上尝试了0660和5.3p1-84,该组不是用户的主要组,而是次要组,并且工作正常。

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

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


我在EC2上使用VPC,并收到相同的错误消息。我注意到我在使用公共DNS。我把它改成了专用DNS和vola!!它奏效了。。。


什么对我有用

chgrp用户文件夹chmod 600折叠


在Windows 8.1中使用Cygwin时,需要运行以下命令:

chgrp Users ~/.ssh/id_rsa

然后可以应用此处发布的解决方案,400或600即可。

chmod 600 ~/.ssh/id_rsa

此处引用


AFAIK值为:

700表示密钥文件所在的隐藏目录.ssh密钥文件id_rsa为600


适用于Windows 8.1的独立于区域设置的解决方案是:

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

GID 545是一个特殊的ID,它总是指“用户”组,即使您的语言环境使用了不同的“用户”。


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

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

cd ~/.ssh
chmod 400 id_rsa

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


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

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

在Windows 10上,cygwin的chmod和chgrp对我来说还不够

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


提供400许可,执行以下命令

chmod 400 /Users/username/.ssh/id_rsa


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


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

 Permissions 0555 for 'key.pem' are too open

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

使用cmd:

 ubuntu config --default-user your_username

我在windows 10中遇到了错误,因此我将权限设置为如下,并且可以正常工作。

详细信息,请删除其他用户/组,直到它只有“SYSTEM”和“Administrators”。然后将您的windows登录名添加到只有“读取”权限的窗口中。

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


这是对我有用的(在mac上)

sudo chmod 600 path_to_your_key.pem 

那么:

ssh -i path_to_your_key user@server_ip

希望能有所帮助


我尝试了对我的私钥进行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

我从另一台mac迁移后也遇到了同样的问题。它被我的钥匙阻止连接github。

我重置了如下权限,现在运行良好。

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

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中的Ubuntu应用程序连接,并得到了上面的错误。通过在实际命令之前在Ubuntu控制台中运行sudo-su,可以在没有任何权限更改的情况下解决该问题


正如人们所说的,在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,这是我发现的适合我的功能:

将密钥移动到Linux文件系统:mv~/.ssh/home/{用户名}设置该密钥的权限:chmod 700/home/{用户名}/.ssh/id_rsa创建指向密钥的符号链接:ln-s/home/{用户名}/.ssh~/.ssh

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


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

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


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

下载PuTTY安装PuTTY。安装时有两个应用程序:腻子配置、腻子密钥生成启动puttyGen单击加载并选择私钥文件。请注意,您需要使用.ppk扩展名重命名私钥文件,例如privatekey.ppk


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

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

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

在更改Windows文件夹的访问权限时要非常小心。我这样做了,每天Windows都会扫描、读取和写入我的C:驱动器上的所有文件,这一过程会让电脑慢很多分钟。


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


我用sudo成功了

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

在我的案例中,问题是空白太多。

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

but

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

工作正常。问题是空白被视为用户名的一部分。


我正在使用Windows 10,并尝试通过SSH连接到EC2实例。不要使用Cygwin for Windows,而是尝试使用Git Bash。在为密钥执行chmod 400之后,我可以通过SSH连接到EC2实例,但从Cygwin看,这一点不适用。Windows将.pem文件视为来自internet并阻止它,即使禁用继承也不起作用。

我将文件转换为.ppk格式,PuTTY也能正常工作,但Cygwin无法正常工作。


700  folder
644  id_rsa.pub

这对我有用。


如果您在windows上使用WSL

最简单的答案是键入:sudo ssh-i keyfile.pem<user>@ip

而不更改文件权限。发生这种情况的原因是什么?另一种资源

您不能修改Windows文件系统上文件的权限在Windows上的Ubuntu上使用chmod on Bash。您必须复制WSL主目录(~)的私钥,并在那里执行。


另一方面,sudo不应与ssh一起使用。使用sudo发出命令之所以有效,是因为它现在很可能以root身份执行,而这不是正确的方式,并且存在巨大的安全风险,因为允许使用600/400权限以外的任何权限都会破坏使用SSH密钥的目的,从而危及密钥的安全性。

最好的方法是将文件复制到$HOME/.ssh:

cp密钥文件.pem~/.ssh

对其执行sudo chmod 400 keyfile.pem。

然后ssh-i keyfile.pem<user>@ip。


除了公认的答案之外,如果您已经完成了所有建议的方法,并且在windows上使用了“wsl”ubuntu,那么可以在ssh命令中附加“sudo”,例如

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


对于Windows:

奇怪,但之前在这里描述的UI调整对我没有帮助。

但这解决了问题:

以管理员权限打开PowerShell使用您的密钥转到目录(使用cd命令)逐个输入命令

:

$path = ".\{your private key file name}" //for example "myKey"

然后键入以下命令删除显式权限:

icacls.exe $path /reset

然后将读取权限分配给当前用户:

icacls.exe $path /GRANT:R "$($env:USERNAME):(R)"

然后删除继承:

icacls.exe $path /inheritance:r

希望,会帮助某人