ssh İzin sadece cron işinde reddedildi


13

Çok garip bir sorun yaşıyorum. Ben ssh aracılığıyla (ortak anahtar kimlik doğrulaması kullanarak) uzak bir ana bilgisayarda bir komut çalıştıran küçük bir bash komut dosyası oluşturduk.

Bu komut dosyasını komut satırından el ile çalıştırdığımda iyi çalışıyor, ancak /etc/cron.hourly içine yerleştirildiğinde Permission denied, please try again.hata ile başarısız oluyor .

  • Ben açıkça kullanarak komut dosyasında anahtarı ayarlayın ssh -i /root/.ssh/id_rsa user@remote "command";
  • komut dosyası kök olarak çalışıyor (ben bir echo `id` > /tmp/whoami.logçift ​​kontrol için ekledim ); ve
  • ssh anahtarı parola korumalı değil ...

Sistem Ubuntu 12.04 sunucusudur, sorun giderme için uzak tarafta çok fazla erişimim yok, ancak dediğim gibi ssh'yi manuel olarak veya komut satırından aynı bash betiğini çalıştırıyor.

Bunun neden olduğu veya nasıl düzeltileceği hakkında herhangi bir fikir ??

Güncelleme

I dışarı dönüşler yanlış olduğunu ve SSH anahtar edildi bash oturumundan çalıştırırken bir komut dosyasından başarısız değil dolayısıyla neden, şifre (anahtarlık yüklenmesiyle ssh-agent) korumalı. . ~/.keychain/$HOSTNAME-shSenaryomu eklemek sorunu çözdü (beni doğru yöne yönlendiren ve kapsamlı bir cevap veren @grawity sayesinde).


Elle çalıştırmanın o anahtarı kullandığından emin misiniz? Ayarlamadan SSH_AUTH_SOCKve KRB5CCNAMEortam değişkenlerinden sonra tekrar test edin .
user1686

Önerin için teşekkürler. Seni tam olarak anladığımdan emin değilim. Elle çalıştırırken uzak ana bilgisayara bir komut bağlayabildiğim / çalıştırabildiğim için bu anahtarı kullandığından eminim. Bu değişkenleri ayarladıktan sonra tam olarak neyi test etmeliyim?
Yoav Aner

Ayrıca - ssh-agent kullanmıyorum, bu yüzden nasıl SSH_AUTH_SOCKilgili olduğundan emin değilim (her şeyi denemekten mutluluk duyuyorum). Anahtar dosyaya doğrudan erişiyorum ve anahtar dosyası parola korumalı değil. KRB5CCNAMEHızlı bir arama gelince bu Kerberos ile ilgisi olduğunu gösterdi. Yine - bu sorunun bağlantısını görmüyorum, ama belki de burada bir şey eksik ...
Yoav Aner

Senaryonuzu test edin elbette. Cron işleri etkileşimli komutlardan farklı bir ortamda çalıştığından, "bu anahtarı kullandığından emin olamazsınız". Bu komuta bir -vseçenek eklerseniz daha da iyi olurdu ssh...
user1686

Ama ben öyle yapıyorum. Her ssh -iiki durumda açıkça komut kullanarak anahtarı kullanın ... Ben komut dosyasında bu değişkenleri ayarlamayı deneyin ve bakın. Eklemek için iyi bir öneri -v- ben de ekleyeceğim.
Yoav Aner

Yanıtlar:


11

Etkileşimli komutlar ve cron işleri farklı ortamlarda çalışır - özellikle etkileşimli bir oturumda çalışan bir SSH aracısı veya bir Kerberos TGT depolanabilir. Çünkü yolu ait sshsiparişler kimlik doğrulama yöntemleri sen olamaz anahtar eklediğiniz sırf kullanıldığından emin olmak -iseçeneği.

  • Bir SSH aracısı çalışıyorsa, sshistemci her zaman açıkça belirtilen anahtarları kullanmadan önce aracı anahtarlarını dener .

  • Ağ Kerberos kullanıyorsa ve bir Kerberos TGT varsa, OpenSSH ortak anahtar kimlik doğrulamasını denemeden önce bunu kullanır .

Ortamınız hakkında hiçbir şey bilmiyorum, ancak bu olasılıkların her ikisini de kontrol etmek kolaydır:

  1. Komutu ekleyin unset SSH_AUTH_SOCKve unset KRB5CCNAMEöncesine ssh, ardından değiştirilen komut dosyasını el ile çalıştırın.

    Bu, komut dosyasının aracıyı veya Kerberos biletlerini görmesini engeller ve yalnızca açıkça belirtilen anahtarı kullanır.

  2. -vSeçeneğini ekleyin ssh. Bu, kimlik doğrulamanın nasıl gerçekleştiği hakkında daha fazla ayrıntı görüntüler.

Ayrıca ekleyebilir -oIdentitiesOnly=yesiçin sshkomuta; bu onu belirtilen anahtarı kullanmaya zorlar .


Ve ajana cron'dan erişme konusunda ipuçları eklerseniz - daha da iyi

Bu genellikle tavsiye edilmez, çünkü ajan genellikle etkileşimli giriş oturumunuza yakından bağlıdır. Özellikle, yalnızca giriş yaptığınızda başlar ve çıkış yaptığınızda öldürülür - ve SSH anahtarlarının kilidini açmak için şifrenize ihtiyacı vardır (parola korumalı oldukları varsayılarak).

"Anahtarlık" dan bahsettiniz - bu OS X programı mı yoksa Linux betiği mi? (Mac OS X'in mimarisi hakkında çok şey bilmiyorum, ancak AFAIK , kullanıcının ssh-agent'ına bir cronjob'dan erişmeyi çok daha zor hale getiriyor ...)


1
SSH anahtarlarınızı göstermeden, ancak SSH aracısını kullanarak güvenli sunuculara zamanlanmış SSH bağlantıları ayarlamak için ssh-cron kullanabilirsiniz. superuser.com/questions/463540/…
Luchostein

5

Bu sorunla ilgili başka bir geçici çözüm, dosyayı veya komutu yerel, mutlak yoluyla çalıştırmak yerine ssh komutunu çalıştırmak için cron'u ssh olarak yerel kutuya ayarlamaktır. Bu KRB5CCNAME önbelleğe alır ve / path / command çalışmaz.

# Fails:
0 * * * * /home/user/sshscript.sh

# Works:
0 * * * * /usr/bin/ssh user@localhost /home/user/sshscript.sh

#!/bin/bash
# Works:
unset SSH_AUTH_SOCK
unset KRB5CCNAME
/usr/bin/ssh user@localhost /home/user/sshscript.sh

1

SSH anahtarlarınızı göstermeden, ancak SSH aracısını kullanarak güvenli sunuculara zamanlanmış SSH bağlantıları ayarlamak için ssh-cron kullanabilirsiniz .


Bağımlılıklar Homebrew'da mevcut olmadığından, kurulum karmaşık görünüyor. Sanırım
şifresiz

-1

betiğinizi veya komutunuzu crontab'da aşağıdaki gibi çalıştırabilirsiniz:

0 * * * * bash -c -l "/home/user/sshscript.sh"

veya

0 * * * * bash -c -l "ssh root @ yourhost 'echo $ HOSTNAME'"


1
OP zaten betiği üzerinden çalıştırmaya çalışıyor cron; yani bu gerçekten bir cevap vermiyor gibi görünüyor.
bertieb
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.