Answers:
首先是具有密码短语的私钥。这将针对存储在远程服务器上的公钥进行验证。
最好的猜测是,您正在尝试将油灰私钥(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
这将使您对正在发生的事情有更多的了解。
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
.ppk
,它仍然是腻子格式,这让我感到困惑,因为它显示了各种错误,但没有直接提示我问题出在密钥格式上:stackoverflow.com/a/44391850/4752883
您可以运行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)
现在,代理提供了凭据,而无需我输入密码。
尝试查看服务器上的日志文件。请参阅/ var / log / 身份验证日志(例如,OpenSSH的/ var / log / authlog,尽管我已经看到某些操作系统使用Portable OpenSSH并使用/var/log/auth.log)并检查该文件的结尾。
我见过的最常见原因是权限错误(如TD1的回答所示),尽管其他问题可能是由于(存储在服务器上的)公共密钥不在正确的文件中,或者该密钥被注释掉了,或者用户名拼写错误。
暂时为帐户提供一个密码短语(对于进行故障排除)可能也很有用,只是在执行该操作时验证帐户是否可以成功登录。
如果查看日志文件并不能很快导致您解决问题,我建议您发布一个新问题(因为这是一个非常笼统的问题),其中包括日志文件中的特定详细信息,因此可以提供更具体的说明。
在我的团队中,当发生这种情况时,本地问题就不成问题了。用户的ssh密钥和/或访问权限未在其连接到的服务器上正确配置(在我们的情况下是托管平台)。出于某种原因,这会触发提示输入不存在的ssh密钥。