如何解决“sign_and_send_pubkey: signing failed: agent refused operation”?

用SSH密钥配置一个新的数字海洋液滴。当我运行ssh-copy-id时,得到如下结果:

ssh-copy-id user@012.345.67.89
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
sign_and_send_pubkey: signing failed: agent refused operation
user@012.345.67.89's password:


Number of key(s) added: 1


Now try logging into the machine, with:   "ssh 'user@012.345.67.89'"
and check to make sure that only the key(s) you wanted were added.

然而,当我尝试ssh时,会发生这种情况:

ssh user@012.345.67.89
sign_and_send_pubkey: signing failed: agent refused operation
user@012.345.67.89's password:

输入密码后,我可以正常登录,但这当然违背了创建SSH密钥的初衷。我决定看看ssh-agent服务器端,下面是我得到的:

user@012.345.67.89:~# eval `ssh-agent -s`
Agent pid 5715
user@012.345.67.89:~# ssh-add -l
The agent has no identities.

用户/。ssh/authorized_keys也包含ssh-rsa密钥条目,但是find -name "keynamehere"没有返回任何内容。

271431 次浏览

在客户端机器上运行ssh-add,这将向代理添加SSH密钥。

ssh-add -l(同样在客户端)确认它确实被添加了。

这应该是一个超级用户的问题。

对的,我在MacOSX SourceTree中有完全相同的错误,然而,在iTerm2终端中,事情工作得很好。

