我正在尝试将gpg-agent
Unix 套接字转发到远程计算机。我尝试过以下两个版本的远程转发命令:
- A:
ssh -vvv -N -R ~/.gnupg/S.gpg-agent:~/.gnupg/S.gpg-agent.extra {HOST}
- 乙:
ssh -vvv -N -R ~/.gnupg/S.gpg-agent:/home/{USER}/.gnupg/S.gpg-agent.extra {HOST}
初始连接后,它们都报告远程转发成功ssh
。然而debug1: connect_next: host ~/.gnupg/S.gpg-agent.extra ([unix]:~/.gnupg/S.gpg-agent.extra): No such file or directory
,当在远程计算机上尝试实际数据连接时,选项 A 的套接字失败,gpg-connect-agent /bye
而选项 B 的套接字工作正常。
我想知道是否可以通过ssh
远程转发命令进行本地主目录扩展。如果没有,为什么?
答案1
必须~
通过某些程序来扩展。通常这个程序就是shell。 sshd 守护进程不会将路径提供给 shell,也不会扩展该路径。
但是您不需要扩展当前用户的主目录,因为它无论如何都是工作目录。
尝试
ssh -vvv -N -R ~/.gnupg/S.gpg-agent:${HOME}/.gnupg/S.gpg-agent.extra {HOST}
编辑:
这是可行的,因为主机上(而不是客户端上)的工作目录始终是目标用户的主目录。
ssh 服务器不会扩展~
环境变量,但应该可以在主机上执行代码以创建到 ssh 服务器可以使用的已知位置的链接或符号链接。
已编辑正如库萨拉南达所建议的
答案2
该评论不支持换行符,所以我不得不将它们放在这里:
ssh -vvv -N -R ~/.gnupg/S.gpg-agent:${HOME}/.gnupg/S.gpg-agent.extra {HOST}
作品ssh -vvv -N -R ${HOME}/.gnupg/S.gpg-agent:${HOME}/.gnupg/S.gpg-agent.extra {HOST}
作品ssh -vvv -N -R ~/.gnupg/S.gpg-agent:~/.gnupg/S.gpg-agent.extra {HOST}
做不是工作ssh -vvv -N -R ${HOME}/.gnupg/S.gpg-agent:~/.gnupg/S.gpg-agent.extra {HOST}
做不是工作
正如 @RalfFriedl 在他的评论中解释的那样(逐字复制到这里),“ The${HOME}
被客户端 shell 替换。这只$HOME
在客户端和$HOME
服务器上相同的情况下才有效。 The~/
仅在单词开头展开,而不是在单词内部展开如此,不过~/XX
是” 。$HOME/XX
XX:~/
XX:~/
对于那些想要使用配置文件RemoteForward
中的关键字自动执行此操作的人ssh
,请注意那里没有变量扩展,因此您需要使用绝对路径。最好的选择是创建一个指向已知位置的符号链接,并使用该路径作为ssh
配置文件。我在多个平台(Ubuntu、Fedora、MacOS,...)上使用相同的配置文件,所以这就是我必须做的。