Przenieś katalog przez ssh za pomocą sudo

Oct 15 2020

Próbuję przenieść katalog ze zdalnego serwera (CentOS) na mój komputer lokalny (Ubuntu) przez ssh. Jest dwóch użytkowników: A i B. Użytkownik A może ssh do zdalnego serwera i ma dostęp do sudo. Użytkownik B jest właścicielem katalogu na serwerze zdalnym.

Aby przenieść katalog należący do użytkownika B jako użytkownika A, należy użyć sudo.

Obecnie do przesyłania pliku (ze zdalnego na lokalny) używam:

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

Aby przenieść katalog, wypróbowałem podejście 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 -

Jednak w systemie lokalnym pojawia się ten błąd:

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

Co ja robię źle?

Odpowiedzi

SaurabhPBhandari Oct 16 2020 at 03:13

Spróbuj przenieść katalog przy użyciu 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 -

Przekazanie wyjścia powyższego polecenia do cat (w systemie lokalnym) zamiast do tar, daje więcej informacji:

$ 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.

Aby to naprawić, użyłem tego polecenia:

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 -

Uwaga dotycząca opcji ssh

Ponieważ używam sudodostępu do katalogu użytkownika B, sshzwraca, sudo: sorry, you must have a tty to run sudojeśli -topcja nie jest używana.

-t : Wymusza alokację pseudo-terminala

Uwaga dotycząca opcji stty

Ta sttyopcja -echojest opcjonalna. Ma być używany (chyba), jeśli sudowymaga wprowadzenia hasła.

raw : Przetwarzaj dane wejściowe bez zmian (nie interpretuj znaków specjalnych itp.)

-echo : Nie drukuj wpisanych znaków

Uwaga dotycząca opcji gzip

-9 : Ustaw kompresję na maksimum

-f: Wymuś kompresję (zgodnie z sugestią błędu )

-n, --no-name: Nie zawiera nazwy i sygnatury czasowej pliku (przydatne przy porównywaniu sum kontrolnych pliku w trybie zdalnym i lokalnym)