我无法通过 SSH 密钥登录我的服务器。
我使用 ssh-copy-id 将公钥 name.pub 复制到我的服务器。如果我随后运行ssh -i name.key root@server
,我必须插入服务器的密码,而不是通过密钥进行身份验证。
在自定义端口上运行调试模式 sshd 的输出是这里。
我检查了几个问题(已删除,因为这被标记为垃圾邮件),其中接受的答案是关于权利问题的,但我不认为我有这样的问题。我的桌面不会抱怨密钥太开放,服务器上的 .ssh 文件夹和authorized_keys 分别拥有权限 700 和 600。
最后一点是,密钥是使用 生成的ssh-keygen -m pem
,并且公钥使用以下命令更改为 PEM 格式ssh-keygen -f name.key -e -m pem > name.pub
为什么 SSH 无法通过 SSH 密钥对我进行授权,如何解决此问题?
答案1
看来我使用将ssh-keygen -f name.key -e -m pem > name.pub
公钥转换为 PEM 格式导致了这个问题。将公钥保留为默认格式确实ssh-keygen
可以让我成功地通过密钥进行身份验证。
答案2
如果我然后运行
ssh -i name.key root@server
,我必须插入服务器的密码
我对这里发生的情况的猜测是,由于某种原因密钥身份验证不起作用,并且您看到的密码提示只是一个后备。
您可以ssh
通过运行以下命令来强制使用您的密钥:
ssh -vv -o "IdentitiesOnly=yes" -i <private key filename> <hostname>
在这种情况下,-vv
还会为您提供调试输出,这应该会告诉您密钥身份验证失败的原因。
您可能想尝试PasswordAuthentication=no
代替IdentitiesOnly
上面的属性来禁用密码身份验证作为客户端选项。
当您确认密钥身份验证有效后,您可能希望完全禁用使用密码进行身份验证的可能性。这可以通过PasswordAuthentication no
设置在全局完成/etc/ssh/sshd_config
。请注意,在确认基于密钥的身份验证有效之前,不应执行此操作,因为如果您没有其他方式访问服务器(例如虚拟控制台),这可能会将您锁定在服务器之外。
您所看到的问题的一个常见原因是您尝试对错误的用户进行身份验证。例如,Ubuntu 系统通常会将作为云配置的一部分添加的任何 SSH 密钥添加给用户ubuntu
,但不会添加给 root,因此请确保实际上是 root 在其authorized_keys
文件中包含您的公钥。