mam cronjob:
0 9 * * * rsync -a mydir remote_machine:
zainstalowałem to z 'crontab -e'. mam uruchomionego agenta ssh, a kiedy wykonuję samą komendę rsync, działa ona bez interakcji użytkownika lub hasła, ale cronjob kończy się niepowodzeniem z następującym komunikatem:
Date: Wed, 9 Dec 2009 11:11:00 -0600 (CST)
From: Cron Daemon <me@my_machine.my_domain>
To: me@my_machine.my_domain
Subject: Cron <me@my_machine> rsync -a /home/me/mydir remote_machine:
Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,gssapi-with-mic,password).
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: unexplained error (code 255) at /SourceCache/rsync/rsync-35.2/rsync/io.c(452)
[sender=2.6.9]
dlaczego to nie działa wiem, że cronjobs działają w / me jako użytkownik (jeśli uruchamiam „* * * * * touch / tmp / a” jestem właścicielem pliku), więc zakładam, że rsync loguje się jako ja za pomocą mojego klucza prywatnego ...
brelok jest tym, czego potrzebujesz! Wystarczy go zainstalować i dodać następujący kod w swoim
.bash_profile
(lub równoważnym):Dla config.fish ( 2 ):
Następnie użyj poniższego kodu w skrypcie, aby załadować zmienne środowiskowe ssh-agent:
Dla ryb:
Jeśli twój klucz ma hasło, pęku kluczy zapyta Cię raz (ważne, dopóki nie uruchomisz ponownie komputera lub nie zabijesz agenta ssh).
Uwaga: pęku kluczy generuje również kod do
csh
ifish
powłoki, więc po prostu zamień przyrostek „-sh” na „-csh” lub „-fish”.źródło
Nie mam wystarczającej liczby przedstawicieli, aby zagłosować za pierwszą odpowiedzią, ale rozwiązało to mój problem. Jeśli chodzi o ssh-agent, możesz już mieć jednego uruchomionego. Oto skrypt, aby wyodrębnić SSH_AGENT_PID i SSH_AUTH_SOCK ze środowiska bez żadnych dodatkowych rzeczy do zapisania przy uruchomieniu ssh-agent. (Zakłada, że masz perla)
Umieść w skrypcie następujące elementy. (na przykład findagent.pl)
i wewnątrz skryptu cron dodaj wiersz:
eval `{ścieżka do skryptu} / findagent.pl`
źródło
Przypuszczam, że używasz uwierzytelniania opartego na kluczach do uwierzytelniania się na zdalnym komputerze. Wypróbuj poniższą linię:
Gdzie .ssh / id_rsa jest ścieżką do twojego klucza prywatnego. Jest to dokładna linia, której używam do tworzenia kopii zapasowych i zawsze działa dla mnie dobrze.
Najlepsze życzenia,
Fabian
źródło
Alternatywnie, zamiast używać agenta ssh, zmusiłem skrypt do eksportu RSYNC_RSH = "ssh -i /home/user/.ssh/id_rsa" unset SSH_AGENT_PID unset SSH_AUTH_SOCK przed wywołaniem rsync. Umieszczając go w RSYNC_RSH zamiast używać „-e ...”, ułatwiło dostosowanie używanego pliku id na podstawie hosta.
Mam nadzieję, że to pomaga, B.
źródło