SSH私钥权限设置为0600时,出现“密码”对话框


71

我在其中安装了SSH私钥~/.ssh/id_rsa,并将其权限设置为0600。当我通过连接到使用Terminal.app中的私钥的SSH服务器时,会ssh弹出一个对话框,要求我输入密码来访问该id_rsa文件:

在此处输入图片说明

当我使用Interarchy GUI客户端连接到FTP服务器时,会看到相同的对话框。

更新:无论是否选中“在钥匙串中记住密码”,每次连接时都会看到此对话框。不管在密码字段中输入什么内容,如果单击“确定”按钮,它将再次出现两次。

当我将这些权限放宽到时,0640我不再看到对话框询问我的密码,但ssh中止并出现以下错误:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@
//警告:未受保护的私钥文件!@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@
'/Users/myusername/.ssh/id_rsa'的权限0640太开放。
建议他人不能访问您的私钥文件。
此私钥将被忽略。
错误的权限:忽略密钥:/Users/myusername/.ssh/id_rsa

我发现密码对话框非常烦人,并且我确信必须有某种方法来避免不得不关闭此对话框,SSH需要访问该id_rsa文件。

注意:我正在运行Mac OS X 10.6.8。

Answers:


70

请确保您有相应的id_rsa.pubid_dsa.pub在你的~/.ssh目录中。

当我有一个,id_rsa但没有对应的时id_rsa.pub,Mac OS X不断弹出对话框,并记住我的钥匙串中的passowrd没有任何作用。

cd ~/.ssh
ssh-keygen -y -f id_rsa > id_rsa.pub

为我生成了适当的公钥文件。

如果您已经有公用文件了(将其重命名为另一个名称)并使用上述命令再次生成公用密钥,您会注意到生成的密钥和旧的密钥不相等。不知何故,较早版本的Mac OS X生成了Lion不再喜欢的公钥,再次生成可以解决该问题。

出于好奇,密钥是完全相同的,更改之处在于文件上的密钥之后不再有“ comments”部分。


2
乍一看,此解决方案可能没有多大意义,但请尝试一下。我遇到了完全相同的问题,并将其修复。我总是在ssh密钥上使用密码,您也应该这样做。
亚历克斯·雷凯里

3
这个解决方案对我有用。这没有道理,但可以!(OS X Lion)
bruno077

2
哇,这无论如何都是零意义,但它确实纠正了我系统上的许多奇怪行为。谢谢。
沃伦·佩纳

2
对于我的一生来说,几天来我一直无法找到解决同一问题的解决方案,这对我来说已经解决了。这根本没有道理,但解决了我的问题!谢谢,支持。
丹尼·英格兰

天哪,谢谢!为我工作(使用山狮和使用SourceTree)时,这些对话框非常烦人。
塞巴斯蒂安·萨斯特

91

首先,运行ssh-add -K并检查是否可以解决您的问题。

如果不:

  • 删除了rsa_id.pub文件并重新生成了一个新文件(必须位于〜/ .ssh /中):

    ssh-keygen -y -f id_rsa > id_rsa.pub
  • 确保将id_rsa和id_rsa.pub的权限都设置为600(必须位于〜/ .ssh /中):

    chmod 600 id_rsa*
  • 运行以下命令:

    ssh-add -K

完成此操作后,不再提示我输入私钥密码。这似乎实际上是将私钥密码放置在OS X要使用的正确钥匙串位置。


7
直到我遇到您的“ ssh-add -K”命令之前,我一直都很疯狂。我不相信OSX使事情变得多么复杂。+1000
eduncan911

4
首先,我需要chmod 600(而不是644)才能正常工作
kangax 2015年

1
带有644的私钥不是bueno
xtian 2016年

15
ssh-add -K解决了我的问题
Spechal

2
在将chmod 644更正为chmod 600之前不进行投票,这是不安全的。
托马什卡夫卡

20

就我而言,这ssh-add -K并不能解决问题,我必须指定密钥:

ssh-add ~/.ssh/id_rsa

别无选择-K。您的解决方案已将其修复。我想知道为什么我需要这样做。从来没有任何密码提示。
DannyRe '16

谢谢!这是OS X Sierra最终要求我提供id_rsa密码​​的时候。
托马什卡夫卡

2
FWIW,该-K标志为我工作塞拉利昂10.12.2
克里斯·瓦格纳

是的 我可以确认。-K确实存在,并在最新的Sierra中解决了该问题!干得好@nathancahill。
马特·科马尼克

17

对于macOS 10.12,ssh-add -K需要在每次重新启动后运行Sierra 。为了避免这种情况,请~/.ssh/config使用此内容进行创建。

