2010-04-21 18 views
10

Chciałbym zautomatyzować zadanie rsync jako zadanie cron. Ponieważ potrzebuje hasła, nie jestem w stanie wykonać croncji. Muszę podać hasło wraz z poleceniem rsync lub przechwycić hasło w pliku i będę z niego czytać. Moje polecenie będzie wyglądać następująco:Jak zautomatyzować rsync bez pytania o podanie hasła

rsync -aPe "ssh -i ' . $server->{'ssh_key'} . '" ' . $server_lock_dir; 

Więc gdzie mam umieścić hasło?

+1

Należy na superuser.com –

Odpowiedz

14

Nie musisz tego robić - wystarczy ustawić parę kluczy ssh i umieścić klucz publiczny w katalogu .ssh systemu zdalnego.

Wtedy po prostu to zrobić:

rsync -a -e ssh /local/path/ server:/remote/path/ 

(Zauważ, że -e ssh został domyślny już od kilku lat, więc prawdopodobnie można go pominąć, chyba że używasz bardzo starej wersji).

Istnieje "instrukcja" na temat konfiguracji kluczy here.

+0

PO wymienia zastosowanie sshkey z hasłem Jak robi. to rozwiąże hasło wejściowe? – ricosrealm

+0

Większość poradników zaleca tworzenie kluczy bez podania hasła – SDsolar

5

Jeśli chcesz to do pracy z cron, masz kilka możliwości:

  • konfiguracji kluczy ssh bez hasła - nie bardzo bezpieczne
  • konfiguracji kluczy SSH hasłem mniej, ale połączyć je z ssh ForceCommand w pliku authorized_keys, aby ograniczyć polecenia, które można uruchomić za pomocą tego klucza SSH. Zobacz man sshd, google na "ssh ForceCommand"
  • skonfiguruj hasło klucze ssh, ale połącz je z pękiem kluczy, aby zachować klucz w pamięci między sesjami. Pisałem na blogu na ten temat: ssh, ssh-agent, keychain and cron notes
4

Jeśli chcesz skopiować pliki zdalnie:

  1. Upewnij się, że masz klucz publiczny na komputerze lokalnym, które mogą logować się na zdalnej maszynie. (w tym przypadku moja ssh-kluczem jest „/home/myaccount/.ssh/id_rsa”
  2. Określ folder lokalny chcesz synchronizować z pilotem, w moim przypadku „/ home/myaccount/mysourcefolder”
  3. Określ pełna ścieżka do folderu docelowego na serwerze zdalnym, w moim przypadku remoteaccount @ remoteserver: "/ home/remoteaccoun t/mydestinationfolder /”

Uwaga:

  • --progress jest pokazanie postępu dla każdego pliku jest skopiowany
  • -a przeniesienia recusively wszystkie pliki w mysourcefolder
  • -v dla szczegółowości
  • -z do kompresowania porcji danych dla małych plików

Moje polecenie będzie wyglądać następująco:

rsync -avz --progress -e „ssh -l/home/myaccount /.ssh/id_rsa” /home/myaccount/mysourcefolder remoteAccount @ SerwerZdalny: "/ home/remoteAccount/mydestinationfolder /"

+0

Jak dokładnie utworzyłeś "/home/myaccount/.ssh/id_rsa" i co tam jest napisane? Czy jest to hasło do zdalnego serwera w tekst jawny (bez szyfrowania)? Nie chcę, aby inni użytkownicy mojego komputera (w tym administrator) mogli odczytać moje hasło. – mcExchange

Powiązane problemy