проблема: ssh
s LocalCommand
выполнена на local (клиентская) сторона, а не пульт, как вы хотите. Нет никакого RemoteCommand
option, но вы можете взломать функциональность в свой файл конфигурации. Обратите внимание, что все они предполагают, что ваш remotehost:.gnupg
каталог существует перед рукой.
Вариант 1: используйте две отдельные спецификации хоста в ~/.ssh/config
:
Host remote
HostName remotehost
PermitLocalCommand yes
LocalCommand ssh -f %r@%n-mount -p %p sshfs -p 10000 %u@localhost:%d/.gnupg .gnupg
Host remote-mount
HostName remotehost
ForwardAgent yes
RemoteForward 10000 localhost:22
минусы: обе записи должны выйти для каждого хоста, который вы хотите это точка монтирования.
Вариант 2: объедините параметры ssh и перенаправление портов в LocalCommand:
Host remote
HostName remotehost
PermitLocalCommand yes
LocalCommand ssh -f %r@%h -o RemoteForward="10000 localhost:22" -o ForwardAgent=yes -p %p sshfs -p 10000 %u@localhost:%d/.gnupg .gnupg
обратите внимание на тонкую разницу в двух LocalCommand
строки-это использование %n в первом примере и %h во втором. Это сработает, но имеет один огромный предположение вы никогда ssh для хоста по его истинному имени и только через "короткие имена", которые существуют в вашем .ssh/config
file, в противном случае вы получите бесконечный цикл ssh
соединения пытаются выполнить LocalCommand
.
Вариант 3: используйте мультиплексирование SSH для установки только одного соединения с удаленным:
Host remote
HostName remotehost
PermitLocalCommand yes
LocalCommand ssh -f %r@%h -o RemoteForward="10000 localhost:22" -o ForwardAgent=yes -p %p sshfs -p 10000 %u@localhost:%d/.gnupg .gnupg
ControlMaster auto
ControlPersist 30m
ControlPath ~/.ssh/controlmasters/%r@%h:%p
я думаю, что это единственное выигрышное решение, и даже может работать в Host *
правила, и не страдает от каких-либо недостатков. Это даже решает проблему, что вторые сеансы ssh к тому же хосту не будут пытаться повторно подключить тот же каталог через sshfs.
предостережение: один финал вопрос, который я не удосужился решить: ваш пульт sshfs
будет сохраняться долго после выхода из удаленного узла. На самом деле, это никогда не будет unmount
, если в вашей локальной сети или подключение поломаны.
вы могли бы посмотреть на какой-то другой вариант umount
это sshfs
mount при выходе из удаленного хоста, возможно, с помощью идеи вроде этой. Или вы можете играть в игры с LocalCommand
выполнить что-то, что наблюдает и самостоятельно umounts после того, как он видит, что происходит какое-то событие триггера, но в лучшем случае кажется хрупким.
другой вариант был бы обернуть ssh
команды в какой-то оболочке или, возможно, использовать ProxyCommand
чтобы сделать что-то сложное, но я оставлю это как упражнение для читателя.