ssh"权限太开放"

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

2237338 次浏览

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

这些键只需要你可以读写:

chmod 600 ~/.ssh/id_rsa

或者,密钥只能由您读取(这也会阻止您的写入访问):

chmod 400 ~/.ssh/id_rsa

600在大多数情况下似乎更好,因为您不需要稍后更改文件权限来编辑它。(有关更多细微差别,请参阅注释)

来自手册页的相关部分(man ssh

 ~/.ssh/id_rsaContains the private key for authentication.  These files contain sensitivedata and should be readable by the user but notaccessible by others (read/write/execute).  ssh will simply ignore a privatekey file if it isaccessible by others.  It is possible to specify apassphrase when generating the key which will be used to encrypt the sensitivepart of this file using 3DES.
~/.ssh/identity.pub~/.ssh/id_dsa.pub~/.ssh/id_ecdsa.pub~/.ssh/id_rsa.pubContains the public key for authentication.  These files are not sensitive andcan (but need not) be readable by anyone.

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

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

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

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

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

什么对我有用

chgrp用户文件夹

CHMOD 600 FOLDER

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

chgrp Users ~/.ssh/id_rsa

然后可以应用这里发布的解决方案,400或600是可以的。

chmod 600 ~/.ssh/id_rsa

参考这里

AFAIK的值是:

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

  • 600为密钥文件id_rsa

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

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

GID 545是一个特殊ID,始终引用“用户”组,即使您在语言环境中使用不同的单词来表示用户。

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

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

cd ~/.sshchmod 400 id_rsa

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

我遇到了这个错误,而我玩的Anable。我已经改变了权限的私钥600为了解决这个问题。它工作!

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

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

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

提供400个权限,执行下面的命令

chmod 400 /Users/username/.ssh/id_rsa

在此处输入图片描述

对于Win10,需要将密钥移动到用户的主目录对于linuxlike操作系统,你需要chmod700喜欢或600等。

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

 Permissions 0555 for 'key.pem' are too open

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

使用cmd更改它:

 ubuntu config --default-user your_username

我有我的Windows 10错误,所以我设置权限如下,它的工作原理。

id_rsaWindows 10的权限

详细信息,删除其他用户/组,直到它只有“系统”和“管理员”。然后将您的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 ~/.sshchmod 644 *.pub      # (-rw-r--r--)chmod 600 id_rsa     # (-rw-------)

Windows 10 ssh进入Ubuntu EC2“权限太开放”AWS上的错误

我在尝试使用来自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,这是我发现适合我的:

  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/下),则会发生这种情况。

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

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

在此处输入图片描述

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

  1. 下载PuTTY
  2. 安装PuTTY。安装时出现两个应用程序:Putty config、Putty key gen
  3. 启动油灰
  4. 单击加载并选择私钥文件。请注意,您需要重命名扩展名为.ppke. g.private-key.ppk的私钥文件

一个空的PuTTY密钥生成器的截图

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

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

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

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

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

我成功了sudo

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

在我的情况下,这个问题是一个太多的空白。

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

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

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

我正在使用Windows 10并尝试通过SSH连接到EC2实例。而不是使用Cygwin for Windows,尝试使用Git Bash。在执行chmod 400 for key后,我能够SSH到EC2实例,但从Cygwin对我来说同样不起作用。Windows将. pem文件视为来自Internet并阻止它,即使禁用继承也不起作用。

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

700  folder644  id_rsa.pub

这对我有用。

如果您正在使用windows上的wsl

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

而不更改文件权限。原因为什么会这样?另一个资源

您无法修改Windows文件系统上文件的权限在Windows上的Ubuntu上的Bash上使用chmod。您必须复制私钥到您的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

除了接受的答案之外,如果您已经完成了所有建议的方法,并且您在Windows上使用“wsl”ubuntu,您可以将“sudo”附加到您的ssh命令,例如

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

对于Windows:

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

但这解决了这个问题:

  1. 在管理员权限下打开PowerShell
  2. 使用密钥转到目录(使用cd命令)
  3. 一个接一个地输入命令

:

$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

希望,会帮助别人

输入图片描述