Mając bardzo dziwny problem. Stworzyłem mały skrypt bash, który uruchamia polecenie na zdalnym hoście za pośrednictwem ssh (przy użyciu uwierzytelniania za pomocą klucza publicznego).
Kiedy uruchamiam ten skrypt ręcznie z wiersza poleceń, działa dobrze, ale po umieszczeniu w /etc/cron.hourly kończy się niepowodzeniem z Permission denied, please try again.
błędem.
- Wyraźnie ustawiam klucz w skrypcie za pomocą
ssh -i /root/.ssh/id_rsa user@remote "command"
; - skrypt działa jako root (dodałem
echo `id` > /tmp/whoami.log
podwójną kontrolę); i - klucz ssh nie jest chroniony hasłem ...
System to serwer Ubuntu 12.04, nie mam dużego dostępu po stronie zdalnej do rozwiązywania problemów, ale jak powiedziałem, ręczne uruchamianie ssh lub tego samego skryptu bash z wiersza poleceń działa.
Każdy pomysł, dlaczego tak się dzieje lub jak to naprawić?
aktualizacja
okazuje się, że się pomyliłem, a klucz ssh był chroniony hasłem (z pękiem kluczy ładującym ssh-agenta), dlatego nie udało mu się to ze skryptu, ale nie podczas uruchamiania z sesji bash. Dodanie . ~/.keychain/$HOSTNAME-sh
do mojego skryptu rozwiązało problem (dzięki @grawity, który wskazał mi właściwy kierunek i udzielił wyczerpującej odpowiedzi).
SSH_AUTH_SOCK
jest on powiązany (chociaż chętnie próbuję cokolwiek). Uzyskuję bezpośredni dostęp do pliku klucza, a plik klucza nie jest chroniony hasłem. Co do KRB5CCNAME
szybkiego wyszukiwania pokazał to jest coś zrobić z Kerberos. Znowu - nie widzę związku z tym problemem, ale może coś mi tu brakuje ...
-v
opcję do tego ssh
polecenia ...
ssh -i
W obu przypadkach jawnie używam klucza za pomocą polecenia ... Spróbuję usunąć te zmienne w skrypcie i zobaczę. Dobra sugestia do dodania -v
- ja też to dodam.
SSH_AUTH_SOCK
iKRB5CCNAME
zmiennych środowiskowych.