Existe uma maneira de fazer isso de maneira sensata:
scp user@host:/path/to/file /dev/tty | openssl [options] | less
sem criar um arquivo e sem precisar fornecer senhas diretamente nos argumentos?
O problema é que ambos pedem senha, mas a ordem em que eles iniciam (e, portanto, também a ordem em que pedem a senha) é indefinida.
Não há problema em concluir primeiro scp
e depois iniciar openssl
, mas sem um arquivo temporário.
scp
na variável e, em seguida, da variável em openssl
(seria viável apenas para arquivos pequenos, além de suspeitar que pode haver alguns problemas com dados binários, etc.)
Versão de pipes nomeados 1
mkfifo pipe && {
scp user@host:/path/to/file pipe # asks for password, then waits
# for read from pipe to finish
# which will only happen after the
# password for openssl was supplied
# => must ^Z and enter the password
# => 'pipe: Interrupted system call'
openssl [options] -in pipe | less
}
Named pipes versão 2
mkfifo pipe && {
scp user@host:/path/to/file pipe & # asks for password (and works when
# password is entered) despite being
# put in background (what? how?
# can someone explain?)
openssl [options] -in pipe | less # 'bad password read'
}
Versão de pipes nomeados 3
mkfifo pipe && {
scp user@host:/path/to/file pipe | # asks for password first
openssl [options] -in pipe | less # asks for password after scp's
# password has been entered
# and everything works fine
}
Mudar os comandos não ajuda.
openssl [options] -in <(scp user@host:/path/to/file /dev/tty) | less
não funciona.
Alguém poderia
explique o comportamento incomum do scp em relação ao exemplo 1 ('Interrompida a chamada do sistema') (estou pensando que seja um bug ou algo como um "recurso de segurança"),
explique como a inserção de senhas funciona, por exemplo. como uma tarefa, que foi iniciada em segundo plano, pode ler de stdin,
/dev/null
?
Tags command-line openssl scp pipe fifo