Algum truque para fazer o sshfs autenticar apenas na escrita?

3

Existe aparentemente um truque para criar logins sshfs somente leitura com o atributo somente leitura que é imposto pelo arquivo ~/.ssh/authorized_keys do controle remoto.

Primeiro, você cria um programa ~/.ssh/ro-sftp-server que executa sftp-server -R , que independentemente das outras opções foram passadas. Em seguida, configure sua chave ssh restrita, como de costume, no arquivo ~/.ssh/authorized_keys do controle remoto, exceto pela adição de uma restrição de comando:

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

Finalmente, você monta o diretório invocando sshfs .

sshfs -o ssh_command="ssh -i ~/.ssh/ro_key" \
      -o sftp_server="~/.ssh/ro-sftp-server" \
      -o idmap=mrmeow -o ro \
      [email protected]:. ~/www/

Ótimo! Agora, como autorizo as gravações, mas somente depois de pedir uma senha?

Eu certamente poderia fazer o autofs montar um segundo volume sshfs de leitura-gravação sob demanda usando uma chave protegida por senha, mas sem restrições.

Eu finalmente precisaria do unionfs, mhddfs ou similar para fazer com que esse segundo diretório apareça sobre o primeiro, exceto aparentemente eu precisaria dos dois montados honestamente. :(

Alguma idéia sobre como se deve obter esse "prompt de senha ao escrever"? funcionalidade?

    
por Jeff Burdges 16.04.2012 / 03:32

1 resposta

0

O fusível não poderá fornecer um prompt de senha no terminal porque não tem acesso a ele. Você pode conseguir que o Fuse adivinhe sua exibição X e bloqueie a E / S enquanto ela exibe uma solicitação de senha da GUI. Alguns ambientes de desktop (Gnome / KDE) fornecem recursos de carteira para chaves de desbloqueio; eles podem ser uma boa coisa para se conectar.

Mas, por simplicidade, sugiro uma alternativa. Talvez em algum lugar em seu fluxo de trabalho, você possa verificar a necessidade de recursos de gravação e exibir o prompt usando um script.

Por exemplo, se você usar o Vim, poderá verificar antes de gravar um arquivo:

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

Ou, em um processo de criação do Coffeescript de fantasia, você pode agir de acordo depois de erros de gravação:

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

Para obter um prompt em um único terminal sem o X, é necessário o suporte de qualquer software que você esteja usando para fazer a gravação.

    
por 27.01.2013 / 14:05