मैं निम्न सिंटैक्स का उपयोग कर रहा है ताकि पासवर्ड क्वेरी के बिना की मेजबानी के लिए बाद में लॉग इन करने में सक्षम हो, एक की मेजबानी के लिए एक सार्वजनिक कुंजी कॉपी करने के लिए: जिसमेंकिसी होस्ट को सार्वजनिक कुंजी की प्रतिलिपि बनाने के लिए 'उम्मीद' का उपयोग कैसे करें?
ssh-copy-id $hostname
$hostname
साथ प्रणाली के होस्ट नाम है उपयोगकर्ता नाम, उदाहरण के लिए [email protected]
। है
The authenticity of host 'xxx (xxx)' can't be established.
RSA key fingerprint is xxx.
Are you sure you want to continue connecting (yes/no)?
मैं expect
के साथ मेरी समस्या को हल करने की कोशिश की, और यहाँ क्या मैं अब तक सभी टिप्पणियों के साथ है (: प्रकार की अतिरिक्त बातचीत - हालांकि, इस आदेश को कम से कम एक पासवर्ड क्वेरी की आवश्यकता है और - कभी कभी और सुझावों को शामिल किया):
#!/usr/bin/expect
set timeout 9
set hostname [lindex $argv 0]
spawn ssh-copy-id $hostname
expect {
timeout { send_user "\nFailed to get password prompt\n"; exit 1 }
eof { send_user "\nSSH failure for $hostname\n"; exit 1 }
"*re you sure you want to continue connecting" {
send "yes\r"
exp_continue
}
"*assword*" {
send "fg4,57e4h\r"
}
}
यह अब तक काम करता है के रूप में यह 'कैच' पहली मुलाकात को सही ढंग से नहीं, बल्कि एक दूसरे के। ऐसा लगता है कि सही पासवर्ड (fg4,57e4h) का उपयोग किया जा रहा है, लेकिन जब मैं मेजबान मशीन में लॉग इन करने का प्रयास करता हूं, तब भी मुझे पासवर्ड के लिए कहा जाता है। मैंने यह भी जांच की कि .ssh/authorized_hosts
में कोई प्रविष्टि नहीं की गई है। इस्तेमाल किया पासवर्ड भी बिल्कुल सही है, क्योंकि मैं इसे सिर्फ लॉग-इन में कॉपी और पेस्ट कर सकता हूं। स्क्रिप्ट किसी भी त्रुटि बनाने नहीं है, लेकिन पैदा करता है निम्नलिखित exp_internal 1
उत्पादन:
./expect_keygen XXX
spawn ssh-copy-id XXX
parent: waiting for sync byte
parent: telling child to go ahead
parent: now unsynchronized from child
spawn: returns {3602}
expect: does "" (spawn_id exp6) match glob pattern "*re you sure you want to continue connecting"? no
"*assword*"? no
XXX's password:
expect: does "XXX's password: " (spawn_id exp6) match glob pattern "*re you sure you want to continue connecting"? no
"*assword*"? yes
expect: set expect_out(0,string) "XXX's password: "
expect: set expect_out(spawn_id) "exp6"
expect: set expect_out(buffer) "XXX's password: "
send: sending "fg4,57e4h\r" to { exp6 }
हालांकि मैं न tcl हूँ और न ही विशेषज्ञ उम्मीद करते हैं, यह उम्मीद लगती है ssh-copy-id
आदेश करने के लिए सही स्ट्रिंग (यानी, पासवर्ड) भेजता है। लेकिन फिर भी, एक समस्या होनी चाहिए क्योंकि ऊपर की उम्मीद कमांड होस्ट की सार्वजनिक कुंजी की प्रतिलिपि नहीं है।
आप ['ssh-copy-id'] (http://man.cx/ssh-copy-id) का उपयोग क्यों नहीं करते? यही वह है। –
यह कार्य को सरल बनाता है; लेकिन क्या यह मेरे कोड स्निपेट के साथ बदले बिना काम करेगा? वैकल्पिक हां/नहीं प्रश्न के बारे में क्या, यह भी संभाला जाएगा (मैं अभी जांच नहीं कर सकता)। – Alex
स्क्रिप्ट के अंत में प्रॉम्प्ट की अपेक्षा करने का प्रयास करें। आपकी स्क्रिप्ट में, पासवर्ड भेजने के बाद उत्पन्न प्रक्रिया सही हो जाएगी, और पूरी एसएसएच-आईडी-कॉपी प्रक्रिया पूरी होने की गारंटी नहीं है। – asdone