Назад | Перейти на главную страницу

Какие-нибудь уловки для аутентификации 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 или аналогичные, чтобы этот второй каталог отображался поверх первого, за исключением по-видимому Мне нужно, чтобы они оба были честно установлены. :(

Есть идеи о том, как добиться этого «запроса пароля при записи»? функциональность?

Fuse не сможет предложить вам пароль на терминале, потому что у него нет к нему доступа. Возможно, вы сможете заставить Fuse угадывать ваш X-дисплей и блокировать ввод-вывод, пока он выдает запрос пароля графического интерфейса. Некоторые среды рабочего стола (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, потребуется поддержка любого программного обеспечения, которое вы используете для записи.