Trasferisci una directory su ssh con sudo
Sto cercando di trasferire una directory da un server remoto (CentOS) alla mia macchina locale (Ubuntu) tramite ssh. Ci sono due utenti: A e B. L'utente A può ssh nel server remoto e ha accesso sudo. L'utente B possiede una directory nel server remoto.
Per trasferire una directory di proprietà dell'utente B come utente A, è necessario utilizzare sudo.
Attualmente per trasferire un file (da remoto a locale) questo è quello che sto usando:
ssh -tt userA@remote_host 'stty raw -echo; sudo cat /path/to/remote/file/owned/by/userB' > /path/to/local/file
Per trasferire una directory ho provato l'approccio tar,
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 -
Tuttavia sul sistema locale ottengo questo errore:
gzip: stdin: not in gzip format
tar: Child returned status 1
tar: Error is not recoverable: exiting now
Che cosa sto facendo di sbagliato?
Risposte
Tenta di trasferire la directory usando ssh
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 -
Piping l'output del comando precedente a cat (nel sistema locale) invece di tar, fornisce ulteriori informazioni:
$ 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.
Per risolvere questo problema, ho usato questo comando:
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 -
Nota per le opzioni ssh
Dato che sto usando sudoper accedere alla directory dell'utente B, sshrestituisce sudo: sorry, you must have a tty to run sudose l' -topzione non è usata.
-t : Forza l'allocazione pseudo-terminale
Nota per le opzioni stty
L' sttyopzione -echoè facoltativa. Deve essere utilizzato (credo) se sudorichiede di inserire la password.
raw : Elabora l'input così com'è (non interpreta caratteri speciali, ecc.)
-echo : Non stampa i caratteri digitati
Nota per le opzioni gzip
-9 : Imposta la compressione al massimo
-f: Forza la compressione ( come suggerito dall'errore )
-n, --no-name: Non include nome e timestamp del file (utile per confrontare i checksum del file in remoto e locale)