我有一对公钥/私钥。它们都没有任何与之关联的密码。
每当我尝试使用私钥或公钥进行 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 传输文本文件,而不是尝试在终端窗口之间复制和粘贴。