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
w sshd_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ę, że bkpuser
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 A 10.1.2.3
i zakładam, że wszystkie pliki, których kopię zapasową chcę wykonać, są poniżej /data
.
from="10.1.2.3",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,command="cd /data;/usr/bin/tar -cf - *; /usr/bin/logger -t BACKUP -p daemon.info \"INFO: Backup-files on $HOST fetched from ${SSH_CLIENT%% *} by $USER\";" ssh-dss AA.....
Na serwerze A
Jeśli używasz jednej z kart cron, która obsługuje @reboot
wpisy, dodaj taki wpis do bkpuser
s crontab za pomocą polecenia ssh -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.