ssh - 在 SSH 尝试链接 RemoteForward 中给出的套接字之前运行命令(创建目录)
问题描述
我目前正在尝试通过 SSH设置GnuPG 代理转发。由于我GNUPGHOME="$XDG_DATA_HOME/gnupg"
在本地和远程系统上都进行了设置,因此我没有使用默认的 GPG 套接字路径,而是在我的 中配置了以下内容~/.ssh/config
:
Host myhost
HostName 1.2.3.4
User myuser
ForwardAgent yes
RemoteForward /run/user/1000/gnupg/d.fj15x7xb73ergseatdpnwdt7/S.gpg-agent /run/user/1000/gnupg/d.fj15x7xb73ergseatdpnwdt7/S.gpg-agent.extra
此配置的问题是,在第一次连接时,远程父目录/run/user/1000/gnupg/d.fj15x7xb73ergseatdpnwdt7/
尚不存在,因此RemoteForward
失败并显示以下内容:
Warning: remote port forwarding failed for listen path /run/user/1000/gnupg/d.fj15x7xb73ergseatdpnwdt7/S.gpg-agent
创建该目录的正确方法是运行gpgconf --create-socketdir
(如果目录存在,则为无操作)。但是,当我将它放入我的.bashrc
时,它似乎仅在 SSH 尝试转发RemoteForward
. 也就是说,只有在建立第二个 SSH 连接时才会创建套接字:
$ ssh myhost
Warning: remote port forwarding failed for listen path /run/user/1000/gnupg/d.fj15x7xb73ergseatdpnwdt7/S.gpg-agent
[myuser@myhost ~]$ # Socket not correctly forward, but directory has been created now.
[myuser@myhost ~]$ logout
$ ssh myhost
[myuser@myhost ~]$ # Socket correctly forward on second attempt.
所以我的问题是:如何在 SSH 尝试链接中指定的套接字之前运行命令(在这种情况下gpgconf --create-socketdir
)或至少创建一个目录(在这种情况下) ?/run/user/1000/gnupg/d.fj15x7xb73ergseatdpnwdt7/
RemoteForward
我在这里唯一的猜测是将命令放入~/.bashrc
,但这似乎执行得很晚。
解决方案
是的,这是一个错误,您引用的 GnuPG 文档没有指出该问题。
我使用添加到远程系统的 systemd 用户服务来解决这个问题,我想将我的 gpg 代理的套接字转发到。我试图在https://dev.gnupg.org/D435中将它贡献给 GnuPG,但是对于谁应该负责创建套接字所在的目录存在一些分歧。
这非常令人沮丧。
推荐阅读
- sql - 如何设置存储过程以正确排序
- json - 如何将带有键值的 JSON 文件转换为 apache 骆驼头 - Spring DSL
- mysql - 创建一个连接,我从另一个表中提取计数
- azure - 将 Azure Blob 存储链接到计算机
- .net - VB.net 在列表视图中添加新的列表视图项目并检查为真?
- c++ - 如何在 qlineedit 或 qtextedit 中显示串联的字符串和 int?
- laravel - 在两个具有关系 Laravel 的表中插入数据
- r - 按列中名称的一部分过滤数据框
- java - JSONB 序列化抛出 org.hibernate.SessionException
- go - ec2_sd 可以与普罗米修斯中的黑盒一起使用吗?