Übertragen Sie mit sudo ein Verzeichnis über ssh

Oct 15 2020

Ich versuche, ein Verzeichnis von einem Remote-Server (CentOS) über ssh auf meinen lokalen Computer (Ubuntu) zu übertragen. Es gibt zwei Benutzer: A und B. Benutzer A kann auf einen Remote-Server ssh und hat Sudo-Zugriff. Benutzer B besitzt ein Verzeichnis auf dem Remote-Server.

Um ein Verzeichnis von Benutzer B als Benutzer A zu übertragen, muss sudo verwendet werden.

Derzeit verwende ich Folgendes zum Übertragen einer Datei (von Remote zu lokal):

ssh -tt userA@remote_host 'stty raw -echo; sudo cat /path/to/remote/file/owned/by/userB' > /path/to/local/file

Um ein Verzeichnis zu übertragen, habe ich den tar-Ansatz versucht,

ssh -tt userA@remote_host 'stty raw -echo; sudo tar -C /path/to/remote/directory/owned/by/userB/ -czf - .' | tar -C /path/lo/local/directory -xzf -

Auf dem lokalen System erhalte ich jedoch folgende Fehlermeldung:

gzip: stdin: not in gzip format
tar: Child returned status 1
tar: Error is not recoverable: exiting now

Was mache ich falsch?

Antworten

SaurabhPBhandari Oct 16 2020 at 03:13

Versuchen Sie, das Verzeichnis mit ssh zu übertragen

ssh -tt userA@remote_host 'stty raw -echo; sudo tar -C /path/to/remote/directory/owned/by/userB/ -czf - .' | tar -C /path/lo/local/directory -xzf -

Wenn Sie die Ausgabe des obigen Befehls an cat (im lokalen System) anstatt an tar weiterleiten, erhalten Sie weitere Informationen:

$ ssh -tt userA@remote_host 'stty raw -echo; sudo tar -C /path/to/remote/directory/owned/by/userB/ -czf - .' | cat
userA@remote_host's password: 
gzip: compressed data not written to a terminal. Use -f to force compression.
For help, type: gzip -h
Connection to remote_host closed.

Um dies zu beheben, habe ich diesen Befehl verwendet:

ssh -t userA@remote_host 'stty raw -echo; sudo tar -C /path/to/remote/directory/owned/by/userB/ -cf - . | gzip -9nf' | tar -C  /path/lo/local/directory -xzf -

Hinweis für SSH-Optionen

Da ich bin mit sudodem Zugriff auf Benutzer B Verzeichnisses, sshkehrt , sudo: sorry, you must have a tty to run sudowenn -tOption nicht verwendet wird .

-t : Pseudo-Terminal-Zuweisung erzwingen

Hinweis für stty-Optionen

Die sttyOption -echoist optional. Es ist zu verwenden (glaube ich), wenn sudoSie ein Passwort eingeben müssen.

raw : Verarbeiten Sie die Eingabe so wie sie ist (interpretieren Sie keine Sonderzeichen usw.)

-echo : Drucken Sie keine eingegebenen Zeichen

Hinweis für gzip-Optionen

-9 : Stellen Sie die Komprimierung auf Maximum ein

-f: Komprimierung erzwingen ( wie vom Fehler vorgeschlagen )

-n, --no-name: Enthält nicht den Namen und den Zeitstempel der Datei (hilfreich, um Prüfsummen der Datei in Remote- und lokalen Dateien zu vergleichen)