SSH密钥要求我输入密码?


35

我有一个公用/专用密钥对。他们俩都没有与他们相关的任何密码短语。

每当我尝试使用私钥或公钥ssh时(我很确定我只应使用公钥),都会被询问密码,然后当然无法连接。

有人知道如何解决这个问题吗?我是否不正确地键入了一些命令?我正在尝试使用存储在〜/ .ec2 / key.ppk中的密钥ssh进入我在〜/ .ssh / config文件中已设置的服务器(正确,因为此完全相同的设置可在另一台服务器上使用)

我也尝试过使用puttygen.exe生成带有密码短语的新私钥,然后使用该密钥,当我键入密码短语时,它仍然会失败。

Answers:


28

首先是具有密码短语的私钥。这将针对存储在远程服务器上的公钥进行验证。

最好的猜测是,您正在尝试将油灰私钥(ppk)密钥格式与openssh一起使用。这不起作用。...如果是这种情况,PuTTYgen为openssh提供了导出选项。

ssh-rsa AAAAB3NzaC1y...... etc

我还假定您要尝试连接到的服务器已将您的公共密钥正确地存储在授权密钥文件中(~/.ssh/authorized_keys通常)。

另一个猜测是未选择正确的密钥。我会尝试的一些事情是:

使用重置密码短语ssh-keygen,就像这样...

$ ssh-keygen -f ~/.ec2/key.ppk -p

这将确认实际上您的密钥是否已经(或没有)密码。

其次,我尝试使用详细输出进行连接,显式指定您的公钥输出:

$ ssh host -i ~/.ec2/key.ppk -vvv

这将使您对正在发生的事情有更多的了解。


正确,这是Puttygen从可使用腻子的密钥中生成的密钥。当我将腻子放入同一台服务器(来自托管cygwin实例的计算机)中时,使用完全相同的密钥即可正常工作。当我尝试通过cygwin的ssh连接时,它会炸毁。我很困惑如何使这项工作。
llaskin 2010年

6
我认为mrverrall的观点是PuTTY私钥的文件格式与OpenSSH(cygwin中的ssh客户端)使用的文件格式不同。因此,OpenSSH只是无法使用私钥数据,因为它无法弄清楚数据的含义。但是PuTTY具有“导出”选项,因此您可以获取所需的“ PEM”格式的数据。
Phil P

如果文件格式正确,也会出现此错误-因此,如果手动创建文件,请仔细检查您是否已复制并粘贴了三遍和三遍检查。
Daniel Sokolowski

ssh-rsa AAAAB3NzaC1y...... etc来自openssh的格式,对吗?我的私钥中有此格式。标头指出:PuTTY-User-Key-File-2: ssh-rsa Encryption: none Comment: imported-openssh-key Public-Lines: 6但文件存储为id_rsa文件。这是否意味着该文件仍为.ppk格式,即使文件名仅为id_rsa
alpha_989 '18

在这里找到不同格式的答案。就我而言,即使文件扩展名没有.ppk,它仍然是腻子格式,这让我感到困惑,因为它显示了各种错误,但没有直接提示我问题出在密钥格式上:stackoverflow.com/a/44391850/4752883
alpha_989 '18

18

您可以运行ssh-agent。请参阅此处进行讨论。

对我有用的简短版本(bash中):

$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-rnRLi11880/agent.11880; export SSH_AUTH_SOCK;
SSH_AGENT_PID=11881; export SSH_AGENT_PID;
echo Agent pid 11881;

我把它呼应的三行代码执行了。另一种方法是采用-s的输出:

$ eval `ssh-agent -s`

然后我添加了凭据:

$ ssh-add ~/.ssh/id_rsa
Enter passphrase for /home/me/.ssh/id_rsa: 
Identity added: /home/me/.ssh/id_rsa (/home/me/.ssh/id_rsa)

现在,代理提供了凭据,而无需我输入密码。

我相信ssh-agent会在外壳运行时消失,因此应在启动时编写脚本以最大程度地方便。我共享链接也描述了脚本。


4

设置公钥时,您可能(可能是无意间)使用了密码短语。

您可能需要重新开始-我还没有使用过puttygen,但是您可以删除(或重命名).ssh目录中的公钥,使用它ssh-keygen来生成一个新的(确保不提供密码),然后将公共密钥共享到您要连接到的服务器上的authorized_keys文件中。

您可能还需要从要连接到的服务器上的授权密钥文件中删除旧的口令短语。


4

检查私钥id_rsa末尾是否没有多余的换行符,在某些情况下,额外的换行符会使ssh-keygen要求输入密码,请尝试以下操作:

sed  '/^$/d' /path/to/key > id_rsa

测试:

ssh-keygen -yf id_rsa

2
天哪,这是我的问题。之后的一个额外的换行符-----END RSA PRIVATE KEY-----导致它要求没有一组密钥的密码短语!
edk750

3

要检查的一件事,如果您的sshd_config文件具有StrictModes = yes,则$ HOME目录或$ HOME / .ssh目录必须不可写入组或其他目录。否则,无论如何身份验证都会失败。


1

我犯了一个错误,意外地用〜/ .ssh / id_rsa.pub覆盖了〜/ .ssh / id_rsa文件。这样做将导致ssh要求输入密码。


0

前几天,我遇到了这个问题。具体来说,我试图将一个私有AWS密钥从一台机器复制/粘贴到另一台机器。

我有一个缺少第一个或最后一个字符的坏习惯。事实证明,如果您没有抓住私钥末尾的每个连字符(即使它与密钥文本本身无关),系统会提示您输入私钥的密码,直到从密码中添加每个字符为止。您从中复制密钥(在我的情况下,这意味着在密钥末尾添加一个连字符)。

我想这意味着最佳实践是通过电线对文本文件进行SSH,而不是尝试在终端窗口之间复制和粘贴。


0

在OSX上,我可以运行:

$ ssh-add ~/.ssh/id_rsa Enter passphrase for /Users/me/.ssh/id_rsa: `Identity added: /Users/mikekilmer/.ssh/id_rsa (/Users/mikekilmer/.ssh/id_rsa)

密码由“钥匙串访问”应用程序存储,该应用程序位于“应用程序”>“实用程序”文件夹中。我刚刚id_在搜索字段中输入。


0

尝试查看服务器上的日志文件。请参阅/ var / log / 身份验证日志(例如,OpenSSH的/ var / log / authlog,尽管我已经看到某些操作系统使用Portable OpenSSH并使用/var/log/auth.log)并检查该文件的结尾。

我见过的最常见原因是权限错误(如TD1的回答所示),尽管其他问题可能是由于(存储在服务器上的)公共密钥不在正确的文件中,或者该密钥被注释掉了,或者用户名拼写错误。

暂时为帐户提供一个密码短语(对于进行故障排除)可能也很有用,只是在执行该操作时验证帐户是否可以成功登录。

如果查看日志文件并不能很快导致您解决问题,我建议您发布一个新问题(因为这是一个非常笼统的问题),其中包括日志文件中的特定详细信息,因此可以提供更具体的说明。


0

在我的团队中,当发生这种情况时,本地问题就不成问题了。用户的ssh密钥和/或访问权限未在其连接到的服务器上正确配置(在我们的情况下是托管平台)。出于某种原因,这会触发提示输入不存在的ssh密钥。

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.