Como automatizar a descriptografia de arquivos GPG em SSH?

1

Gostaria de usar o GnuPG para descriptografar mensagens curtas armazenadas em um host remoto (executando o Linux), ou seja:

  1. ssh [<user>@]<host>
  2. gpg -d <file-to-decrypt>
  3. interaja com gpg-agent e / ou digite a senha
  4. fechar conexão SSH

mas de uma forma mais automatizada. Eu só quero digitar um único comando e o script deve fazer o resto (exceto a entrada (interativa) da senha), ou seja:

  1. remote-gpg [<user>@]<host> <file-to-decrypt>
  2. [consulta de senha sem ecoar em texto simples]
  3. [despejar o texto descriptografado no stdout] E fechar a conexão SSH

Meu principal desafio é mesclar a etapa "ssh" e "gpg".

Estou procurando uma maneira simples e eficaz de conseguir isso:

  • com pequenas dependências no lado cliente (idealmente, apenas ssh + utilitários principais)
  • sem mexer muito com soquetes e pipes no lado do servidor
  • sem nenhuma suposição sobre se gpg-agent está sendo executado no servidor

Portanto, soluções como escrever um script GNU expect estão fora de questão.

Motivação : um caso de uso típico seria usar um telefone (executando o Android) para recuperar uma mensagem criptografada (por exemplo, uma senha) do servidor remoto. Fechar a conexão na entrega de informações é desejado porque você pode esquecer de sair antes que o telefone seja perdido / roubado, e o ladrão não pode recuperar informações adicionais sem adivinhar a senha (já que a senha é consultada todas as vezes). Por fim, remover a chave SSH do seu telefone do arquivo authorized_keys do servidor é o suficiente para evitar uma violação de segurança.

A propósito, haveria algum risco de segurança adicional com essa abordagem (em comparação com o processo manual de 4 etapas)?

    
por leden 18.09.2014 / 01:08

2 respostas

3
ssh -t user@host gpg -d file

Eu não acho que tenha que ser mais complicado que isso.

A saída descriptografada será retornada ao seu terminal. A opção -t pede ao ssh que solicite um tty, que é necessário para que o gpg possa solicitar no seu terminal a senha.

Isso não parece mais seguro para mim do que seu método de quatro etapas.

    
por 18.09.2014 / 02:28
1

tldr você quer que alguém escreva o código para você. Sorte sua que eu já tenho algo parecido.

decrypt.sh:

#!/bin/bash
# Get our original tty and turn off -echo
stty_orig='stty -g' stty -echo 
read Pass
# type in your pass for gpg.
gpg --passphrase="$Pass" --no-tty -d $1
# Output goes to STDOUT
stty $stty_orig

Ligue para:

ssh -t user@host 'decyrpt.sh File'

Suposições: Seu arquivo está no diretório inicial e o decrypt.sh está no $ PATH.

    
por 18.09.2014 / 02:31