2012-11-28 50 views
21

में स्क्रिप्ट चलाने के दौरान सर्वर तक पहुंचने के लिए कुंजी को कैश नहीं करेगा, मेरे पास लिनक्स सर्वर से कुछ फ़ाइलों को एसएसएच के माध्यम से विंडोज़ में कॉपी करने के लिए आवश्यक एक सरल स्वचालन प्रक्रिया थी। यह पुटी का उपयोग करके पूरा किया जा सकता है।पुट्टी हडसन

प्रोटोकॉल के हिस्से के रूप में एसएसएच, मेजबान की पहचान को सत्यापित करता है और यदि सही नहीं है, तो आपको मेजबान की पहचान स्वीकार करने के लिए संकेत मिलेगा। जब मैं मैन्युअल रूप से लिट्क्स सर्वर को पुटी से कनेक्ट करता हूं, तो यह किसी भी जानकारी को मेजबान की पहचान को स्वीकार करने के लिए संकेत नहीं देगा। लेकिन एक बार जब मैंने इस स्वचालन प्रक्रिया को हडसन में शेड्यूल नौकरी के रूप में रखा। सटीक संदेश था:

सर्वर की होस्ट कुंजी रजिस्ट्री में कैश नहीं की गई है। आपके पास गारंटी नहीं है कि सर्वर वह कंप्यूटर है जिसे आप सोचते हैं। सर्वर का आरएसए 2 कुंजी फिंगरप्रिंट है: एसएसएच-आरएसए 1024 सीसी: 78: 13: ए 3: 68: ए 6: 5 9: 7e: बी 8: 23: 2 डी: 13: 3e: 66: 9 बी: बी 9 यदि आप इस होस्ट पर भरोसा करते हैं , पुटी के कैश की कुंजी जोड़ने के लिए "y" दर्ज करें और कनेक्टिंग पर जाएं। यदि आप केवल एक बार कनेक्ट करना चाहते हैं, बिना कैश की कुंजी जोड़कर, "n" दर्ज करें। यदि आप इस होस्ट पर भरोसा नहीं करते हैं, तो कनेक्शन छोड़ने के लिए प्रेस रिटर्न दबाएं। कैश में स्टोर कुंजी? (वाई/एन) कनेक्शन छोड़ दिया गया।

आमतौर पर आप "वाई" को हिट करेंगे, मान लें कि होस्ट कुंजी सही है, इसे भविष्य में कनेक्शन में स्टोर करने के लिए। इसका भंडारण HKEY_CURRENT_USER \ Software \ SimonTatham \ Putty \ SshHostKeys

के तहत रजिस्ट्री में जाता है लेकिन दुर्भाग्य से, हडसन में चल रही स्वचालन प्रक्रिया पुटी कैश में होस्ट कुंजी स्टोर करने के लिए "वाई" हिट करके बातचीत नहीं कर सकती है। और मैं डॉस कमांड के तहत ऑटोमेशन प्रक्रिया को चलाकर भी इस मुद्दे को पुन: उत्पन्न नहीं कर सकता।

क्या कोई समस्या को हल करने का तरीका जानता है?

उत्तर

25
echo y | pscp -i /path/to/key/file [email protected]:/tmp/file . 
echo y | plink -i /path/to/key/file scripts.sh 

यह पहली बार में स्थान निम्न के लिए महत्वपूर्ण fingureprint मेजबानी स्टोर करेगा, और अनदेखी करेंगे "y" अगली बार

HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\SshHostKeys 
+3

उपसर्ग "इको वाई |" के साथ बातचीत को अनुकरण करने के लिए बहुत ही स्मार्ट समाधान –

+0

मैंने कोशिश की और मुझे तब तक परेशानी हुई जब तक मुझे एहसास हुआ कि मैं अभी भी बैच पैरामीटर समेत था। मैंने इसे हटा दिया और यह सही ढंग से काम किया। – MattEvansDev

+0

यदि पासवर्ड गलत है, तो "y" को प्रतिबिंबित किया जाएगा जब पट्टी पासवर्ड को रीट्रीज़ करेगी, जिससे स्क्रिप्ट विफल हो जाएगी। –

3
echo y | plink -ssh <[email protected]> -pw <password> exit 
plink -ssh <[email protected]> -pw <password> [yourcommand] 

