Bir cron oturumu içinde ssh bağlantıları yapabilirsiniz. İhtiyacınız olan şey, şifresiz erişime sahip olacak bir ortak anahtar kimlik doğrulaması ayarlamaktır. Bunun çalışması için, PubkeyAuthentication yes
her uzak sunucuda olması gerekir sshd_config
.
Parolalı veya parola olmadan özel / genel anahtar çifti oluşturabilirsiniz. Bir parola kullanırsanız (önerilen) ssh-agent'ı da başlatmanız gerekir. Parola olmadan, parametreyi -i your_identity_file
yalnızca ssh
komut satırına eklemeniz gerekir . varsayılan olarak ssh
kullanılır $HOME/.ssh/id_rsa
.
Örneğinizi parola içeren bir anahtar çifti kullanarak çoğalttım. İşte böyle yaptım.
1) Anahtar çiftini parola ile oluşturdu. Özel anahtarı ~/.ssh/id_rsa_test
varsayılan olarak doğru izinlere sahip olması gereken şekilde kaydetti. Kullanmamak için boş bir parola girebiliriz.
john@coffee:~$ ssh-keygen -N "somephrase" -f .ssh/id_rsa_test
Generating public/private rsa key pair.
Your identification has been saved in .ssh/id_rsa_test.
Your public key has been saved in .ssh/id_rsa_test.pub.
[snip]
2) Ortak anahtarı sunuculara gönderdi, hepsi için de aynısını yaptı. PubkeyAuthentication
Etkinleştirmeleri gerektiğini unutmayın .
john@coffee:~$ ssh-copy-id -i .ssh/id_rsa_test server1
The authenticity of host 'server1 (11.22.33.1)' can't be established.
RSA key fingerprint is 79:e8:0d:f5:a3:33:1c:ae:f5:24:55:86:82:31:b2:76.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'server1,11.22.33.1' (RSA) to the list of known hosts.
john@server1's password:
Now try logging into the machine, with "ssh 'server1'", and check in:
.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.
3) ssh-agent'ı hizmet olarak çalıştırın -s
. Çıkış yaparsanız bu öldürmez. Çıktısı, ortamın ssh istemcisinin ona nasıl bağlanacağını bilmesi için geçerli bir kabuk betiğidir. Bunu bir dosyaya kaydediyoruz (sadece ilk satır gerçekten gerekli).
john@coffee:~$ ssh-agent -s | head -n 1 > ssh-agent.cf
john@coffee:~$ cat ssh-agent.cf
SSH_AUTH_SOCK=/tmp/ssh-VhyKL22691/agent.22691; export SSH_AUTH_SOCK;
4) Yukarıdaki bilgileri mevcut ortamımıza yükledik, böylece ssh-add
özel anahtarımızı eklemek için kullanabiliriz ssh-agent
. yukarıdan parola.
john@coffee:~$ source ssh-agent.cf
john@coffee:~$ ssh-add .ssh/id_rsa_test
Enter passphrase for .ssh/id_rsa_test:
Identity added: .ssh/id_rsa_test (.ssh/id_rsa_test)
5) Eklendi doğrulandı.
john@coffee:~$ ssh-add -l
2048 96:58:94:67:da:67:c0:5f:b9:0c:40:9b:52:62:55:6a .ssh/id_rsa_test (RSA)
6) Kullandığım komut dosyası, sizinkinden biraz değiştirilmiş. Ssh komutunu parantez içine almadığımı ve bunun yerine backticks kullanmadığımı fark ettim $()
, bu komut değiştirme için daha iyi bir alternatiftir (bu bash
uyumludur, hangi kabuğu kullandığınızı belirtmediniz). Seninkiyle aynı ssh komutunu kullandım.
john@coffee:~$ cat foo.sh
#!/bin/bash
source /home/john/ssh-agent.cf
for server in server1 server2; do
usr=$(ssh -t -t -o ConnectTimeout=60 $server finger | tail -1 | awk '{print $1}')
date=$(ssh -o ConnectTimeout=60 $server date)
echo "$server - $date - $usr" >> /home/john/foo.log
done
7) Benim crontab (not benim o sh
aslında bash
)
john@coffee:~$ crontab -l
# m h dom mon dow command
*/1 * * * * sh /home/john/foo.sh
8) Çıktı
john@coffee:~$ tail -n 4 foo.log
server1 - Wed Mar 23 14:12:03 EET 2011 - john
server2 - Wed Mar 23 14:12:04 EET 2011 - john
server1 - Wed Mar 23 14:13:03 EET 2011 - john
server2 - Wed Mar 23 14:13:04 EET 2011 - john
Parola kullanmayla ilgili tek sorun, en az bir kez manuel olarak girmeniz gerektiğidir. Bu nedenle, yukarıdaki yeniden başlatmadan sonra otomatik olarak çalışmaz.