SSH 密钥要求我输入密码?

lla*_*kin 39 linux ssh cygwin putty

我有一个公钥/私钥对。它们都没有任何与之相关的密码。

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

任何人都知道如何解决这个问题?我是否错误地输入了一些命令?我正在尝试使用存储在 ~/.ec2/key.ppk 中的密钥 ssh 进入我在 ~/.ssh/config 文件中设置的服务器(正确,因为这个完全相同的设置适用于另一台服务器)

我还尝试使用 puttygen.exe 生成一个带有密码的新私钥,然后使用该密钥,当我输入密码时,它仍然失败。

小智 31

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

最好的猜测是,您正尝试在ppkopenssh 中使用 putty 私钥 ( ) 密钥格式,这不起作用……如果是这种情况,PuTTYgen 具有用于 openssh 的导出选项。

ssh-rsa AAAAB3NzaC1y...... etc
Run Code Online (Sandbox Code Playgroud)

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

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

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

$ ssh-keygen -f ~/.ec2/key.ppk -p
Run Code Online (Sandbox Code Playgroud)

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

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

$ ssh host -i ~/.ec2/key.ppk -vvv
Run Code Online (Sandbox Code Playgroud)

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

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

dfr*_*kow 20

你可以运行 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;
Run Code Online (Sandbox Code Playgroud)

我取出了它回响的 3 行,并执行了它们。另一种方法是采用 -s 的输出:

$ eval `ssh-agent -s`
Run Code Online (Sandbox Code Playgroud)

然后我添加了我的凭据:

$ 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)
Run Code Online (Sandbox Code Playgroud)

现在代理提供凭据,而不是我必须输入密码。

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


nba*_*ari 5

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

sed  '/^$/d' /path/to/key > id_rsa
Run Code Online (Sandbox Code Playgroud)

测试:

ssh-keygen -yf id_rsa
Run Code Online (Sandbox Code Playgroud)

  • 天哪,这是我的问题。`-----END RSA PRIVATE KEY -----` 后面的一个额外换行符导致它在没有设置的密钥上询问密码! (2认同)

小智 4

当您设置公钥时,您可能(可能无意中)使用密码设置了它。

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

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