2009-11-04 15 views
6

Bu yazıyı birleştirilmiş Github depolarının bir klasörünü günlük olarak güncellemek için birlikte ekledim. Bir komut isteminden ararsam iyi çalışır, ancak bir cron işi olarak çalıştırıldığında id_rsa'mın nasıl güvenilir bir şekilde kullanılacağını anlayabilirim. eval 'ssh-agent' sadece bunu yapma girişimidir, ancak herhangi bir olumlu etkisi olmadığı görülmüştür. Bir cron işi üzerinden çalışan bash komut dosyasından SSH anahtarına erişme

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

Bu

muhtemelen genel olarak süreci hakkında gitmek için korkunç verimsiz bir yoldur, ama çalışıyor ve şimdiye kadar bunu görmüyorum. Kredilerimi kullanabilseydim, çok mutlu olurdum.

cevap

7

Yanlış türden alıntılar kullandığınızı düşünüyorum.

eval `ssh-agent` 

veya

eval $(ssh-agent) 

Bu ayarlamak için komut dosyası neden: ssh-agent şey yapmaz Düz-alıntı, sen ile komut ikamesi kullanarak çalıştırmaya sonuçlarını birleştirmek gerekir gerekli ortam değişkenleri. Bununla birlikte, , ssh-add siz değilseniz, hiçbir anahtarınız olmayacaktır. Anahtarlarınızda bir parola yoksa, ssh-add sadece komut dosyasından çalıştırılabilir.

Özel anahtarınızın bir parolası varsa, bu komut dosyasını bir cron işi yerine bir sunucu olarak çalıştırmak isteyebilirsiniz. Bu, aracıya bağlanmanızı ve özel anahtarlarınızı eklemenizi sağlar. komut komut satırından çalışan

gerçek nedeni masaüstü ortamı muhtemelen ssh-agent çalıştıran ve gerekli ortam değişkenleri tüm terminal pencereleri dağıtılmasını için düzenler olmasıdır. (Ya da onları çocuklar yaparak ve değişkenleri miras alarak veya kabuk kaynağınızı gerekli komutları yaparak). Normal iş akışınızda bir noktada ssh-add çalıştırıyorsunuzdur?

+0

Asla ssh-add'i kullanmadım, ama ben OS X'deyim, bu yüzden benim tahminim benim için olan bişey. Şifre içermeyen bir anahtar oluşturmak ve ssh-add kullanmak hile yapmış gibi görünüyor. Ayrıca Greg'in önerdiği gibi .ssh/config dizinlerini de yaptım. Şimdi çalışıyor! Teşekkürler –

2

ssh-agent süreci yalnızca parolanızı eklemek için ssh-add ile birlikte kullanabileceğiniz bir özellik sağlar. Anahtarınızı otomatik olarak kullanmaz (özel anahtarınız parolanız olmadan şifresi çözülemez).

Bunu yapmak için, bir passphraseless key oluşturmanız ve bunu cron işinden kullanmanız gerekir. Standart güvenlik uyarıları, anahtar kelimesi kullanıldığında geçerlidir.

+0

Betiği, github'a bağlanmak için bu anahtarı kullanacak şekilde nasıl yönlendiririm? –

+2

Ssh için -i seçeneğini kullanın veya bağlandığınız ana makine (ler) için hangi anahtar dosyasının kullanılacağını belirten bir '~/.ssh/config' dosyası oluşturun. –

İlgili konular