Piping dados em ssh
(como você fez) é o caminho certo de passar dados de entrada para um comando executado via SSH.
O problema aqui é que gpg
precisa de dois fluxos de entrada para ler:
- um (STDIN) para ler os dados a serem criptografados,
- outro (o terminal interativo
/dev/tty
) para ler a senha (e é por isso que você precisa passar a opção-t
parassh
).
Se você combinar os dois e tentar usar STDIN para ambos os propósitos, então uma maneira de sinalizar EOF é necessária para separar as duas entradas. No entanto, ssh
também leria o final do arquivo e fecharia o fluxo de entrada encaminhado.
A única solução prática que posso imaginar é
salve os dados em um arquivo e, em seguida, criptografe-os usando gpg
(requer dois invocações ssh
separadas) ::
pv file | ssh ... '(umask 077; cat > file.unencrypted)'
ssh -t ... 'gpg -se -r ... < file.unecrypted > file.gpg; rm -f file.unencrypted'