Host *
   AddKeysToAgent yes
   UseKeychain yes
   IdentityFile ~/.ssh/id_rsa

苹果已经添加了Technote 2449,它解释了发生了什么。

在macOS Sierra之前,ssh会显示一个对话框,询问您的密码短语,并提供将其存储到钥匙串中的选项。此用户界面在一段时间前已过时,已被删除。

编辑:显然不需要指定主机和密钥。只需添加即可。

AddKeysToAgent yes
UseKeychain yes

这对我有用。最初,我尝试使用ssh-add -K,但是更改仅在重新启动后才起作用。
Gandalf458 '17

我需要放在AddKeysToAgent的最高层~/.ssh/config
Radon Rosborough

12

您必须在某处输入私钥的密码,并且OS X默认使用ssh-agent。

如果要使用ssh-agent但要避免使用gui对话框,则可以使用ssh-add将密码添加到代理中,然后像往常一样使用ssh。

如果不想使用ssh-agent,而是使用ssh提示输入密码,则取消设置SSH_AUTH_SOCK环境变量。


谢谢Alrescha。您是否知道有什么方法可以将您的私钥密码永久存储在Mac OS X钥匙串中(而不仅仅是单个会话)?
titaniumdecoy

3
您可以在终端中尝试使用“ ssh-add -K”,但是如果存在一个错误,则无法选中该复选框,那么这可能也不起作用。我不想将我的ssh密码存储在钥匙串中,因此我没有对此进行测试。
zzz

使用“ ssh-add -K我”,无需输入密码即可连接,但仍会出现提示;我只是解雇了。
titaniumdecoy

3
ssh-add -K是用于将密码添加到钥匙串的密码。如果您不输入密码,则无法将其放在钥匙串上。
zzz

1
附录:在Lion和Snow Leopard中,如果输入ssh-add -K,则会在Terminal(不是终端)中得到提示。
zzz

8

当您放宽权限时,密钥将被忽略。这样您将一无所获。

如果要使用密钥而不必每次都输入密码,则有两个选择。

如果选中“在我的钥匙串中记住密码”,则不必每次都键入密码:密码将与其他所有密码一起存储在钥匙串中。这是推荐的选项。

您可以创建没有密码的私钥文件。您可以更改现有的私钥文件,使其不受密码保护(更改密码只会影响密钥文件,而不会影响密钥本身)。在命令行中,运行ssh -p,输入现有密码,然后将新密码留为空白。空密码短语存在安全风险:可以访问您的私钥文件(例如,通过访问您的备份)的任何人都可以立即使用它。


感谢您的回答,尽管我忘了提及一件事-选中“在钥匙串中记住密码”选项无效:下次连接时该对话框会再次出现。(使用空密码不是我的选择。)
titaniumdecoy

3
建议用没有密码的密钥替换受密码保护的密钥确实是一个可怕的主意……
Schmurfy 2011年

5

如果已将私钥添加到源〜/ .ssh目录中,并且已输入ssh-add -K将其添加到钥匙串中,并且已将公钥内容复制到了.ssh / authorized_keys中(对于帐户中的文件),对话框将消失。

它是文件,权限,位置和命令的棘手组合,因此可能需要一些时间。我不会急着就bug得出结论。


3

我在Lion(Mac OS X 10.7)上遇到了完全相同的问题。我认为是一个错误...如果ssh身份验证是密码,则客户端首先会通过公钥,这很正常。但是,即使下次选择建立新的ssh连接时,即使您选择将密码短语保存在钥匙串上(密码身份验证也不需要),您仍会再次被要求输入密码短语...


1
我也认为这是一个错误,雪豹一切正常,但是每次我的计算机从睡眠状态恢复时,都会再次询问ssh密钥密码,尽管上次询问时“请记住”!非常烦人...
Schmurfy 2011年

3

无需重新生成您的公共密钥。您可以简单地执行以下两个命令:

chmod 0600 ~/.ssh/id_rsa.pub
ssh-add ~/.ssh/id_rsa

基本上,您需要加强对公用密钥文件的权限,并且需要将密钥添加到OSX身份验证代理。


3

在最新版本的macOS(10.12.2-Sierra)中,这很容易解决。只需编辑〜/ .ssh / config并启用UseKeychain选项:

Host *
UseKeychain yes

保存并解决。


2

ssh-agent死亡时,在我的OS X 10.7.4系统上发生了此问题。重新启动解决了该问题。(您可以尝试重新启动ssh-agent,但我不知道钥匙串是否足够聪明,可以拿起新的ssh-agent套接字。)


