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

How to solve "sign_and_send_pubkey: signing failed: agent refused operation"?

使用 SSH 密钥配置新的 Digital Ocean droplet。当我 运行 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.

user/.ssh/authorized_keys 确实也包含一个 ssh-rsa 密钥条目,但是 find -name "keynamehere" returns 什么都没有。

运行 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.

Verify or add again the public key in Github account > profile > 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 更新后,每个 git 命令都会显示该消息。

解决它的方法是确保您对 id_rsaid_rsa.pub 具有正确的权限。

使用stat --format '%a' <file>检查当前的chmod号。 id_rsa 应该是 600id_rsa.pub 应该是 644

要更改文件的权限,请使用

chmod 600 id_rsa
chmod 644 id_rsa.pub

这解决了我的更新问题。

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

出现 SSH 错误的原因可能有多种:

sign_and_send_pubkey: signing failed: agent refused operation

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

就我而言,我收到以下错误消息:

sign_and_send_pubkey: signing failed: agent refused operation

user@website.domain.com: Permission denied (publickey,gssapi-keyex,gssapi-with-mic)

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

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 的 public 密钥文件,这似乎是我的问题,因为我的 public 密钥文件找到了不包含 -cert 后缀。

长话短说:我的修复只是为了确保 public 密钥文件按预期命名。如果不调试连接,我永远不会怀疑这一点。

最重要的是使用 SSH 详细模式(-v 选项)找出问题所在,可能有多种原因,none 可能是在 this/another 线程上找到。

对我来说,问题是 Gitlab 中的 public 键的 copy/paste 错误。该副本生成了一个额外的 return。请确保您粘贴的是单行密钥。

我也遇到了 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.

我怀疑问题是由于我在 sway 配置中使用的 sleep+lock 命令导致 gpg 的 pin 条目 tty 无效

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

或者只是 sleep/suspend

重置 pin 条目 tty 以解决问题

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

以及我的 sway sleep+lock 命令的修复:

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

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

Here was the solution : 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" 的已解锁登录密钥环中获取正确的密码,并且不再要求密码或 "refuses operation"。当然是YMMV.

运行 下面的命令可以解决这个问题。

它对我有用。

chmod 600 ~/.ssh/id_rsa

这里的工作原理:在客户端上

1) ssh-add

2) ssh-copy-id user@server

密钥已在一段时间前使用普通 "ssh-keygen -t rsa" 创建 我发送错误消息是因为我在没有先使用 运行 ssh-add 的情况下将 ssh public 密钥从客户端复制到服务器(使用 ssh-id-copy),因为我错误地认为我已经添加了一些时间更早。

最近升级到 "modern" ssh 版本的人的快速说明 [OpenSSH_8.1p1,OpenSSL 1.1.1d FIPS 2019 年 9 月 10 日] - 随 fedora 31 一起提供,似乎不再接受旧版本DSA SHA256 密钥(我的日期是 2006 年!)- 创建了一个新的 rsa 密钥,public 添加到授权,在客户端私有,并且一切正常。

感谢之前的建议,尤其是 ssh -v 非常有用

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

如果您正在使用 SSH with Smart Card (PIV),并使用
将卡添加到 ssh-agent ssh-add -s /usr/lib64/pkcs11/opensc-pkcs11.so
你可能会得到错误
sign_and_send_pubkey: signing failed: agent refused operation
从 ssh 如果 PIV 身份验证已过期,或者如果您已移除并重新插入 PIV 卡。

在这种情况下,如果您尝试再执行一次 ssh-add -s,您仍然会收到错误消息:
Could not add card "/usr/lib64/opensc-pkcs11.so": agent refused operation

根据 RedHat Bug 1609055 - pkcs11 support in agent is clunky,您需要执行

ssh-add -e /usr/lib64/opensc-pkcs11.so
ssh-add -s /usr/lib64/opensc-pkcs11.so

首先 ssh-add 然后 ssh user@ip

这对我有用

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

  1. chmod 700 ~/.ssh
  2. chmod 600 ~/.ssh/*
  3. ssh-copy-id user@ip
  4. ssh-agent -s
  5. ssh-add

eval "$(ssh-agent -s)"
首先启动 ssh 代理

ssh-add
然后添加 ssh 密钥

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

至 work-around,禁用新的密钥交换算法(因此它具有安全优势)因此:

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

(或 SSH 配置中的相同。)

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

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

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

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

可以找到带有详细信息的原始答案here