SSH 密钥要求我输入密码吗?

SSH 密钥要求我输入密码吗?

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

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

有人知道如何解决这个问题吗?我是不是输入了错误的命令?我正尝试使用 ssh 连接到我在 ~/.ssh/config 文件中设置的服务器(正确设置,因为这个完全相同的设置在另一台服务器上有效),密钥存储在 ~/.ec2/key.ppk 中。

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

答案1

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

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

ssh-rsa AAAAB3NzaC1y...... etc

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

另一个猜测是没有选择正确的键。我会尝试以下方法:

使用重置密钥密码ssh-keygen,如下所示......

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

这将确认您的密钥上是否确实已经有密码短语。

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

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

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

答案2

您可以运行 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;

我取出它回显的 3 行并执行它们。另一种方法是取出 -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)

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

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

答案3

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

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

测试:

ssh-keygen -yf id_rsa

答案4

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

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

我想这意味着最佳做法是通过网络 SSH 传输文本文件,而不是尝试在终端窗口之间复制和粘贴。

相关内容