Übertragen Sie mit sudo ein Verzeichnis über ssh
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
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)