Ubuntu 16.04 ssh:sign_and_send_pubkey:签名失败:代理拒绝操作

我只是通过从我的系统中彻底擦除Ubuntu 15分区,将我的Ubuntu系统从15.10升级到16.04。

在安装Ubuntu 16.04之后,我重新创建了我的ssh密钥,因为我忘记备份它们,但每当我尝试使用ssh时,我得到sign_and_send_pubkey: signing failed: agent refused operation这有点烦人,因为它让我通过我的ssh服务器,但是git拒绝使用ssh推送代码。

我已经使用ssh-copy-id将密钥推送到服务器。

我连接的服务器是通过do-release-upgrade命令升级的Ubuntu 16.04服务器。 任何帮助将不胜感激。

看起来ssh-agent已经运行但它找不到任何附加的密钥。 要解决这个问题,请将私钥标识添加到身份validation代理中,如下所示:

 ssh-add 

然后你可以ssh到你的服务器。

此外,您还可以查看当前添加的所有身份的指纹列表:

 ssh-add -l 

我有同样的问题(相同的症状)

 sam@xxxxx:~/.ssh$ ssh centos@123.123.123.123 sign_and_send_pubkey: signing failed: agent refused operation Permission denied (publickey,gssapi-keyex,gssapi-with-mic). 

……但解决方案不同。

问题来自使用GNOME-KEYRING。 可以在此处阅读引用该解决方案的post。

简而言之:

  1. 通过在ssh命令前添加SSH_AUTH_SOCK = 0来检测问题。 sam @ xxxxx:〜/ .ssh $ SSH_AUTH_SOCK = 0 ssh centos@123.123.123.123
  2. 如果它成功连接。 打开应用程序启动应用程序(例如,使用桌面的搜索function)并禁用gnome-keyring。
  3. 重启

该页面提供了其他细节,以防不同解决方案出现类似问题。

我收到了sign_and_send_pubkey: signing failed: agent refused operation在登录多个服务器时sign_and_send_pubkey: signing failed: agent refused operation , 在Stack Overflow上阅读VonC的答案以获取有关相关错误的更多信息,我的解决方案是删除gnome-keyring,从ssh-agent中删除身份并重新启动。

 sudo apt-get autoremove gnome-keyring ssh-add -D 

然后我的所有钥匙都开始完美地工作了。

更新:

临时解决方案,无需卸载密钥环

如果您想保留gnome-keyring并且您有agent refused operation错误,请使用:

 eval `ssh-agent -s` ssh-add 

或者使用SSH_AUTH_SOCK=0 ssh your-server

永久解决方案,无需卸载密钥环

如果可以,gnome-keyring与4096位RSA密钥兼容,所以只需生成一个新密钥:

 ssh-keygen -t rsa -f ~/.ssh/your-key-name -b 4096 -v -C root 

将公钥上传到服务器

 $ ssh-copy-id -i ~/.ssh/your-key-name.pub root@12.34.56.78 

将ssh密钥添加到代理

 ssh-add ~/.ssh/your-key-name 

这应该没有任何额外的黑客工作,并且gnome-keyring可以保持安装。

(-C [用户名]是可选的,但Google Cloud等提供商要求)

简单解决方案

我在Ubuntu 18.04遇到了同样的问题。 这都是关于客户端私钥的权限

 $ ssh root@192.168.1.1 sign_and_send_pubkey: signing failed: agent refused operation 

文件权限太开放(0644)。

以下命令解决了它:

 chmod 600 ~/.ssh/id_rsa 

在我的系统上(也是Ubuntu 16.04,试图连接到github),我的.ssh文件夹中有一个文件id_ed25519,它使ssh-add失败:

 $ ssh-add Identity added: ~/.ssh/id_rsa (~/.ssh/id_rsa) Could not add identity "~/.ssh/id_ed25519": communication with agent failed 

删除文件~/.ssh/id_ed25519* (不再需要它们,它来自早期测试)一切都恢复正常。

升级到Ubuntu 18.04后,我得到了同样的错误sign_and_send_pubkey: signing failed: agent refused operation 。 原来它是由ssh键的权限太开放引起的。 以下命令为我解决了chmod 600 .ssh/id_rsa

发生在我身上,因为我的私钥有密码。 不得不运行ssh-add然后它要求密码并正确添加。 但是,当ssh到一台机器时,它现在不会要求我的密码。

将Fedora 26升级到28后,我面临同样的问题。 而且没有日志文件

 no /var/log/secure no /var/log/messages antop@localmachine  ~  ssh root@ocp1.example.com sign_and_send_pubkey: signing failed: agent refused operation root@ocp1.example.com's password: 

