如何解决“sign_and_send_pubkey:签名失败:代理拒绝操作”?
Posted
技术标签:
【中文标题】如何解决“sign_and_send_pubkey:签名失败:代理拒绝操作”?【英文标题】:How to solve "sign_and_send_pubkey: signing failed: agent refused operation"? 【发布时间】:2017-10-30 04:56:58 【问题描述】:使用 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"
不返回任何内容。
【问题讨论】:
【参考方案1】:在客户端机器上运行 ssh-add
,这会将 SSH 密钥添加到代理。
通过ssh-add -l
(再次在客户端)确认确实已添加。
【讨论】:
天哪,花了两个小时试图解决这个问题,这就是它的全部!修复了 bitbucket 和 acquia ssh 连接 这里没有完全修复它,因为我使用gpg-agent
来实现 SSH 功能。我已经在gpg-agent.conf
中有一个enable-ssh-support
,但仍然有相同的错误消息。我在邮件列表上找到了运行这个:gpg-connect-agent updatestartuptty /bye
:bugs.debian.org/cgi-bin/bugreport.cgi?bug=835394
我只需要杀死 gpg-agent 然后再次运行它。
当您生成新的 SSH 密钥时,必须调用 ssh-add
以使 ssh-agent
知道新的私钥(根据 linux.die.net/man/1/ssh-agent)。
太棒了!我已经重新创建了我的 SSH 密钥,这开始发生了。在ssh-add
之后,它起作用了!谢谢。【参考方案2】:
将 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/*
【讨论】:
我的.ssh/
没有所需的权限,因为我自己手动创建了它。
似乎某些版本不允许您的密钥对其他用户可见。谢谢!
如果 .ssh/* 文件是由同一个用户(不是 root)创建的,我们不必担心,因为它具有所需的权限。
我必须感谢你。我刚才遇到了这个问题。用你的方法解决了。
谢谢。有效。你美:) @Anto【参考方案3】:
我在 Linux Ubuntu 18 中遇到了同样的问题。从 Ubuntu 17.10 更新后,每个 git 命令都会显示该消息。
解决方法是确保你对id_rsa
和id_rsa.pub
有正确的权限。
使用stat --format '%a' <file>
检查当前的chmod 编号。
id_rsa
应该是 600,id_rsa.pub
应该是 644。
要更改文件的权限,请使用
chmod 600 id_rsa
chmod 644 id_rsa.pub
这解决了我的更新问题。
【讨论】:
我在将 Ubuntu 从 16.04 LTS 迁移到 18.04 LTS 后遇到了这个问题,这个解决方案对我有用。 这里也一样,在将 Ubuntu 更新到 18.04 后,我遇到了这个问题。此解决方案修复它。 客户端认证过程中何时使用id_rsa.pub
?
如果你有很多键,你应该在~/.ssh
:chmod 600 id_*
里面使用这样的东西
首先检查密钥 $ ssh-add -l 如果一切正常,然后更新这些权限。【参考方案4】:
运行以下命令解决此问题。
它对我有用。
chmod 600 ~/.ssh/id_rsa
【讨论】:
谢谢,这对我有用!【参考方案5】:我在使用 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'"
或者只是睡眠/暂停
重置 pin 条目 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'"
【讨论】:
谢谢。几天前我遇到了这个问题,我像你一样使用 gpg 并在我的 ~/.zshrc 上评论了gpg-connect-agent updaterstartuptty /bye > /dev/null
,取消注释这一行解决了我的问题。
你的传奇。你到底是怎么找到解决这个问题的?太隐晦了!【参考方案6】:
我曾经遇到过和你一样的问题,我就是通过以下步骤解决的。
-
chmod 700 ~/.ssh
chmod 600 ~/.ssh/*
ssh-copy-id user@ip
ssh-agent -s
ssh-添加
【讨论】:
只要我的密钥文件的 chmod 600 就足够了。那是多么愚蠢的错误信息,然后来自 SSH 通信!!! OMG. 我很惊讶 OpenSSH 只是模棱两可地报告"agent refused operation"
的密钥文件权限不安全。 </double_facepalm>
【参考方案7】:
对于这个错误:
# 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 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.
谢谢。
【讨论】:
【参考方案8】:首先
ssh-add
然后
ssh user@ip
这对我有用
【讨论】:
【参考方案9】:出现 SSH 错误可能有多种原因:
sign_and_send_pubkey:签名失败:代理拒绝操作
其中一些可能与其他答案突出显示的问题有关(请参阅此线程答案),其中一些可能被隐藏,因此需要更仔细的调查。
在我的情况下,我收到以下错误消息:
sign_and_send_pubkey:签名失败:代理拒绝操作
user@website.domain.com:权限被拒绝(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
的公钥文件,这似乎是我的问题,因为我的公钥文件不包含 -cert
后缀。
长话短说:在我的情况下,修复只是为了确保公钥文件按预期命名。如果不调试连接,我永远不会怀疑。
底线是使用 SSH 详细模式(-v 选项)找出问题所在,可能有多种原因,在此/另一个线程上找不到。 p>
【讨论】:
【参考方案10】:是的。在客户端机器上运行 ssh-add。 然后重复命令 ssh-copy-id userserver@012.345.67.89
【讨论】:
【参考方案11】:我也收到了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
【讨论】:
【参考方案12】:这应该是一个超级用户的问题。
是的,我在 MacOSX SourceTree 中遇到了完全相同的错误,但是,在 iTerm2 终端中,一切正常。
但是,问题似乎是我有 两个 ssh-agent
s 正在运行;(
第一个是 /usr/bin/ssh-agent
(又名 MacOSX),然后是 HomeBrew 安装的 /usr/local/bin/ssh-agent
正在运行。
从 SourceTree 启动终端,让我看到 SSH_AUTH_SOCK
中的差异,使用 lsof
我找到了两个不同的 ssh-agent
s,然后我能够将密钥(使用 ssh-add
)加载到系统默认ssh-agent
(即/usr/bin/ssh-agent
),SourceTree又开始工作了。
【讨论】:
【参考方案13】:对我来说,问题是错误地将公钥复制/粘贴到 Gitlab 中。该副本产生了额外的回报。确保您粘贴的是单行键。
【讨论】:
【参考方案14】:我需要分享,因为我花了太多时间寻找解决方案
这是解决方案:https://unix.stackexchange.com/a/351742/215375
我正在使用这个命令:
ssh-keygen -o -t rsa -b 4096 -C "email@example.com"
gnome-keyring 不支持生成的密钥。
删除-o
参数解决了问题。
【讨论】:
【参考方案15】:在我的情况下,问题是 GNOME 密钥环为要使用的 ssh 密钥持有无效的密码。在花费大量时间解决此问题后,我运行seahorse
并找到包含空字符串的条目。我只能猜测这是由于在第一次使用时输入错误密码造成的,然后可能会取消请求者左右以回退到命令行。使用正确的密码更新条目立即解决了问题。删除该条目(从“登录”密钥环)并在第一个提示时重新输入密码(并选中相应的复选框)也可以解决此问题。现在代理从名为“login”的登录密钥环中解锁的正确密码,并且不再要求密码或“拒绝操作”。当然是 YMMV。
【讨论】:
【参考方案16】:这里有什么作用:在客户端上
1) ssh-添加
2) ssh-copy-id 用户@服务器
密钥是在前一段时间使用普通的“ssh-keygen -t rsa”创建的 我 sw 错误消息是因为我在没有先运行 ssh-add 的情况下将我的 ssh 公钥从客户端复制到服务器(使用 ssh-id-copy),因为我错误地认为我早先添加了它们。
【讨论】:
【参考方案17】:对于最近升级到“现代”ssh 版本的用户的快速说明 [OpenSSH_8.1p1,OpenSSL 1.1.1d FIPS 2019 年 9 月 10 日] - 随 fedora 31 提供,似乎不再接受旧的 DSA SHA256 密钥(我的日期为 2006 !) - 创建了一个新的 rsa 密钥,公共添加到授权,私人在客户端,一切正常。
感谢之前的建议,尤其是 ssh -v 非常有用
【讨论】:
您绝对应该摆脱 【参考方案18】:正如其他人所提到的,此错误可能有多种原因。
如果您使用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
如果 PIV 身份验证已过期,或者您已移除并重新插入 PIV 卡,则从 ssh 获取。
在这种情况下,如果您尝试执行另一个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
【讨论】:
以上是关于如何解决“sign_and_send_pubkey:签名失败:代理拒绝操作”?的主要内容,如果未能解决你的问题,请参考以下文章
powershell:sign_and_send_pubkey:签名失败:代理拒绝操作
ssh出错 sign_and_send_pubkey: signing failed: agent refused operation
git添加遇到问题 sign_and_send_pubkey: signing failed: agent refused operation Permission denied (publicke
ssh出错 sign_and_send_pubkey: signing failed: agent refused operation