然而,问题似乎是我已经得到两个 ssh-agents运行;(

第一个是/usr/bin/ssh-agent(又名MacOSX的),然后也是HomeBrew安装/usr/local/bin/ssh-agent运行。

从SourceTree启动一个终端,允许我看到SSH_AUTH_SOCK中的差异,使用lsof我发现了两个不同的ssh-agent,然后我能够将键(使用ssh-add)加载到系统的默认ssh-agent(即。/usr/bin/ssh-agent), SourceTree又工作了。

升级Fedora 26到28后,我遇到了同样的问题。 以下日志缺失

/var/log/secure
/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/*

对于这个错误:

# git pull
sign_and_send_pubkey: signing failed: agent refused operation
git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.


Please make sure you have the correct access rights and the repository exists.

在Github帐户>配置文件> ssh中再次验证或添加公钥。

我是这样解决的:

# chmod 400 ~/.ssh/id_rsa


# ls  ~/.ssh/id_rsa -ls
4 -r--------. 1 reinaldo reinaldo 1679 Jul 26  2017 /home/reinaldo/.ssh/id_rsa


# git pull
remote: Counting objects: 35, done.
remote: Compressing objects: 100% (19/19), done.
remote: Total 35 (delta 9), reused 34 (delta 9), pack-reused 0
Unpacking objects: 100% (35/35), done.

谢谢你!

我在Linux Ubuntu 18中遇到了同样的问题。从Ubuntu 17.10 < em > < / em >更新后,每个git命令都将显示该消息。

解决这个问题的方法是确保你对id_rsaid_rsa.pub有正确的权限。

通过stat --format '%a' <file>检查当前的chmod编号。 对于id_rsa应该是600,对于id_rsa.pub应该是644。< / p >

更改文件使用的权限

chmod 600 id_rsa
chmod 644 id_rsa.pub

这解决了我更新的问题。

< p >是的。在客户端机器上运行ssh-add。 然后重复命令ssh-copy-id userserver@012.345.67.89

导致SSH错误的原因有很多:

Sign_and_send_pubkey:签名失败:代理拒绝操作

其中一些问题可能与其他答案所强调的问题有关(请参阅此线程的答案),其中一些问题可能被隐藏,因此需要更仔细的调查。

在我的情况下,我得到了以下错误消息:

Sign_and_send_pubkey:签名失败:代理拒绝操作

user@website.domain.com:权限被拒绝(publickey, gsapi -keyex, gsapi -with-mic)

找到真正问题的唯一方法是调用- v verbose选项,这将导致打印大量调试信息:

debug1: Connecting to website.domain.com [xxx.xxx.xxx.xxx] port 22.
debug1: Connection established.
debug1: identity file /home/user/.ssh/id_rsa.website.domain.com type 0
debug1: key_load_public: No such file or directory
debug1: identity file /home/user/.ssh/id_rsa.website.domain.com-cert type -1

请注意,说key_load_public: No such file or directory的行指的是下一行,而不是上一行。

所以SSH真正说的是,它找不到名为id_rsa.website.domain.com-cert的公钥文件,这似乎是我的情况下的问题,因为我的公钥文件不包含-cert后缀。

长话短说:在我的案例中,修复只是确保公钥文件按预期命名。如果不调试连接,我绝不会怀疑这一点。

底线是使用SSH verbose模式 (-v选项)来找出哪里出错了,可能有各种原因,在这个/另一个线程上都找不到。

对我来说,问题在于错误地将公钥复制/粘贴到Gitlab中。复制产生了额外的回报。确保你粘贴的是一行键。

我也得到了一个sign_and_send_pubkey: signing failed: agent refused operation错误。但在我的情况下,问题是一个错误的pinentry路径。

在我的${HOME}/.gnupg/gpg-agent.conf中,pinentry-program属性指向一个旧的pinentry路径。纠正那里的路径并重新启动gpg-agent为我修复了它。

我通过跟踪journalctl -f的日志发现了它。像下面这样的日志行包含了错误的路径:

Jul 02 08:37:50 my-host gpg-agent[12677]: ssh sign request failed: No pinentry <GPG Agent>
Jul 02 08:37:57 my-host gpg-agent[12677]: can't connect to the PIN entry module '/usr/local/bin/pinentry': IPC connect call failed

当使用gpg-agent作为我的ssh-agent并使用gpg子密钥作为我的ssh密钥https://wiki.archlinux.org/index.php/GnuPG#gpg-agent时,我有错误。

我怀疑这个问题是由我在摇摆配置中使用的sleep+lock命令导致的gpg的无效pin输入tty引起的

bindsym $mod+Shift+l exec "sh -c 'gpg-connect-agent reloadagent /bye>/dev/null; systemctl suspend; swaylock'"

或者只是睡眠/暂停

重置引脚输入tty以解决问题

gpg-connect-agent updatestartuptty /bye > /dev/null

和修复我的摇摆睡眠+锁定命令:

bindsym $mod+Shift+l exec "sh -c 'gpg-connect-agent reloadagent /bye>/dev/null; systemctl suspend; swaylock; gpg-connect-agent updatestartuptty /bye > /dev/null'"

我需要分享,因为我花了太多时间寻找解决方案

这是解决方案:https://unix.stackexchange.com/a/351742/215375

我正在使用这个命令:

ssh-keygen -o -t rsa -b 4096 -C "email@example.com"

Gnome-keyring不支持生成的密钥。

删除-o参数解决了这个问题。

在我的例子中,问题是GNOME密匙环持有要使用的ssh密钥的无效密码短语。在花了大量的时间来解决这个问题后,我运行seahorse,发现该条目持有空字符串。我只能猜测,这是由于在早些时候第一次使用时键入了错误的密码短语,然后可能取消了请求程序,以便返回到命令行。用正确的密码短语更新条目立即解决了这个问题。删除该条目(从“login”密匙环中)并在第一个提示符处重新输入密码(并选中适当的复选框)也解决了这个问题。现在代理从名为“login”的登录密匙环解锁获得正确的密码短语,不再要求密码短语或“拒绝操作”。当然是YMMV。

运行以下命令解决此问题。

这对我很管用。

chmod 600 ~/.ssh/id_rsa

这里工作的是:在客户端上

1) ssh-add

2) ssh-copy-id user@server

密钥已经在一段时间前用普通的"ssh-keygen -t rsa"创建了 我sw错误消息,因为我复制了我的ssh公钥从客户端到服务器(ssh-id-copy)没有运行ssh-add首先,因为我错误地认为我已经添加了他们一段时间之前

对于那些最近升级到“现代”ssh版本[OpenSSH_8.1p1, OpenSSL 1.1.1d FIPS 2019年9月10日]-与fedora 31一起提供,似乎不再接受旧的DSA SHA256密钥(我的日期是2006年!)-创建了一个新的rsa密钥,公共添加到授权,客户端私有,一切都完美地工作。

感谢之前的建议,特别是SSH -v非常有用

正如其他人所提到的,这个错误可能有多种原因。

如果你正在使用带智能卡的SSH (PIV),并且使用
将卡添加到ssh-agent ssh-add -s /usr/lib64/pkcs11/opensc-pkcs11.so
您可能会得到错误
sign_and_send_pubkey: signing failed: agent refused operation

.如果PIV认证已经过期,或者您已经拔插了PIV卡 在这种情况下,如果你尝试执行另一个ssh-add -s,你仍然会得到一个错误:
Could not add card "/usr/lib64/opensc-pkcs11.so": agent refused operation < / p >

根据RedHat Bug 1609055 -代理中的pkcs11支持是笨拙的,你反而需要做

ssh-add -e /usr/lib64/opensc-pkcs11.so
ssh-add -s /usr/lib64/opensc-pkcs11.so
< p >第一 ssh-add 然后 ssh user@ip < / p >

这对我很有效

我曾经遇到过和你一样的问题,我通过以下步骤解决了它。

  1. Chmod 700 ~/.ssh
  2. Chmod 600 ~/.ssh/*
  3. ssh-copy-id user@ip
  4. ssh-agent - s
  5. ssh-add
< p > eval "$(ssh-agent -s)"
首先启动ssh代理

< p > ssh-add
然后添加ssh密钥

另一个原因是OpenSSH v9.0新默认的NTRU primes + x25519密钥交换,结合gpg-agent(至少在v2.2.32)。

为了解决问题,禁用新的密钥交换算法(因此它的安全效益),如下:

ssh -o 'KexAlgorithm -sntrup761x25519-sha512@openssh.com' [...]

(SSH配置也一样)

cf。https://unix.stackexchange.com/questions/701131/use-ntrux25519-key-exchange-with-gpg-agent

根据Github安全博客,SHA-1的RSA密钥不再被接受。

使用以下命令创建新的带有ECDSAencryption的SSH密钥,并将其添加到Github。

ssh-keygen -t ecdsa -b 521 "your_email@example.com"

原始答案的细节可以找到在这里

这可能导致1password不支持ssh-rsa密钥交换。出于安全考虑,它们支持更新的rsa-sha-512rsa-sha-256

https://1password.community/discussion/comment/632712/#Comment_632712

注意如何命名ssh密钥文件

如果你有多个密钥对,你可以使用ssh-keygen-f <key name>来命名输出文件。在我的例子中,我将我的键命名为username@organizationusername@organization.pub,这有助于保持多个键对的组织。

问题是ssh代理不喜欢@字符。

在我的情况下,这导致sign_and_send_pubkey: signing failed: agent refused operation错误,并阻止会话密匙环与ssh代理交互。

重命名我的密钥文件username_at_organization修复了这个问题。