此快速教程向您展示如何在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
root@xxx.xxx.xxx.xx: Permission denied (publickey).
如果您遇到从其他来源复制SSH密钥的类似情况,让我向您展示如何修复此SSH错误。
更正 ~/.ssh 文件夹及其内容的文件权限
根据经验,您可以对 ssh 目录及其文件(私钥、公钥、known_hosts、ssh 配置文件等)设置以下权限
元素 许可
.ssh 目录 700 ((DRWX------)
公钥 644 (-rw-r-r-r–)
私钥 600 (-rw-------)
authorized_keys 600 (-rw-------)
known_hosts 600 (-rw-------)
配置 600 (-rw-------)
您可能没有所有文件,但您必须在此处拥有公钥和私钥。
现在让我们看看如何更改 ssh 密钥和其他文件的文件权限。
修复权限被拒绝(公钥)错误
所以问题出在这里的文件权限。你看,当我复制文件时,USB是Microsoft的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
同样,公钥不应具有组和其他的写入和执行权限。