स्पष्टीकरण: पाइप गूंज का उपयोग करना, उपयोगकर्ता इनपुट ' वाई 'चयनित कमांड के लिए और फिर बाहर निकलें। अगला कथन तब आपके आदेश को चलाने के लिए दूसरी बार निष्पादन योग्य निष्पादन का आह्वान करेगा।

10

आंतरिक सर्वरों के लिए, अंधे echo y | ... चाल संभवतः पर्याप्त (और सुपर सरल) है।

हालांकि, बाहरी सर्वरों के लिए इंटरनेट पर पहुंचने के लिए, सर्वर होस्ट कुंजी को हर बार अंधेरे से स्वीकार करने के बजाय स्वीकार करना अधिक सुरक्षित होता है।


एक .reg फ़ाइल बनाएं जिसे आप क्लाइंट मशीन पर चला सकते हैं।

  • कनेक्ट सहभागी किसी भी मशीन से plink ...
  • -HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\SshHostKeys
  • राइट-क्लिक करें प्रविष्टि ([email protected]<port>:<address> की तरह एक नाम होगा)
  • सत्यापित करें और होस्ट कुंजी
  • ओपन स्वीकार regedit
  • नेविगेट
  • .reg फ़ाइल में निर्यात करें

कैश क्लाइंट मशीन (रों)

  • भागो किसी भी क्लाइंट मशीन पर reg फ़ाइल पर होस्ट कुंजी है कि उस सर्वर से कनेक्ट करने होंगे
  • सुनिश्चित करें कि उपयोगकर्ता खाते का उपयोग कर लॉग इन करने के लिए कि होगा रन plink (यानी मामले में यह एक सेवा खाता) है
+0

'echo y' गिट के साथ उपयोग करते समय मेरे लिए काम नहीं करेगा। बस अगर किसी और को – user1167442

4

जब Bazaar उपयोग करते हुए, और मैन्युअल रूप से मेरी SSH ग्राहक स्थापित करने के बजाय तो paramiko में बनाया पोटीन होने के लिए मैं इस समस्या हो रही थी, और मैं ठीक उसी समस्या हो रही थी, जहां यह यह कहने की कोशिश कर रहा था कि कुंजी 'ज्ञात मेजबान' में नहीं थी और पूछ रही थी कि मुझे इसे सत्यापित करना चाहिए, लेकिन इसे एक अलग कार्यक्रम द्वारा चलाया जा रहा है, न कि सामान्य टर्मिनल में, यह तुरंत बाहर निकल गया।

यदि आप कर सकते हैं, तो बस पट्टी चलाएं और मैन्युअल रूप से रजिस्ट्री में एसएसएच सार्वजनिक कुंजी को सहेजने के लिए सर्वर से कनेक्ट करें ताकि जब स्वचालित प्रोग्राम कनेक्ट करने का प्रयास करता है तो उसे y/n विकल्प के साथ प्रस्तुत नहीं किया जाएगा।

या आप एक छोटे से python3 स्क्रिप्ट है कि मैं दो 'के नाम से मेजबान' प्रारूपों के बीच परिवर्तित करने के लिए लिखा है कि पोटीन और अधिभारित उपयोग का उपयोग कर सकते हैं: https://github.com/mgrandi/openssh-putty-knownhost-converter

