首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gpg-agent神秘地停止了远程系统上的工作代理,不再连接到ssh套接字。

gpg-agent神秘地停止了远程系统上的工作代理,不再连接到ssh套接字。
EN

Unix & Linux用户
提问于 2018-01-05 22:51:42
回答 1查看 2.9K关注 0票数 5

我使用本地系统上的yubikey nano在远程系统上进行加密/解密/签名,外加SSH代理转发。我记得这是一个熊的设置,但它已经完美无缺地工作了几个月。突然它断了。我的搜索都返回相同的链接,当我设置它时,但我被卡住了。

SSH代理转发令人费解的工作。远程系统显示如下:

代码语言:javascript
复制
REMOTE:$ ssh-add -L
ssh-rsa blahblah cardno:123

我可以从远程系统使用SSH登录到其他服务器,它使用nano (我知道这一点,因为它需要触摸才能启用代理签名)。我可以在本地系统的gpg-agent日志中看到有关SSH签名的日志。

但是,我根本无法让GPG签名/加密工作。如果我在远程系统上运行以下操作:

代码语言:javascript
复制
REMOTE:$ echo "$(uname -a)" |  gpg2 --armor --clearsign --default-key 0x1234
gpg: all values passed to '--default-key' ignored
gpg: no default secret key: No secret key
gpg: [stdin]: clearsign failed: No secret key

在本地gpg代理日志中,我没有看到有关尝试的日志。如果运行此命令,可以在本地gpg-agent日志中看到日志条目:

代码语言:javascript
复制
REMOTE:$ $ netcat  -U /home/user/.gnupg/S.gpg-agent
OK Pleased to meet you
RESET
OK
GETINFO PID
ERR 67109115 Forbidden 
POOP
ERR 67109139 Unknown IPC command 

这将导致本地代理中的这些日志:

代码语言:javascript
复制
2018-01-05 16:38:32 gpg-agent[865] DBG: chan_10 -> OK Pleased to meet you
2018-01-05 16:38:35 gpg-agent[865] DBG: chan_10 <- RESET
2018-01-05 16:38:35 gpg-agent[865] DBG: chan_10 -> OK
2018-01-05 16:38:45 gpg-agent[865] DBG: chan_10 <- GETINFO PID
2018-01-05 16:38:45 gpg-agent[865] DBG: chan_10 -> ERR 67109115 Forbidden 
2018-01-05 16:39:01 gpg-agent[865] DBG: chan_10 <- POOP
2018-01-05 16:39:01 gpg-agent[865] DBG: chan_10 -> ERR 67109139 Unknown IPC command 

如果我在远程系统上的gpg-连接代理上运行strace -f -F,它似乎是连接到/var/run中的套接字,而不是从本地系统在~/..gnupg/中转发的套接字。我尝试删除两个套接字,删除所有gpg代理进程,并将SSH远程转发更改为转到/var/run位置或~/..gnupg位置,但没有结果。我有可能把这些步骤搞砸了,我会再试一次,但我想知道是否有人知道答案,我想在下次休息的时候找到一个容易找到的职位。

地方系统:

代码语言:javascript
复制
Mac OS X 10.11.6
gpg installed with brew
gpg (GnuPG) 2.2.1
libgcrypt 1.8.1

远程系统:

代码语言:javascript
复制
ubuntu 17.10
gpg (GnuPG) 2.1.15
libgcrypt 1.7.8

编辑:好吧,我不知道是什么改变了,但是我把它单独放在一边,然后回来尝试再次切换套接字,现在它开始工作了:

代码语言:javascript
复制
REMOTE:$ $ echo "$(uname -a)" |  strace -f -F gpg2 --armor --clearsign --default-key 0x1234
...
a bunch of garbage
...
stat("/run/user/1000/gnupg/S.gpg-agent", {st_mode=S_IFSOCK|0600, st_size=0, ...}) = 0
socket(AF_UNIX, SOCK_STREAM, 0)         = 5

将我的SSH遥控器前向这个新位置进行更改是有效的。我发誓我之前使用gpgconf -list-dir代理-ssh-套接字提供的套接字路径进行了尝试,没有任何结果。可能忘了杀了现有的探员。顺便说一句,我碰巧在博客上看到了这样的变化:https://blog.kylemanna.com/linux/gpg-213-ssh-agent-socket-moved/

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2020-08-28 22:52:07

更新:断开套接字链接,请参阅底部的编辑。

这里显然有一个错误是间歇性的,或者这是所有这些系统如何相互作用的一个副作用。我不想说太多的细节/猜测,但我会考虑以下几点:

  • 第二个SSH会话软管的第一个管道(这应该发生吗?)
  • 远程SSHD中的StreamLocalBindUnlink没有正确地接收管道(可能是因为远程端的代理仍然打开它们吗?)

一个很好的解决方法是在. .ssh/config中使用单独和特殊的主机进行gpg代理转发,并确保只使用一次登录到该主机名!

这种情况发生的几次非常令人沮丧,因为管道/正在运行的代理和新的sshd会话did (而不是创建新套接字)的组合导致了各种混乱(可能也是因为运行代理打开了旧的套接字文件)。通常,我没有时间去解决这个问题。

在我能够解决和修复问题时,我终于遇到了这个问题,我可以可靠地再现问题并演示如何修复它:

工作系统

代码语言:javascript
复制
REMOTE:$ echo "$(uname -a)" | gpg --armor --clearsign --default-key 0x1234
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512

Linux pooter 5.4.0-42-generic #46-Ubuntu SMP Fri Jul 10 00:24:02 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
-----BEGIN PGP SIGNATURE-----

iQIzBAEBCgAdFiEE/0lJ/t51agRvvTILdQ2kyDf6wDYFAl9JgSYACgkQdQ2kyDf6

-----END PGP SIGNATURE-----

从本地系统

运行另一个SSH或Rsync。

代码语言:javascript
复制
LOCAL: $ rsync -avze ssh test.txt pooter:
bind [127.0.0.1]:5901: Address already in use

SCP不会造成问题,但RSYNC显然会执行ssh登录,因为我看到端口转发在文件复制时失败。

远程加密/解密现在失败

代码语言:javascript
复制
REMOTE:$ echo "$(uname -a)" | gpg --armor --clearsign --default-key 0x1234
gpg: all values passed to '--default-key' ignored
gpg: no default secret key: No secret key
gpg: [stdin]: clear-sign failed: No secret key

The Fix

  1. 注销所有具有套接字转发的SSH会话
  2. 杀死远程系统上的所有gpg代理。
  3. 验证/var/run/xxxx/gnupg中的管道是否到位
  4. 如果管道消失,请使用套接字进行前向登录,并验证它们是否被重新创建。

对于步骤3和步骤4,我已经看到它是双向的,有时管道仍然存在,有时它们会正确地消失。还可能需要删除管道文件并重新登录并确保它们被重新创建。

现在,所有的东西都应该重新用于加密/解密。

更新-更简单的修复

今天,这件事没有任何押韵,也没有任何原因,我很生气。我不得不来找这篇文章,我太懒了,没有做我原来的帖子告诉我做的事情。我从上述猜想的角度考虑了这一情况。长话短说,这个方法奏效了:

  1. killall gpg-代理&退出
  2. CTRL^C #断开转发端口
  3. 等一下~1分钟
  4. 重新登录

一切都恢复正常了

编辑:我让这种情况再次发生,我又增加了一步。查找unix域套接字文件,并从另一个shell/登录运行以下命令: unlink /path/to/套接字

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/415110

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档