Chcę zsynchronizować folder z mojego komputera z folderem na komputerze zdalnym. Folderem zdalnym można manipulować tylko za pomocą root
. Mam konto na zdalnym komputerze, z którego można korzystać sudo
. Jak mogę uruchomić rsync, aby miał uprawnienia roota na zdalnym komputerze?
Próbowałem następujące:
rsync -avz -e ssh /home/ubuntu/my/lovely/folder [email protected]:/remote/lovely/folder --delete --rsync-path="sudo rsync"
Ale (po wprowadzeniu hasła) pojawia się następujący błąd:
sudo: no tty present and no askpass program specified
Odpowiedzi:
Wypróbuj to rozwiązanie. W pliku sudoers (
/etc/sudoers
) ustaw użytkownika w następujący sposób:NOPASSWD:/usr/bin/rsync
mówisudo
, że gdy użytkownik uruchamia/usr/bin/rsync
lub po prostursync
, że hasło nie jest potrzebne.Wtedy twój oryginał
--rsync-path="sudo rsync"
powinien działać.źródło
Oto rozwiązanie, które wymyśliłem:
Trochę misji!
źródło
ps aux
.). Test:,rsync -R -avz -e ssh --rsync-path="find / > /dev/null && rsync" server.example.com:/ /tmp/example
a następnie otwórz terminal na zdalnej maszynie ips aux | grep find
.find /
jest używany tylko, ponieważ jest to pierwsza rzecz, która przyszła mi do głowy z długim czasem realizacji.Rozwiązanie na tym blogu działało dla mnie naprawdę dobrze: http://www.pplux.com/2009/02/07/rsync-root-and-sudo/ .
Gruntownie:
Pierwszy wiersz pozwala na interaktywne wprowadzanie hasła, bez pokazywania hasła na ekranie. Działa świetnie dla mnie na Ubuntu 9.04.
źródło
!tty_tickets
.ssh -t [other options]
zamiast bawić sięstty -echo
?tty_tickets
każdym razie ... więc mogę spróbować tego podejścia.sudo: no tty present and no askpass program specified
Potrzebujesz metody, aby podać hasło
sudo
.askpass
Program jest zaprojektowany, aby poprosić o hasłami gdy normalne mechanizmy nie są dostępne. Konfigurowanie tak,sudo
aby nie wymagało hasła do uruchomienia,rsync
ponieważ identyfikator użytkownika jest jedną z opcji.Zwykle konfiguruję logowanie oparte na kluczu z odpowiednimi ograniczeniami dla takich przypadków. Jeśli skonfigurujesz klucz zastrzeżony, który będzie działał tylko
rsync
jako root, łatwiej będzie to zrobić. Inną alternatywą jest użyciersycnd
procesu do obsługi zdalnych żądań. Konfiguracja zapewnia szereg ograniczeń, które można zastosować.EDYCJA: Dołączyłem skrypt do konfigurowania kluczy dla pętli opartych na kluczach w sekcji Tworzenie identyfikatorów użytkowników na moich klientach mojego wpisu na temat Konfigurowania BackupPC w systemie Linux . Zobacz także dokumentację dla ssh_config, która szczegółowo opisuje niektóre rzeczy, które możesz zrobić z ograniczeniem użycia klucza, jak pokazano w skrypcie.
źródło
na zdalnej maszynie
następnie na komputerze lokalnym
zastąp ścieżkę do ssh-askpass rzeczywistą ścieżką na zdalnym komputerze
źródło: http://unix.bris.ac.uk/2015/08/04/rsync-between-two-hosts-using-sudo-and-a-password-prompt/
źródło
Dziwi mnie złożoność istniejących odpowiedzi. O wiele łatwiej i wygodniej jest skonfigurować swoje systemy (komputer i zdalny host), aby można było łączyć się z hostem zdalnym bez hasła. I w przeciwieństwie do jego wyglądu jest również bezpieczny .
Po prostu nie zapominaj, że dopóki linia w /root/.ssh/authorized_keys zdalnego hosta jest tam, maszyna akceptuje polecenia root z twojego komputera.
źródło
Oto, co zadziałało, biorąc pod uwagę, że chcę zachować uwierzytelnianie za pomocą hasła (więc nie chcę używać
NOPASSWD
ani kluczy) - w systemie Ubuntu 14.04:sudo
na zdalnym komputerze, wyłączająctty_tickets
plik tymczasowy w/etc/sudoers.d/
(który powinien być obsługiwany w Debianie, zobacz/etc/sudoers.d/README
), i „Zaktualizuj poświadczenia użytkownika w pamięci podręcznej”, co „wydłuży limit czasu sudo o kolejne 15 minut”rsync
pomocą,sudo
jak pokazano w innych odpowiedziachsudo
na zdalnym komputerze, usuwając plik tymczasowy/etc/sudoers.d/
, który zostanie ponownie włączonytty_tickets
... lub z wierszami poleceń:
Oto odpowiedzi, które otrzymuję po uruchomieniu tych poleceń na komputerze lokalnym:
Pamiętaj, że
sudo -v
należy je uruchamiać po każdym wejściu plików/etc/sudoers.d/
, więc zmiany w nich są akceptowane.źródło
Inną metodą jest obejście ograniczeń uprawnień poprzez zainicjowanie rsync na zdalnym komputerze. Zamiast:
Możesz to zrobić:
Gdzie
y.y.y.y
jest adres IP twojego komputera lokalnego? Działa to tylko wtedy, gdy komputer lokalny może działać jako serwer SSH.źródło
Moim obejściem jest dodanie
--rsync-path="echo PASSWORD | sudo -Sv && sudo rsync"
przykład:
rsync -avz -e ssh /home/ubuntu/my/lovely/folder [email protected]:/remote/lovely/folder --delete --rsync-path="echo <PASSWORD> | sudo -Sv && sudo rsync"
Zazwyczaj umieszczanie haseł w linii poleceń nie jest dobrym pomysłem; stają się widoczne na przykład w drzewie procesów. Czasem zastępuję rzeczywiste hasło w tego typu instrukcjach $ (cat my_password.txt), co jest nieco lepsze
rsync -avz -e ssh /home/ubuntu/my/lovely/folder [email protected]:/remote/lovely/folder --delete --rsync-path="cat my_password.txt | sudo -Sv && sudo rsync"
źródło