Aby robić to codziennie w większości dystrybucji Linuksa, powinieneś być w stanie po prostu umieścić rsync
polecenie (zgodnie z odpowiedzią @ guido ) w skrypcie i umieścić skrypt w /etc/cron.daily
katalogu. Tak długo, jak anacron
jest zainstalowany (może nie być domyślnie), wszelkie pominięte cron.daily
zadania będą wychwytywane przy następnym uruchomieniu komputera (a także uruchamiane o północy, jeśli maszyna zostanie przełączona).
W przypadku skryptu wystarczy wykonać:
#!/bin/sh
rsync -a user@serverB:/source/folder/ /destination_folder
Możesz dodać -z
opcję (kompresji), jeśli kopia zapasowa jest wykonywana przez wolne połączenie (ish) lub jeśli chcesz zaoszczędzić przepustowość, ale z mojego doświadczenia wynika, że faktycznie pogorszy to wydajność nowoczesnych maszyn / sieci.
Jeśli chcesz prowadzić dziennik każdej kopii zapasowej, możesz zrobić coś takiego:
#!/bin/sh
rsync -av user@serverB:/source/folder/ /destination_folder \
>/var/log/backup_log 2>&1
Uwaga: aby działało to jako zadanie crona, musisz mieć skonfigurowane bez hasła hasło ssh dla roota na serwerze A, aby zalogować się na serwerze B. Musi to być konto root (tzn. Klucze do /root/.ssh
), ponieważ cron.daily
zadania są uruchamiane jako root.
anacron
nie odbieracron
zleceń dla poszczególnych użytkowników . Chociaż zawsze możesz użyćsu
/sudo
ze skryptu, aby uruchomić rsync jako określony użytkownik. Pamiętaj jednak, że klucze będą bezpieczniej trzymane/root
.user
może być zwykłym użytkownikiem na komputerze B, w zależności od tego , co chcesz wykonać kopię zapasową.ls -l
do pytania dodasz próbkę błędów i wyniki niektórych plików, ludzie mogą udzielić dalszych porad.Sugerowałbym użycie rdiff-backup . Używam go teraz do tworzenia automatycznych przyrostowych kopii zapasowych każdej nocy moich własnych danych (dwie stacje robocze, dwa serwery i jedno konto na serwerze innej osoby).
Użyłem do tego rsync wcześniej, ale przełączyłem się na rdiff-backup, ponieważ jest to wygodniejsze i może tworzyć przyrostowe kopie zapasowe dużych plików, takich jak obrazy dysków maszyny wirtualnej. rdiff-backup jest podobny do moich poprzednich skryptów rsync do tworzenia kopii zapasowych, ale zostało zrobione dobrze .
Umieściłem plik skryptu w /etc/cron.daily na komputerze, na którym przechowywana jest kopia zapasowa, który uruchamia rdiff-backup raz dziennie wcześnie rano i pobiera dane ze zdalnego komputera.
źródło
Oprócz wszystkich poprzednich odpowiedzi, oto jedna, która opiera się na kluczach SSH z ograniczeniami dotyczącymi tego, co można zrobić po zalogowaniu się przy użyciu tego klucza.
Na serwerze A
W tym przypadku jest mniej ważne, jeśli utworzysz osobnego użytkownika lub użyjesz jednej z istniejących nazw użytkowników, choć gdyby to był ja, stworzyłbym osobnego użytkownika. W
bkpuser
poniższych przykładach użyję nazwy użytkownika dla obu serwerów.Po zalogowaniu
bkpuser
utwórz klucz SSH bez hasła.Na serwerze B
Włącz
PubkeyAuthentication
wsshd_config
.Utwórz użytkownika
bkpuser
. Ustaw bardzo skomplikowane hasło lub wyłącz logowanie hasłem dla tego użytkownika (dokładnie to, jak to zrobisz, będzie zależeć od tego, jakiego uniksa i dystrybucji używasz). Chodzi o to, że użytkownik powinien zalogować się tylko za pomocą klucza SSH. Upewnij się, żebkpuser
ma dostęp do odczytu do wszystkich katalogów i plików, których kopię zapasową chcesz utworzyć.Skopiuj część publiczną klucza utworzonego na A do
~bkpuser/.ssh/authorized_keys
B. Edytuj. Aby automatycznie uruchomić polecenie przy połączeniu. To polecenie nie powinno być wskaźnikiem do skryptu powłoki; zamiast tego wstaw skrypt powłoki bezpośrednio do klucza. Uwzględnij również ograniczenie, dzięki któremu klucz może być używany tylko z serwera A, a nie z innego serwera. W poniższym przykładzie podaję adresowi IP serwer A10.1.2.3
i zakładam, że wszystkie pliki, których kopię zapasową chcę wykonać, są poniżej/data
.Na serwerze A
Jeśli używasz jednej z kart cron, która obsługuje
@reboot
wpisy, dodaj taki wpis dobkpuser
s crontab za pomocą poleceniassh -i ~bkpuser/.ssh/id_dsa serverB > backup.tar.gz
. Jeśli to nie pozwala, ustaw je w dowolnym momencie - gdyby były to moje dane, prawdopodobnie zrobiłbym to codziennie.źródło
Oto kompletne rozwiązanie do tworzenia kopii zapasowych serwera B na serwerze A każdego dnia o 4 rano za pomocą SSH.
Utwórz automatyczne połączenie SSH z serwera B do serwera A.
Utwórz skrypt kopii zapasowej na serwerze B
nano / root / backup
chmod 744 / root / backup
Zautomatyzuj tworzenie kopii zapasowych na serwerze B
crontab -e
Aby uzyskać więcej informacji, zobacz strony Połącz się z SSH bez podawania hasła w systemie Linux i Utwórz kopię zapasową serwera w systemie Debian lub Ubuntu Linux .
źródło
Możesz do tego użyć rsync (w pewnym sensie odwrotnej):
gdzie:
źródło
-a
implikuje-r
.Sedno sprawy polega na tym, jak to zrobić automatycznie (nie trzeba wprowadzać haseł):
screen
lubtmux
eval $(ssh-agent)
ssh-add
export RSYNC_RSH="ssh -i ~/.ssh/id_rsa ..."
while :; do rsync -av u@h:/p /local; sleep $[24*60*60]; done
źródło
ssh
.RSYNC_SSH
do wyszukiwania standardowych lokalizacji kluczy SSH....
kropki, w których możesz dodawać przydatne argumenty. Nie przeczytałeś też mojego ostatniego komentarza, w którym wspominam o „naprawdę ważnym pytaniu”, dlatego nigdy nie zrobiłbym tego z kluczami bez hasła. Musisz także włączyćPubkeyAuthentication
i nikt tego nie powiedział.