错误消息未指出实际问题。 问题解决了

 chmod 700 ~/.ssh chmod 600 ~/.ssh/* 

添加评论,因为我对ed25519密钥有同样的问题。 问题确实是gnome-keyring。 要解决这个问题,我做了以下事情:

  • “启动应用程序”中未经检查的ssh-key-agent(gnome-keyring)
  • 杀死ssh-agent和gnome代理:( killall ssh-agent; killall gnome-keyring-daemon)
  • 重新启动守护进程:( eval ssh-agent -s
  • 添加密钥:$ ssh-add id_ed25519输入id_ed25519的密码:添加的身份:id_ed25519
  • 利润!!

我尝试了一些东西,其中包括ssh-add,重置SSH(在服务器上删除.ssh /等等,但没有运气。所以事实certificate我只需要在它上面睡一晚。它有所帮助!为什么?我猜服务器上运行的ssh-agent在其缓存中有一些东西,当晚用当前正确的值刷新。无论如何,它现在就像一个魅力。要结束,它就这样做了(Ubuntu 16.04 on localhost, 14.04在服务器上)。

 # on local host: $ ssh-keygen # (yes, overwrite the default file, and let the passphrase be empty) $ ssh-copy-id ***.***.*.** # (insert proper server IP address) # now test $ ssh ***.***.*.** # this should have erected in .ssh/ on the server: # -rw------- 1 *** *** 2000 aug. 11 09:55 authorized_keys # no other magic going on! :) 

我最终删除了我已知的主机文件,它工作正常。 不得不再次输入密码,但它最终接受了正确的密码。 这是在新安装之后。

这是2018年末,这个错误或其变种仍然困扰着Xubuntu 16.04,而且很可能是其他版本的Xenial。 如果它也存在于18.04中,我也不会感到惊讶! 它自2009年以来一直以某种forms存在,而Karmic Koala则存在。 影响了Redhat,Debian和Ubuntu。 不要相信我的话,看看公众bugtrackers:

https://bugs.launchpad.net/ubuntu/+source/gnome-keyring/+bug/470456

在那个bug,你也找到其他3的列表:

参考文献:

http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=523322

https://bugzilla.redhat.com/show_bug.cgi?id=508286

https://bugzilla.gnome.org/show_bug.cgi?id=576700

在我的情况下,最明显的症状是无法使用带密码短语的ssh密钥。 它可能会影响一些,因为故障可以防止ssh键加载! 我没有权限问题,这都是gnome-keyring。 我的密钥(是的它拒绝了几个,对于不同的SSH服务器!)权限都是600(rw为所有者,没有为组或其他),如许多答案中所述。 所以我无法改变那里。

在Xubuntu中,有一种方法可以禁用启动项。 通常也可以在Unity / Gnome / KDE中使用,但我没有安装那些,所以无法给出具体步骤。 不确定其他桌面。 我没有禁用来自Gnome的SSH代理,GPG代理和其他项目以及其他相关错误,而是关闭了所有Gnome启动项。 对某些人来说可能是矫枉过正或者不是一个选择,但是SSH会在下次重启时恢复正常工作!

  1. 打开Whisker主菜单 – >设置 – >会话和启动。
  2. 单击右侧的最后一个“高级”选项卡。
  3. 取消选中(关闭)启动时启动Gnome服务。
  4. 关闭并重启。 注销也可以这样做,但重启应该是肯定的。

上面描述的GUI屏幕截图:

图片

所以,既然我上面提到了我的修复,我希望有人能解决它。

Ubuntu已经certificate未能将它压得很好,因为有很多版本的门票声称已修复,更多的是说“回归”,它又回来了。

Debian可能想要打它(洗手),因为它不是它们,上游是Gnome。

Redhat可能只有付费客户才能使用。 因为,从历史上看,Redhat是付费Gnome开发人员的最大雇主,乍一看是慷慨的。 直到你意识到这意味着他们有经济激励永远不会把这样的修复程序放到免费版本中,继续销售Redhat订阅。

Gnome可能是最容易上游修复它的人,然后其他人可以测试和打包,而无需自己编写一行代码。 但是我读过的门票说包裹已经萎靡多年而没有官方维护者! 现在自愿这样做的两个人(谢谢)几乎和设计替代者一样忙。 为什么不修理一个瘪胎,即使需要一年时间(已经十年了!)而不是先重新发明轮胎?!

SSH-ADD

适合我。 但是要确定

SSH代理

在跑。