2009-11-04 9 views
6

Skompilowałem ten skrypt, aby codziennie aktualizować folder rozgałęzionych repozytoriów Github. Działa dobrze, gdy wywołuję go z wiersza, ale mogę "wymyślić, jak sprawić, by wykorzystywał on moje id_rsa niezawodnie, gdy jest uruchamiany jako zadanie cron. eval 'ssh-agent' jest próbą zrobienia tego, ale nie wydaje się, aby miało to jakiś pozytywny wpływ.Uzyskiwanie dostępu do klucza SSH ze skryptu bash uruchomionego za pomocą zadania cron

#!/bin/sh 
LOGPATH=log.txt 
eval 'ssh-agent' 
cd /path/to/update/folder 
echo "-------START UPDATE-------">$LOGPATH 
echo "Updating repos:">>$LOGPATH 
date "+%F %T">>$LOGPATH 
COUNT=1 
find . -maxdepth 1 -type d | while read dir; do 
cd "$dir" 
LEN=$"${#dir}" 
if [ $LEN != "1" ] 
    then 
    echo "*********">>$LOGPATH 
    echo "$COUNT. " ${dir:2}>>$LOGPATH 
    /usr/local/bin/git pull upstream master>>$LOGPATH 2>> $LOGPATH 
    /usr/local/bin/git push origin master>>$LOGPATH 2>> $LOGPATH 
    let COUNT=COUNT+1 
fi 
cd "$OLDPWD" 
done 
echo "-------END UPDATE-------">>$LOGPATH 
exit 0 

Prawdopodobnie jest to strasznie nieskuteczny sposób, aby przejść o procesie w ogóle, ale to działa, a ja nie zawsze go zobaczyć. Gdybym mógł zdobyć to, by wykorzystać moje credo, byłbym uszczęśliwiony.

Odpowiedz

7

Uważam, że używasz niewłaściwych ofert. Zwykły cytuje ssh-agent nie robi nic, trzeba uwzględnić wyniki uruchomienie go za pomocą polecenia podstawienie z:

eval `ssh-agent` 

lub

eval $(ssh-agent) 

Powoduje to skrypt, aby ustawić potrzebne zmienne środowiskowe. Jednakże, ssh-agent nadal nie będzie mieć żadnych kluczy, chyba że otrzymasz je ssh-add. Jeśli twoje klucze nie zawierają hasła, wtedy ssh-add można po prostu uruchomić ze skryptu.

Jeśli Twój klucz prywatny ma hasło, możesz uruchomić ten skrypt jako demon, a nie zadanie cron. Umożliwiłoby to połączenie się z agentem i dodanie prywatnych kluczy.

Prawdziwym powodem, dla którego skrypt działa z wiersza poleceń, jest to, że środowisko graficzne prawdopodobnie działa pod numerem ssh-agent i organizuje potrzebne zmienne środowiskowe, które mają być propagowane do wszystkich okien terminala. (Czyniąc je dziećmi i dziedzicząc zmienne, czy też posiadając odpowiednie źródło poleceń powłoki.) Zgaduję, że w pewnym momencie normalnego workflow działasz ssh-add?

+0

Nigdy nie uruchomiłem ssh-add, ale jestem na OS X, więc domyślam się, że wszystko dzieje się dla mnie. Stworzenie klucza bez fraz hasła i użycie ssh-add sprawiły wrażenie. Zrobiłem też bity hosta w .ssh/config, jak sugerował Greg. Teraz działa! Dzięki –

2

Proces ssh-agent zapewnia tylko możliwość użycia z numerem ssh-add w celu dodania hasła. Nie powoduje to automatycznego udostępnienia klucza (klucz prywatny nie może zostać odszyfrowany bez podania hasła).

Aby to zrobić, musisz utworzyć passphraseless key i użyć go z zadania cron. Podczas korzystania z kluczy szyfrujących mają zastosowanie zwykłe ostrzeżenia bezpieczeństwa.

+0

Jak poleciłbym skrypt, aby użyć tego konkretnego klucza do połączenia z github? –

+2

Użyj opcji -i do ssh lub ustaw plik '~/.ssh/config', który wskazuje, który plik klucza ma być używany dla hostów, z którymi się łączysz. –

Powiązane problemy