2015-08-21 5 views
5

मैं निम्नलिखित करना चाहते हैं:सर्वर पर मैन्युअल रूप से सेट ssh मेजबान कुंजी/डिजिटल महासागर बूंद

  1. मेरे विकास मशीन से डिजिटल महासागर बूंदों बनाएँ (मेरा परीक्षण है, जो बहुत अधिक समय लग जाता है वितरित करने के लिए)।
  2. सुरक्षित रूप से बूंदों को आदेश जारी करें।
  3. बूंद को नष्ट करें।

मैं # 2 पर अटक गया हूं। मैं डिजिटल महासागर एपीआई के माध्यम से सफलतापूर्वक बूंदों को बना सकता हूं, और मैं अपनी एसएसएच कुंजी authorized_keys क्षेत्र में सेट कर सकता हूं, लेकिन अगर मैं डिजिटल महासागर को कुंजी बनाने की अनुमति देता हूं तो मेरे पास सर्वर की सार्वजनिक कुंजी को सत्यापित करने का कोई तरीका नहीं है।

अब सामान्यतः यदि यह एक ही डेटा सेंटर के भीतर होता है, तो यह चिंता नहीं होगी, क्योंकि मैं डिजिटल महासागर पर भरोसा कर सकता हूं कि एमआईटीएम हमले को लागू नहीं कर रहा क्योंकि उनके पास रूट है, लेकिन जब से मैं अपने विकास से जुड़ रहा हूं मशीन मुझे सार्वजनिक कुंजी पर भरोसा करने का एक तरीका चाहिए।

मैं विभिन्न क्लाउड-init गाइड निम्नलिखित की कोशिश की है, लेकिन मैं हमेशा त्रुटि मिलती है:

ssh [email protected] 
Connection closed by 178.62.69.133 

मैं त्रुटि के लिए किसी भी संभावना को खत्म करने की कोशिश की है, मैं भी निजी एन्कोडिंग base64 का सहारा लिया गया है कुंजी, यह सोचकर कि कुछ भागने वाली समस्या हो सकती है।

e = "ssh-keygen -t ecdsa-sha2-nistp256 -f #{loc} -q -N #{password} -C \"\"" 
system(e) 

कौन इस के लिए विस्तारित:

ssh-keygen -t ecdsa-sha2-nistp256 -f /tmp/testing-60f42fcf -q -N 77924d8f4fa12a365c8c003ca091f5ad6a2c4c22 -C "" 

मैं तो base64 यह एनकोड,

private_key = `base64 --wrap=0 #{loc}`.chomp 
public_key = `base64 --wrap=0 #{loc}.pub`.chomp 

और यह जगह

यह आदेश मैं कुंजी बनाने के लिए उपयोग है क्लाउड-इनिट यामल फ़ाइल में (| का उपयोग नहीं करना चाहता था क्योंकि यह यमल में एक विशेष चरित्र है, और मैं यह से बचना चाहते थे संभव हो तो):

#cloud-config 
--- 
runcmd: 
- echo test > /root/test 
- rm /etc/ssh/ssh_host* 
- echo LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tClByb2MtVHlwZTogNCxFTkNSWVBURUQKREVLLUluZm86IEFFUy0xMjgtQ0JDLEY3MDNDNzM1QTAxQzgyNEVBRjhCODA4NkVDREIyMjAwCgpiYlpCa3A2Ujcyd1RRNUsyL2w4QW9YU3FQNllRVjV0aVJETytmU1FqZTlEUjY4MG9wY3RCRGhKRWdPQ0prSkw1CmhOUGxydzUveHFwTHM5UXc3cWJaWlUvRHR0YnlxZTFWUDcyVHBRS1pFL2FDcTdGTWFpbFJrcUpFa3JobVdCcFEKbWtQTW15M3BwVFZZKzJvRDZTdmMzdzZyTW1JTlpKUkltRUxiUk81S2M4bz0KLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQo= 
    > /tmp/base64_pri && base64 --decode /tmp/base64_pri > /etc/ssh/ssh_host_ecdsa_key 
- echo ZWNkc2Etc2hhMi1uaXN0cDI1NiBBQUFBRTJWalpITmhMWE5vWVRJdGJtbHpkSEF5TlRZQUFBQUlibWx6ZEhBeU5UWUFBQUJCQkVHSDJBS3BVcVE0NVZQWGNFK3h5NXV6elVnajhKelBxODJNaERLV0szaGltUVBReWRPQ0RlRVdyRVJzeCtUTEtPSjBlRElJWU9jT2RWT0FteHZycG1nPSAK 
    > /tmp/base64_pub && base64 --decode /tmp/base64_pub > /etc/ssh/ssh_host_ecdsa_key.pub 
- sleep 1 && service ssh restart 

(चिंता मत करो, कि ssh कुंजी/छोटी बूंद, नष्ट कर दिया गया इस प्रदर्शन के उद्देश्य से है)

इस बात की पुष्टि कर सकते हैं कि जब मैं बाकी बाहर छोड़ आदेशों का echo test > /root/test सफलतापूर्वक चलाता है। मैंने इसे अपनी स्थानीय मशीन और एमडी 5 एसएमएस मैच पर भी परीक्षण किया है:

028760a9374f9abd9c2c66eceb20f245 /tmp/pub_key_check 
028760a9374f9abd9c2c66eceb20f245 /tmp/testing-60f42fcf.pub 

2bf65516aaef01c731d061fa4ba788c5 /tmp/pri_key_check 
2bf65516aaef01c731d061fa4ba788c5 /tmp/testing-60f42fcf 

तो मुझे पता है कि मैं उन्हें सही तरीके से डीकोड कर रहा हूं।

मैंने अन्य प्रमुख प्रकारों की कोशिश की है, लेकिन यदि संभव हो तो मैं ecdsa कुंजी का उपयोग करना चाहूंगा, क्योंकि यह मेरे अन्य बक्से के लिए डिफ़ॉल्ट है। मुझसे यहां क्या गलत हो रहा है? इसके अलावा, क्या मैं अकेला ऐसा कर रहा हूं? मेरे पास Google है और ऐसा लगता है कि आम जवाब यह है कि लोग केवल जेनरेट की गई सार्वजनिक कुंजी पर भरोसा करते हैं जो मुझे लगता है कि यदि आप इस क्रॉस डेटा सेंटर कर रहे हैं तो किसी भी यादृच्छिक आईएसपी (या, मेरे मामले में, कैफे) के बाद से यह पागल हो सकता है निष्क्रिय एमआईटीएम आप।

+2

'ECDSA-SHA2-nistp256' जैसी कोई प्रकार नहीं है। मैनुअल पेज में, '[-t dsa | से चयन होता है ecdsa | ed25519 | आरएसए | आरएसए 1] '(कम से कम मेरे उबंटू पर)। – Jakuje

+0

@Jakuje विचार के लिए धन्यवाद, लेकिन 'ecdsa' या' rsa' में ti को बदलना इस मुद्दे को ठीक नहीं करता है। – zachaysan

उत्तर

संबंधित मुद्दे