OpenSSH >=7.2 是否支持远程 Unix 套接字转发的本地波浪号扩展

OpenSSH >=7.2 是否支持远程 Unix 套接字转发的本地波浪号扩展

我正在尝试将gpg-agentUnix 套接字转发到远程计算机。我尝试过以下两个版本的远程转发命令:

  • 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/XXXX:~/XX:~/

对于那些想要使用配置文件RemoteForward中的关键字自动执行此操作的人ssh,请注意那里没有变量扩展,因此您需要使用绝对路径。最好的选择是创建一个指向已知位置的符号链接,并使用该路径作为ssh配置文件。我在多个平台(Ubuntu、Fedora、MacOS,...)上使用相同的配置文件,所以这就是我必须做的。

相关内容