आप क्रॉन सत्र के भीतर ssh कनेक्शन कर सकते हैं। पासवर्डलेस एक्सेस करने के लिए आपको एक सार्वजनिक कुंजी प्रमाणीकरण सेटअप करने की आवश्यकता है। यह काम करने के लिए, आपको PubkeyAuthentication yes
प्रत्येक दूरस्थ सर्वर में होना चाहिए sshd_config
।
आप पासफ़्रेज़ के साथ या उसके बिना एक निजी / सार्वजनिक कुंजी जोड़ी बना सकते हैं। यदि आप एक पासफ़्रेज़ (पुनःप्राप्त) का उपयोग करते हैं तो आपको ssh-Agent भी शुरू करना होगा। पासफ़्रेज़ के बिना, आप केवल पैरामीटर जोड़ना -i your_identity_file
करने के लिए ssh
कमांड लाइन। डिफ़ॉल्ट के रूप में ssh
उपयोग करेगा $HOME/.ssh/id_rsa
।
मैंने पासफ़्रेज़ के साथ एक प्रमुख जोड़ी का उपयोग करके आपके उदाहरण को दोहराया। यहाँ है कि मैं यह कैसे किया।
1) पासफ़्रेज़ के साथ प्रमुख जोड़ी बनाई गई। के रूप में निजी कुंजी को सहेजा ~/.ssh/id_rsa_test
, जिसमें डिफ़ॉल्ट रूप से सही अनुमतियाँ होनी चाहिए। हम एक का उपयोग नहीं करने के लिए एक खाली पासफ़्रेज़ दर्ज कर सकते हैं।
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) सर्वर के लिए सार्वजनिक कुंजी भेजा, उन सभी के लिए भी यही किया। याद रखें कि उन्हें PubkeyAuthentication
सक्षम होना चाहिए।
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- एजेंट चलाएं -s
। यदि आप लॉगआउट करते हैं तो यह इसे नहीं मारेगा। इसका आउटपुट एक मान्य शेल स्क्रिप्ट है, जिससे वातावरण सेट होता है ताकि ssh क्लाइंट को पता चले कि उसे कैसे कनेक्ट करना है। हम इसे एक फ़ाइल में सहेजते हैं (केवल पहली पंक्ति वास्तव में आवश्यक है)।
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) हमारे वर्तमान परिवेश में ऊपर लोड किया गया ताकि हम ssh-add
अपनी निजी कुंजी को जोड़ने के लिए उपयोग कर सकें ssh-agent
। ऊपर से पासफ़्रेज़।
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) सत्यापित यह जोड़ा गया है।
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) जो स्क्रिप्ट मैंने इस्तेमाल की, वह आपकी तुलना में थोड़ी संशोधित थी। ध्यान दें कि मैंने कोष्ठक में ssh कमांड को संलग्न नहीं किया था और बैकटिक्स का उपयोग नहीं कर रहा था $()
, जो कमांड प्रतिस्थापन के लिए एक बेहतर विकल्प है (यह bash
संगत है, आपने उल्लेख नहीं किया है कि आप किस शेल का उपयोग कर रहे हैं)। मैंने आपके समान सटीक ssh कमांड का उपयोग किया।
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) मेरा कोंट्राब (ध्यान दें कि मेरा sh
वास्तव में है bash
)
john@coffee:~$ crontab -l
# m h dom mon dow command
*/1 * * * * sh /home/john/foo.sh
8) आउटपुट
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
पासफ़्रेज़ का उपयोग करने में एकमात्र समस्या यह है कि आपको इसे कम से कम एक बार मैन्युअल रूप से दर्ज करने की आवश्यकता होती है। तो, उपरोक्त रीबूट के बाद स्वचालित रूप से काम नहीं करेगा।