Я пытаюсь перенаправить сокет gpg-agent Unix на удаленную машину. Я пробовал следующие две версии команды удаленной переадресации:

  • О: 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 при попытке фактического подключения для передачи данных на удаленном компьютере с gpg-connect-agent /bye, в то время как сокет варианта Б работает нормально.

Я хочу знать, возможно ли расширение локального домашнего каталога с помощью команды удаленной переадресации ssh. Если нет, то почему?

1
Tanachat 7 Авг 2018 в 09:34

2 ответа

Лучший ответ

~ должен быть расширен какой-либо программой. Обычно эта программа является оболочкой. Демон sshd не передает путь к оболочке и не расширяет путь.

Но вам не нужно расширение для текущего домашнего каталога пользователей, так как это в любом случае рабочий каталог.

Пытаться

ssh -vvv -N -R ~/.gnupg/S.gpg-agent:${HOME}/.gnupg/S.gpg-agent.extra {HOST}

Изменить:

Это работает, потому что рабочий каталог на хосте (не на клиенте) всегда является домашним каталогом целевого пользователя.

Сервер ssh не расширяет ~ переменных среды, но должна быть возможность выполнить код на хосте для создания ссылки или символической ссылки на известное местоположение, которое может использоваться сервером ssh.

Отредактировано согласно предложению Кусалананды.

2
RalfFriedl 10 Авг 2018 в 00:59
Это работает, если я начинаю сеанс ssh, когда рабочий каталог является домашним каталогом. Знаете ли вы способ заставить это работать для любого каталога?
 – 
Tanachat
9 Авг 2018 в 00:25
Я добавил предложение.
 – 
RalfFriedl
9 Авг 2018 в 08:36
Левая сторона является удаленной частью, поэтому вам нужно удалить ~/ оттуда и добавить ее в правую часть.
 – 
Kusalananda
9 Авг 2018 в 09:43
ssh -vvv -N -R .gnupg/S.gpg-agent:$HOME/.gnupg/S.gpg-agent.extra {HOST} не работает, но ssh -vvv -N -R ~/.gnupg/S.gpg-agent:$HOME/.gnupg/S.gpg-agent.extra {HOST} работает. ~ для удаленного пути кажется важным.
 – 
Tanachat
10 Авг 2018 в 00:43
Отредактируйте свой ответ с помощью ssh -vvv -N -R ~/.gnupg/S.gpg-agent:${HOME}/.gnupg/S.gpg-agent.extra {HOST}, и я приму его.
 – 
Tanachat
10 Авг 2018 в 00:45

Комментарий не поддерживает новые строки, поэтому мне пришлось поместить их здесь:

  • 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 в своем комментарии (скопировано здесь дословно), «${HOME} заменяется клиентской оболочкой. Это работает, только если $HOME на клиенте и $HOME на сервере являются то же самое. ~/ расширяется только в начале слова, а не внутри. Таким образом, ~/XX – это $HOME/XX, а XX:~/ – просто XX:~/"

Для тех из вас, кто хочет автоматизировать это с помощью ключевого слова RemoteForward в файле конфигурации ssh, обратите внимание, что там нет расширения переменных, поэтому вам нужно использовать абсолютные пути. Лучше всего создать символическую ссылку на известное место и использовать этот путь для файла конфигурации ssh. Я использую один и тот же файл конфигурации на нескольких платформах (Ubuntu, Fedora, MacOS, ...), так что мне придется это сделать.

1
Tanachat 10 Авг 2018 в 01:12