这是我绊了一个小时后也解决的问题。
DannyRe '16

2
  1. 确保〜/ .ssh /是chmod 700。

  2. 确保〜/ .ssh / id *文件都是chmod 600。

  3. 运行/ Applications / Utilities / Keychain Access.app并修复钥匙串。

  4. 登出。(重启并不是一个可怕的主意)

  5. 登录

  6. 如果问题仍然存在,请将现有的〜/ .ssh / id *文件移至桌面,然后尝试使用生成新密钥,ssh-keygen -t dsa -f ~/.ssh/id_dsa -C you@youremail.tld并查看新密钥是否工作更好。

我在Lion上,但是IIRC Snow Leopard的工作方式相同。

ps-任何建议使用空白ssh密码短语的人都应被迫佩戴标志,以使其他人知道不要听从他们的建议。


1

重新生成公用密钥对我来说似乎不起作用(10.8),也不生成新的SSH密钥。例如,如果我在锁定登录密钥链后运行git pull,则会弹出一个对话框,要求输入密钥密钥,而不是首先尝试从登录密钥链检索密码。

但是,如果我先杀死ssh-agent,则会提示我输入登录密钥链密码,然后该密码将检索SSH密钥密码。


嗨,这看起来像是一个单独的问题,而不是该问题的答案。您可以重新发布为新问题吗?
苏格兰,

1

另一个有趣的发现是,如果您复制并粘贴PEM文件的内容,则结尾可能会缺少破折号。因此,只需记住将最后一行添加为

-----END RSA PRIVATE KEY-----

类似的是,当从诸如lastpass之类的东西粘贴ssh密钥时,它将全部粘贴到一行上。对我来说,这似乎是个问题,一旦将空白的私钥拆分回正确的格式,它就可以工作。
卡梅隆·加格

1

为了使其工作,我必须执行以下步骤。

# Change working directory
cd ~/.ssh
# Remove the old public key
rm id_rsa.pub
# Create a new public key
ssh-keygen -y -f id_rsa > id_rsa.pub
# Change permission
chmod 600 id_rsa*
# Add the key to ssh
ssh-add id_rsa
# Then finally test it (I used github)
ssh -i id_rsa.pub git@github.com

然后,最终命令应输出如下内容: Hi <user>! You've successfully authenticated, but GitHub does not provide shell access.


0

我有同样的问题。我似乎已通过执行此操作对其进行了修复。

1)通过重命名为id_dsa和id_dsa.pub文件进行备份。

2)运行带有空白密码短语的新密钥生成器。

与launchctl period作业配合使用,可监视远程服务器以及从终端中的ssh登录。

我的终端中有一个快速的函数authme函数,因为我的.bash_profile中包含以下内容

#~/.bash_profile    
function authme {
ssh $1 'cat >>.ssh/authorized_keys' <~/.ssh/id_dsa.pub
}

因此,快速身份验证remoteserver.com将复制新的远程密钥。

我认为该错误与密码短语未转换有关(我的老雪豹根本没有密码短语)。

尝试一下,看看是否有帮助。

花费不超过10分钟。我花了无限的时间在谷歌上搜索,看看是否还有其他提及。这个网站是唯一的!

欧恩


使用空白密码不是我的选择,遗憾的是
titaniumdecoy

0

我有一个类似的问题。原来,我使用的私钥格式错误。我在Win机器上使用了PuTTY密钥生成器,而在OS X上的ssh期望使用不同的格式-Open SSH格式。

事实证明,我用来生成此密钥的工具(PuTTY密钥生成器)可以选择将我的私有密钥转换为Open SSH所需的格式。

简单为:

  1. 打开PuTTY Key Gen
  2. 加载您的私钥
  3. 选择转换>导出OpenSSH密钥。

您将保存的文件包含正确(OpenSSH)格式的原始私钥。


0

请确保:

  1. 您正在使用pem格式作为私钥。这是因为Mac使用可与pem一起使用的openssh客户端。ppk是Putty的专有格式,与openssh不兼容。如果只有ppk,则可以使用腻子密钥发生器轻松地将ppk转换为pem
  2. 您的pem文件的权限为600。私钥只能由其所有者访问。因此,如果权限授予对任何其他权限的读取访问权限,则将其视为安全威胁。

这有望解决该问题。


-1

使用.pem键而不是.ppk键。


1
我们正在寻找能提供一些解释和上下文的长答案。不要仅仅给出一个答案。解释为什么你的答案是正确的,最好是引用。不包含说明的答案可能会被删除。
Tetsujin 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.