2009-11-04 3 views
6

이 스크립트를 함께 사용하여 일일 단위로 포크 된 Github 저장소 폴더를 업데이트했습니다. 프롬프트에서 호출하면 정상적으로 실행되지만 cron 작업으로 실행할 때 id_rsa를 안정적으로 활용하는 방법을 파악할 수 있습니다. eval 'ssh-agent'은이를 수행하기위한 시도이지만 긍정적 인 영향을 미치지는 않습니다.cron 작업을 통해 실행중인 bash 스크립트에서 SSH 키 액세스

#!/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 

이것은 일반적으로 프로세스를 진행하는 데 매우 비효율적 인 방법 일 수 있지만 작동하지만 실제로는 볼 수 없습니다. 내 신임을 사용하도록 할 수 있다면, 나는 기뻐할 것입니다.

답변

7

잘못된 인용문을 사용하고 있습니다.

eval `ssh-agent` 

또는

eval $(ssh-agent) 

이 설정 스크립트를 발생합니다 SSH 에이전트가 아무것도하지 않는 일반이-인용, 당신은 함께 명령 치환를 사용하여 실행 결과를 통합해야 필요한 환경 변수. 그러나 ssh-agent에는 ssh-add 키가없는 한 계속 키가 없습니다. 키에 암호가없는 경우 ssh-add을 스크립트에서 간단히 실행할 수 있습니다.

개인 키에 암호가있는 경우이 스크립트를 cron 작업이 아닌 데몬으로 실행할 수 있습니다. 이렇게하면 에이전트에 연결하고 개인 키를 추가 할 수 있습니다.

스크립트가 명령 줄에서 작동하는 진정한 이유는 데스크톱 환경이 ssh-agent 일 것입니다. 그리고 필요한 환경 변수가 모든 터미널 창에 전파되도록 조정합니다. (이들을 자식으로 만들고 변수를 상속하거나 쉘 소스에 필요한 명령을 제공함으로써). 정상적인 워크 플로우에서 어느 시점에 ssh-add을 실행하고 있다고 생각합니까?

+0

나는 ssh-add를 실행 한 적이 없지만 OS X을 사용하고 있으므로 추측이 모두 나를 위해 일어납니다. 암호를 사용하지 않고 ssh-add를 사용하여 키를 생성하면 트릭이 완료된 것 같습니다. 그레그 (Greg)가 제안한대로 .ssh/config의 호스트 비트도 만들었습니다. 이제 작동합니다! 감사 –

2

ssh-agent 프로세스는 암호문을 추가 할 때 ssh-add과 함께 사용할 수있는 기능 만 제공합니다. 자동으로 키를 사용할 수있는 것은 아닙니다 (개인 키는 암호 없이는 해독 할 수 없습니다).

이렇게하려면 passphraseless key을 만들고 cron 작업에서 사용해야합니다. 암호가없는 키를 사용할 때는 일반적인 안전 경고가 적용됩니다.

+0

github에 연결하기 위해 특정 키를 사용하도록 스크립트에 지시하는 방법은 무엇입니까? –

+2

ssh에 -i 옵션을 사용하거나 연결중인 호스트에 사용할 키 파일을 나타내는'~/.ssh/config' 파일을 설정하십시오. –

관련 문제