Какие-нибудь хитрости для того, чтобы sshfs аутентифицировался только при записи?

Кажется, есть хитрость для создания логинов sshfs только для чтения с атрибутом "только для чтения", применяемых удаленным пользователем. ~/.ssh/authorized_keys файл.

Вы сначала создаете программу ~/.ssh/ro-sftp-server это работает sftp-server -R, какие бы другие варианты не были приняты. Затем вы устанавливаете свой ограниченный ключ ssh как обычно на пульте дистанционного управления. ~/.ssh/authorized_keys файл, кроме добавления ограничения команды:

no-X11-forwarding,no-agent-forwarding,no-pty,command= “~/.ssh/ro-sftp-server” ssh-rsa ...

Наконец, вы монтируете каталог, вызывая sshfs,

sshfs -o ssh_command="ssh -i ~/.ssh/ro_key" \
      -o sftp_server="~/.ssh/ro-sftp-server" \
      -o idmap=mrmeow -o ro \
      mrmeow@example.com:. ~/www/

Большой! Теперь, как мне разрешить запись, но только после запроса пароля?

Я мог бы сделать autofs смонтировать второе чтение-запись sshfs объем по требованию, используя защищенный паролем, но неограниченный ключ.

Наконец, мне понадобятся unionfs, mhddfs или подобные, чтобы этот второй каталог отображался поверх первого, за исключением того, что, очевидно, мне понадобятся оба честно смонтированных каталога.:(

Любые идеи о том, как можно добиться этого "запрос пароля при записи"? функциональность?

1 ответ

Fuse не сможет дать вам запрос пароля на терминале, потому что он не имеет к нему доступа. Возможно, вы сможете заставить Fuse угадать ваш дисплей X и заблокировать ввод-вывод, пока он выдает подсказку с паролем GUI. В некоторых средах рабочего стола (Gnome/KDE) предусмотрены средства кошелька для разблокировки ключей; они могут быть хорошей вещью для подключения.

Но для простоты позвольте мне предложить альтернативу. Возможно, где-то в вашем рабочем процессе вы можете проверить необходимость записи и вызвать запрос, используя скрипт.

Например, если вы используете Vim, вы можете проверить, прежде чем писать файл:

autocmd BufWritePre *.c                         \
    let targetfile = expand('%')              | \
    if !filewritable(targetfile)              | \
        exec "!~/bin/prompt_remount_foo_rw"   | \
    end

Или в фантастическом процессе сборки Coffeescript, вы можете действовать соответственно после ошибок записи:

buildProcess.on "error", (e) ->
    if e.writeError
        prompt_remount_foo_rw().then(retryBuild)

Чтобы получить подсказку в одном терминале без X, потребуется поддержка любого программного обеспечения, которое вы используете для записи.

Другие вопросы по тегам