Как смонтировать удаленный каталог ecryptfs?

Я использую rsync синхронизировать данные на моем клиенте с расшифрованным ecryptfs-контейнером на сервере.

Я хочу добиться следующего автоматического процесса:

  1. Если на сервере keyctl show У меня уже есть желаемая ключевая подпись
  2. ecryptfs-add-passphrase --fnek добавить мой ключ в связку ключей на сервере
  3. mount -i /mnt/path/to/decrypted чтобы убедиться, что расшифрованная папка смонтирована на сервере
  4. rsync от клиента к серверу
  5. Необязательно: Размонтируйте папку и удалите подпись ключа (здесь не важно)

В настоящее время для шагов 1,2,3 я использую ssh -tq ... выполнить команду и оценить результат.

Моя проблема заключается в следующем: кажется, ecryptfs требует постоянного сеанса пользователя на сервере. В противном случае ключ добавляется и мгновенно удаляется из-за выхода пользователя из системы (ssh -tq ... заканчивается после завершения команды).

Я только что узнал, что ssh -tq 'ecryptfs-add-passphrase --fnek; mount -i /mnt/path/to/decrypted' видимо работает как положено. После этого ключ снова сбрасывается, но монтировать удается. Это подразумевает, что я должен реализовать "динамическое приглашение" (шаг 1) на сервере. Это уже лучшее решение или я тоже могу реализовать это на клиенте?

1 ответ

Я наткнулся на ваш пост несколько раз сегодня, пытаясь понять, что именно вы описываете, но не нашел никакой помощи. Мне наконец удалось найти решение самостоятельно.

Это решение заключается в использовании преимуществ --rsync-path опция rsync. Вот выдержка из справочной страницы:

    --rsync-path=PROGRAM
          Use this to specify what program is to  be  run  on  the  remote
          machine  to start-up rsync.  Often used when rsync is not in the
          default      remote-shell’s      path       (e.g.       --rsync-
          path=/usr/local/bin/rsync).   Note  that PROGRAM is run with the
          help of a shell, so it can be any program,  script,  or  command
          sequence  you’d  care to run, so long as it does not corrupt the
          standard-in & standard-out that rsync is using to communicate.

          One tricky example is to set a different  default  directory  on
          the  remote  machine  for  use  with the --relative option.  For
          instance:

              rsync -avR --rsync-path="cd /a/b && rsync" hst:c/d /e/

Пример, приведенный в последнем абзаце руководства, дал мне идею использовать этот параметр для монтирования каталога ecryptfs.

И вот код:

rsync --rsync-path="(printf \"%s\" \"$passphrase\" | ecryptfs-add-passphrase --fnek && ecryptfs-mount-private) &> /dev/null && rsync" -aKLv local_to_sync remotehost.com:~/Private/
Другие вопросы по тегам