[已解决] Linux 中的权限被拒绝 (publickey) SSH 错误
本快速教程向您展示如何修复 Linux 上的 ssh 错误“sign_and_send_pubkey:签名失败:代理拒绝操作权限被拒绝(公钥)”。
此快速教程向您展示如何修复 Linux 上的 ssh 错误“sign_and_send_pubkey:签名失败:代理拒绝操作权限被拒绝(公钥)”。
如果您尝试通过 SSH 连接到远程服务器,您可能会遇到权限被拒绝错误。发生此错误的原因有多种。
远程系统上禁用基于密码的身份验证
您的公钥未添加到服务器,该服务器仅允许基于密钥的授权
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 : Permission denied (publickey).
如果您遇到从其他来源复制 SSH 密钥的类似情况,让我向您展示如何修复此 SSH 错误。
正确的 ~/.ssh 文件夹及其内容的文件权限
根据经验,您可以对 ssh 目录及其文件(私钥、公钥、known_hosts、ssh 配置文件等)设置以下权限
- .ssh directory
700((drwx-----)
- public keys
第644章(-rw-r--r--)
- private keys
600(-RW--------)
- authorized_keys
600(-RW--------)
- known_hosts
600(-RW--------)
- config
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。此时,它会要求您的管理员密码来解锁密钥。输入您的管理员密码,您就可以开始了。
这也给我一个教训,复制粘贴文件是一个坏主意,应该进行适当的备份,否则所有文件都将具有危险的 777 权限。我必须递归地更改整个主目录的文件权限,相信我,这不是一件好事。
正如我之前所说,导致此错误的原因可能有多种。对于与打开文件权限相关的问题,此修复应该可以帮助您修复 SSH 的权限被拒绝(公钥)错误。如果您有兴趣,可以阅读更多有关 SSH 基础知识的内容。
请在评论部分告诉我该修复是否对您有效。还建议您对在其他计算机上复制 ssh 密钥的看法。