Das
| cat
ist in diesem Fall erforderlich, da sonst tar [...] nicht an die stdout sprechen von ssh (PTY) gegeben.
Ein PTY zu haben, ist genau eines Ihrer Probleme. Die Ebene tty ist für die Verarbeitung von Terminalsteuerzeichen vorhanden und für andere Arten von Daten überhaupt nicht erwünscht .
Normalerweise wird ssh im Batch-Modus (dh ssh <host> <cmd>
) ausgeführt, und es wird keine PTY-Serverseite zugewiesen. Es wird ein sauberer 8-Bit-Kanal bereitgestellt. Wenn Sie jedoch keinen Befehl auf dem Client angeben, müssen Sie die Option -T
oder RequestTTY
client explizit hinzufügen, um die TTY-Anforderung zu deaktivieren.
ssh -T theuser @ prod> dir.tgz ssh -o RequestTTY = no theuser @ prod> dir.tgz
oder einen Dummy-Befehl angeben,
ssh theuser @ prod foo > dir.tgz
oder verbieten Sie solche Anfragen mit der no-pty
Option authorized_keys:
command = "tar -czf - / dir / 2> / dev / null", no-pty, Einschränkung von ssh-rsa ABCDEF
( restrict
ist ein kürzlich hinzugefügter Alias, der alle Weiterleitungen auf einmal deaktiviert, einschließlich derjenigen, die in der Zukunft hinzugefügt werden können. Er ist ab OpenSSH 7.2 verfügbar . Tatsächlich ist er sogar enthalten no-pty
, obwohl ich ihn für diese Antwort separat aufgeführt habe.)