此诊断消息显然会因多种不同原因而被打印,这使得调试变得非常困难。它之前在 SO 上出现过:
MAC 操作系统上的 ssh-agent它更多地是关于一般的 ssh-agent 使用,并带有令人失望的建议“根据传闻,这只是一个警告”,这并不能帮助我们解决导致警告的任何问题。
sign_and_send_pubkey:签名失败:代理拒绝操作(ePass2003)主要是“如何启用代理转发”以及一些限制文件权限的建议。我检查了后者(见下文),但没有成功。
错误出现在安装新的 Dev Shell 后 Git SSH 无法工作因为有关主机密钥更改的实际错误被忽略了。
Github 上有一个问题归根结底是 PuTTY、Pageant 和 WSL 之间的争斗。这里不使用 WSL,虽然 PuTTY 确实被使用,但不是在这个场景中。
我的本地主机是运行 OpenSSH_9.0p1 的 Cygwin,我从 Bash 配置文件中执行标准ssh-agent
舞蹈,然后执行ssh-add privkey1 privkey2 ...
。ssh-add -L
本地运行打印密钥时没有任何错误。
此 Cygwin 安装中没有/etc/ssh/ssh_config
或等效项。相关行~/.ssh/config
:
IdentitiesOnly yes
ForwardAgent yes
# There are multiple remote hosts, but they all use identical
# configurations (and different keys)
Host remote-host
Hostname 12.34.56.78, User, etc, elided
IdentityFile path/to/private/key
ForwardAgent yes # redundant, I know
AddKeysToAgent yes
以详细模式连接到远程主机显示提供和接受的正确身份
debug1: identity file path/to/private/key type -1
debug1: identity file path/to/private/key-cert type -1
... [all the host key exchange stuff]
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic
debug1: Next authentication method: publickey
debug1: Trying private key: path/to/private/key
debug1: identity added to agent: path/to/private/key
Authenticated to 12.34.56.78 ([12.34.56.78]:22) using "publickey".
debug1: channel 0: new [client-session]
debug1: Requesting [email protected]
debug1: Entering interactive session.
debug1: pledge: filesystem
debug1: client_input_global_request: rtype [email protected] want_reply 0
debug1: client_input_hostkeys: searching known_hosts for 12.34.56.78 / (none)
debug1: Requesting authentication agent forwarding.
debug1: client_global_hostkeys_private_confirm: server used untrusted RSA signature algorithm ssh-rsa for key 0, disregarding
我加上了最后一句,因为它是仅有的登录期间打印的诊断消息;因为它与主机密钥有关,所以我不认为它与代理问题有关,但我愿意接受建议。
一些远程主机正在运行 Ubuntu 22.04 和 OpenSSH_8.9p1,并且没有任何问题:
$ ssh-add -L
ssh-rsa AAAAB3Nza...ZyzLVJ3ylFeGDMfb path/to/private/key
但是,其他远程主机正在运行 Amazon Linux 2(CentOS 的仿制品)和 OpenSSH_7.4p1:
$ ssh-add -L
error fetching identities for protocol 1: agent refused operation
ssh-rsa AAAAB3Nza...ZyzLVJ3ylFeGDMfb path/to/private/key
OpenSSH_7.4p1 版本比我理想中的版本要旧一些。我查看了https://www.openssh.com/releasenotes.html对于所有提及 ssh-add/ssh-agent 的内容,自 7.4 版发布以来似乎没有任何东西可以解决这个问题。所以也许这是我的问题。
远程服务器上的和ssh_config
文件sshd_config
是相同的(极其简单的)设置,除了
Protocol 2
GSSAPIAuthentication no
AllowAgentForwarding yes
以下内容未受任何影响。特别注意,我们限制客户端使用 SSH 协议 2。
在我的本地主机上,~/.ssh
是 0700,没有 Windows ACL。所有私钥文件都使用 Windows ACL 来锁定权限,这样 PuTTY/Pageant 就不会抱怨域管理员可以看到密钥,哦不;该文件夹位置是使用“acl”安装选项安装在 Cygwin 内部的,因此它们都在 Cygwin 中显示为 0400,没有其他getfacl
权限。所以我不思考这是一个权限问题,因为它们都受到严格限制,就像 SSH 通常喜欢的那样。
在远程主机上,~/.ssh
是 0700,~/.ssh/authorized_keys
是 0600。
我启动了本地 ssh-agent 来-d
查看其调试消息,添加了适当的密钥,然后登录到 AWS Linux / CentOS 框。跟踪ssh-add -L
远程框上的进程产生了以下代码片段:
socket(AF_UNIX, SOCK_STREAM, 0) = 3
fcntl(3, F_SETFD, FD_CLOEXEC) = 0
connect(3, {sa_family=AF_UNIX, sun_path="/tmp/ssh-5uCspahMpL/agent.27042"}, 110) = 0
write(3, "\0\0\0\1", 4) = 4
write(3, "\1", 1) = 1
read(3, "\0\0\0\1", 4) = 4
read(3, "\5", 1) = 1
write(2, "error fetching identities for pr"..., 66error fetching identities for protocol 1: agent refused operation) = 66
并ssh-agent
在当地印刷了以下内容:
debug1: new_socket: type = CONNECTION
debug3: fd 5 is O_NONBLOCK
debug1: process_message: socket 1 (fd=5) type 27
debug2: process_extension: entering
debug2: process_ext_session_bind: entering
debug1: process_ext_session_bind: recorded ED25519 SHA256:wKemf...long...VaNY (slot 0 of 16)
debug1: process_message: socket 1 (fd=5) type 1
Unknown message 1
debug1: process_message: socket 1 (fd=5) type 11
debug2: process_request_identities: entering
debug3: identity_permitted: entering: key RSA comment "path/to/private/key", 1 socket bindings, 0 constraints
debug2: process_request_identities: replying with 1 allowed of 1 available keys
我一直在谷歌上搜索,试图弄清楚“未知消息 1”是什么意思,但没有太多解释。所以某物从 ssh-add 到 ssh-agent 触发未知消息响应,从而导致“代理拒绝连接”。
这是我可以修复/解决的问题吗,或者答案真的只是“7.4 和 8.9 之间悄悄发生了一些变化,而 Amazon Linux 2 不会升级主要软件包,因此会出现虚假警告,生活有时就是这么糟糕”?