Poniżej znajduje się skrypt, który próbuję uruchomić, który działa bez żadnych problemów
for i in `seq 200 2100`
do
usr=(`ssh -t -t -o ConnectTimeout=60 machine$1 finger | tail -1 | awk '{print$1}'`)
echo $usr
done
Ale kiedy dodam go do crontab, nie daje mi to użytkownika.
22 12 * * * sh /home/subrahmanyam/Scripts/who.sh
Proszę o przemyślenie .....
może być uruchomiony demon cron, więc musimy uwzględnić niektóre pliki binarne ...?
shell
ssh
cron
authentication
Gilles „SO- przestań być zły”
źródło
źródło
Odpowiedzi:
Możesz nawiązywać połączenia ssh w ramach sesji cron. Musisz skonfigurować uwierzytelnianie za pomocą klucza publicznego, aby mieć dostęp bez hasła. Aby to zadziałało, musisz mieć
PubkeyAuthentication yes
na każdym serwerze zdalnymsshd_config
.Możesz utworzyć parę kluczy prywatny / publiczny z hasłem lub bez niego. Jeśli używasz hasła (zalecanego), musisz także uruchomić ssh-agent. Bez hasła musisz tylko dodać parametr
-i your_identity_file
dossh
wiersza poleceń.ssh
użyje$HOME/.ssh/id_rsa
domyślnie.Powtórzyłem twój przykład, używając pary kluczy z hasłem. Oto jak to zrobiłem.
1) Utworzono parę kluczy za pomocą hasła. Zapisałem klucz prywatny jako
~/.ssh/id_rsa_test
, który domyślnie powinien mieć odpowiednie uprawnienia. Możemy wprowadzić puste hasło, aby go nie użyć.2) Wysłał klucz publiczny do serwerów, zrobił to samo dla wszystkich. Pamiętaj, że muszą mieć
PubkeyAuthentication
włączone.3) Uruchom ssh-agent jako usługę z
-s
. To nie zabije, jeśli się wylogujesz. Jego wyjściem jest poprawny skrypt powłoki, ustawiający środowisko, aby klient ssh wiedział, jak się z nim połączyć. Zapisujemy to w pliku (naprawdę potrzebna jest tylko pierwsza linia).4) Załadowałem powyższe do naszego obecnego środowiska, dzięki czemu możemy użyć
ssh-add
do dodania naszego klucza prywatnegossh-agent
. hasło z góry.5) Zweryfikowano, że został dodany.
6) Skrypt, którego użyłem, nieco zmodyfikowany niż twój. Zauważ, że nie umieściłem polecenia ssh w nawiasach i nie używam odwrotnych znaków
$()
, co jest lepszą alternatywą dla zastępowania poleceń (jest tobash
kompatybilne, nie wspomniałeś o używanej powłoce). Użyłem dokładnie tego samego polecenia ssh, co twoje.7) Mój crontab (zauważ, że mój
sh
tak naprawdę jestbash
)8) Wyjście
Jedynym problemem związanym z używaniem hasła jest to, że musisz wprowadzić je ręcznie przynajmniej raz. Tak więc powyższe nie będzie działać automatycznie po ponownym uruchomieniu.
źródło
Kto wpisuje hasło? Zadanie cron nie może dostać się do twojego agenta ssh, więc klucz publiczny nie będzie działał.
Musisz podać
ssh
plik klucza jawnie (patrz-i
opcja), ponieważ nie może on wysłać zapytania do agenta; i ten klucz musi mieć puste hasło.źródło
/dev/tty
do odczytu hasła zamiaststdin
; to nie zadziała z crona.known_hosts
? Ale tak, musisz uważać na uprawnienia - plik klucza prywatnego powinien być w trybie 0600 lub nawet 0400, którego właścicielem jesteś. Jeśli potrzebujesz innego użytkownika, aby móc z niego również korzystać, zajrzyj do list ACL POSIX lub podobnych.kinit
w zadaniu crona. To powiedziawszy, keytabs również wymagają takiej samej ostrożności w zakresie uprawnień; alessh
przynajmniej nie będzie na nich narzekać.Zamiast przechowywać plik tymczasowy, jak to robił forcefsck, wolę używać go
find
do wyszukiwania na aktywnym agencie.W temacie skryptu, który potrzebuje
ssh-agent
, używam:Wyszukuje
ssh-agent
gniazdo i zwraca pierwsze. Jest ograniczony tylko do bieżącego użytkownika, dlatego nie będziesz przypadkowo próbował użyć innych użytkowników i nie otrzymasz błędu odmowy uprawnień. Będziesz także musiał być zalogowany z aktywnymssh-agent
. (Ubuntu uruchamia agenta podczas uruchamiania GUI).Jeśli umieścisz to w innym skrypcie, musisz wywołać go za pomocą
source
lub,.
ponieważ trzeba ustawićSSH_AUTH_SOCK
zmienną.źródło
Użyj ssh-cron, aby skonfigurować zaplanowane połączenia SSH w celu zabezpieczenia serwerów bez ujawniania kluczy SSH, ale używając agenta SSH.
źródło
Możesz uruchomić swój skrypt lub polecenie w crontab, takim jak:
lub
źródło