`

9

मैं भी इस समस्या थी जब एक बैच का उपयोग कर शेड्यूलर जो स्थानीय सिस्टम खाते का उपयोग करता है। इस खाते के साथ आप होस्ट कुंजी स्वीकार करने के लिए लॉग ऑन नहीं कर सकते हैं या मैन्युअल रूप से HKEY_CURRENT_USER मान सेट कर सकते हैं। मैंने पाया कि बनाने कुंजी निम्नलिखित:

HKEY_USERS\.DEFAULT\Software\SimonTatham\PuTTY\SshHostkeys 

और यहां मेजबान स्ट्रिंग मान जोड़ने स्थानीय सिस्टम खाते के लिए काम किया।

+1

पर ठोकर खाती है तो मुझे यह काम Quartz.net के साथ करने के लिए वास्तव में क्या चाहिए! – K0D4

4

plink की इसी संस्करण के साथ 9 सितं, 2014 तक (plink 0.66 के साथ परीक्षण), तो आप कर सकते हैं -hostkey विकल्प का उपयोग, के रूप में यहाँ प्रलेखित:

http://www.chiark.greenend.org.uk/~sgtatham/putty/wishlist/accept-host-keys.html

मूल प्रश्न में कुंजी का उपयोग करना :

plink -hostkey cc:78:13:a3:68:a6:59:7e:b8:23:2d:13:3e:66:9b:b9 [email protected] 

मैं सफलतापूर्वक "-hostkey" मेरी स्क्रिप्ट में प्रारंभिक होस्ट कुंजी उत्साह समस्या को हल प्राप्त करने के लिए इस्तेमाल किया।

"-होस्टकी" को पीएससीपी (संस्करण 0.66) के साथ काम करने के लिए भी दस्तावेज किया गया है।

ध्यान दें कि यदि आप मेजबान बदलते हैं या sshd सर्वर कुंजी को पुन: गणना करता है तो आपको होस्टकी को बदलना होगा।कोड के माध्यम से

1

समाधान: संकलित करें पोटीन/ऑटो को plink स्वीकार करते हैं और दुकान SSH कुंजियों

आप कैश में SSH मेजबान चाबियाँ स्टोर करने के लिए संकेत दिया जाता है, के बाद से उपयोगकर्ता खाते plink न निष्पादित रजिस्ट्री में मेजबान है , यह लटकता है, क्योंकि यह उत्तर के लिए इंतजार कर रहा है (हाँ/नहीं ..)।
यदि आप कोड के माध्यम से इसे हल करना चाहते हैं, तो पट्टी स्रोत कोड प्राप्त करें, कुछ बदलाव करें, संकलित करें और नई प्लगइन बाइनरी का उपयोग करें - जो कि बिना किसी प्रॉम्प्ट होस्ट एसएस को होस्ट करता है।
इसे कैसे करें?

  • डाउनलोड नवीनतम पोटीन स्रोत कोड से: https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html

    ध्यान ("स्रोत कोड" अनुभाग और डाउनलोड "विंडोज स्रोत संग्रह" के लिए देखो): खोलने के लिए पोटीन खिड़कियों के लिए, मैं तो निम्न कार्य करें विजुअल स्टूडियो के साथ स्रोत कोड, आपको रिलीज संस्करण डाउनलोड करना होगा, यदि आप किसी विशिष्ट प्रतिबद्धता (या सिर) पर चेकआउट करते हैं, तो विजुअल स्टूडियो समाधान फाइलें निर्माण के दौरान बनाए जाने के बाद मौजूद नहीं होंगी।
    से लिया: Cannot compile PuTTY, Plink or Pscp on Windows due to missing Windows/MSVC subdirectory

  • स्रोत कोड अपडेट करने की आवश्यकता है, हम क्या बदलने के लिए समारोह verify_ssh_host_key (..) "wincons.c" में में स्थित है चाहता हूँ, हम कोड है कि शीघ्र के हिस्से के बाहर टिप्पणी करना चाहते हैं के लिए हां/नहीं और बस कुंजी संग्रहीत, टिप्पणी बाहर के साथ शीघ्र कोड शुरू करें:

    /*hin = GetStdHandle(STD_INPUT_HANDLE); 
    GetConsoleMode(hin, &savemode); 
    SetConsoleMode(hin, (savemode | ENABLE_ECHO_INPUT | 
         ENABLE_PROCESSED_INPUT | ENABLE_LINE_INPUT)); 
    ReadFile(hin, line, sizeof(line) - 1, &i, NULL); 
    SetConsoleMode(hin, savemode); 
    
    if (line[0] != '\0' && line[0] != '\r' && line[0] != '\n') { 
    if (line[0] == 'y' || line[0] == 'Y') 
    store_host_key(host, port, keytype, keystr); 
    return 1; 
    } else { 
        fprintf(stderr, abandoned); 
        return 0; 
    }*/ 
    

बजाय निम्नलिखित लाइनों को जोड़ने के साथ जारी रखें (कोड को होस्ट कुंजी संचय के लिए जिम्मेदार):

store_host_key(host, port, keytype, keystr); 
return 1; 

समाधान संकलित करें और प्लिंक/pscp लें .. आप बिना किसी संकेत के जाने के लिए अच्छे हैं, यह एसएसएच होस्ट कुंजी स्वीकार करता है और फिर रजिस्ट्री में स्टोर करता है।