The
| cat
is needed in this case because otherwise tar […] will not speak to the stdout given by ssh (PTY).
Não. Ter um PTY é precisamente um dos seus problemas. A camada tty existe para processar caracteres de controle de terminal e não é algo que você queira em todos os para outros tipos de dados.
Normalmente em execução ssh no modo de lote (ou seja, ssh <host> <cmd>
) não alocará um lado do servidor PTY; Ele fornecerá um canal limpo de 8 bits. Mas quando você não fornece um comando no cliente, você precisa adicionar explicitamente a opção -T
ou RequestTTY
client para desativar a solicitação TTY,
ssh -T theuser@prod > dir.tgz ssh -o RequestTTY=no theuser@prod > dir.tgz
ou forneça um comando fictício,
ssh theuser@prod foo > dir.tgz
ou proibir essas solicitações com a opção no-pty
authorized_keys:
command="tar -czf - /dir/ 2>/dev/null",no-pty,restrict ssh-rsa ABCDEF
( restrict
é um alias adicionado recentemente que desativa todos os reencaminhamentos de uma só vez, incluindo aqueles que podem ser adicionados no futuro. Está disponível em OpenSSH 7.2 . Inclusive, inclusive inclui no-pty
, mesmo que eu o tenha listado separadamente para esta resposta.