修复 Linux 中的 Permission denied (publickey) SSH 错误

本快速教程向您展示如何在 Linux 上修复 ssh 错误“sign_and_send_pubkey:signing failed:agent denied operation Permission denied (publickey)”。

如果您尝试通过以下方式连接到远程服务器 SSH,您可能会遇到权限被拒绝错误。 由于多种原因,可能会发生此错误。 此问题的修复取决于错误背后的确切原因。

就我而言,我将公钥和私钥存储在我的 Ubuntu 16.04 桌面。 在 Ubuntu 18.04 发布后,我决定升级到这个较新的版本。 我更喜欢全新安装而不是发行版升级。

因此,我对我的主目录的主文件夹进行了备份,包括在外部磁盘上具有公钥和私钥的 .ssh 文件夹。

安装后,我在 Ubuntu 18.04 上启用了 SSH 并恢复了包括 SSH 密钥在内的所有内容。

现在,当我尝试使用 ssh 连接到远程服务器时,我认为它会立即工作,因为我拥有相同的公钥和私钥。

但它没有用。 SSH 给了我这个错误:

sign_and_send_pubkey: signing failed: agent refused operation
[email protected]: Permission denied (publickey).

如果您处于从其他来源复制 SSH 密钥的类似情况,让我向您展示如何修复此 SSH 错误。

更正 ~/.ssh 文件夹及其内容的文件权限

根据经验,您可以在 ssh 目录及其文件(私钥、公钥、known_hosts、ssh 配置文件等)上设置以下权限

元素允许
.ssh 目录700 ((drwx——)
公钥644 (-rw-r–r–)
私钥600 (-rw——–)
授权密钥600 (-rw——–)
已知主机600 (-rw——–)
配置600 (-rw——–)

您可能没有所有文件,但您必须在此处拥有公钥和私钥。

现在让我们看看如何更改 ssh 密钥和其他文件的文件权限。

修复权限被拒绝(公钥)错误

所以问题在于这里的文件权限。 你看,当我复制文件时,USB 是微软的 FAT 文件格式。 此文件不支持 UNIX/Linux 文件权限。

因此复制的 ssh 密钥的权限更改为 777。

对于 SSH, 文件权限太开放. 根本不允许对公钥或私钥拥有 777 权限。 这就是 SSH 在这里拒绝连接的原因。

ls -l .ssh
-rwxrwxrwx 1 abhishek abhishek 1766 Nov 12  2017 id_rsa
-rwxrwxrwx 1 abhishek abhishek  398 Nov 12  2017 id_rsa.pub
-rwxrwxrwx 1 abhishek abhishek 4214 Sep 21 21:39 known_hosts

私钥应该只对用户有读写权限,对组和其他人没有其他权限。

您应该使用 chmod 命令更改权限:

chmod 600 ~/.ssh/id_rsa

同样,公钥不应具有组和其他的写入和执行权限。

chmod 644 ~/.ssh/id_rsa.pub

现在您已经设置了正确的权限,您可以再次连接到 ssh。 这时候,它会问你 admin 解锁密钥的密码。 Enter 您的 admin 密码,你应该很高兴。

这也教会了我一个教训,即复制粘贴文件是一个坏主意,应该进行适当的备份,否则所有文件都将拥有危险的 777 权限。 我不得不递归地更改整个主目录的文件权限并相信我,这不是一件好事。

正如我之前所说,此错误可能有多种原因。 对于与打开文件权限相关的问题,此修复程序应该可以帮助您修复 SSH 的 Permission denied (publickey) 错误。 如果您有兴趣,可以阅读有关 SSH 基础知识的更多信息。

如果修复对您有用,请在评论部分告诉我。 还建议您对在其他计算机上复制 ssh 密钥的意见。