подключение локального каталога к удаленному ssh-серверу

Я хочу подключить локальный каталог к удаленному серверу ssh. конкретно мой ~/.каталог gnupg, поэтому я могу использовать свой локальный брелок везде, не сохраняя его удаленно.

поэтому я думаю, что это решение:

  • держите локальный сервер ssh открыт (брандмауэр, как вам нравится)
  • ssh для удаленной переадресации local: 22 to remote: 10000
  • запустите sshfs для монтирования localhost: 10000:.gnupg к~/.gnupg

Я положил это в моем ssh / config:

Host remote
        HostName remotehost
        RemoteForward 10000 localhost:22
        User user
        PermitLocalCommand yes
        LocalCommand sshfs -p 10000 user@127.0.0.1:/Users/remoteuser/.gnupg .gnupg

делая ssh, я получаю:

fuse: bad mount point `.gnupg': No such file or directory

Если я запустил sshfs вручную после входа в систему ssh, все работает нормально. поэтому я предполагаю, что директива LocalCommand выполняется до RemoteForward.


как решить эту проблему?

11
задан robert laing
15.11.2022 12:01 Количество просмотров материала 3504
Распечатать страницу

1 ответ

проблема: sshs 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 чтобы сделать что-то сложное, но я оставлю это как упражнение для читателя.

3
отвечен eggo 2022-11-16 19:49

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх