कुंजी फ़ाइलों के साथ ssh प्रमाणीकरण करने की कोशिश: सर्वर ने हमारी कुंजी को अस्वीकार कर दिया


53

मैं उपयोगकर्ता नाम / पासवर्ड के साथ प्रमुख फ़ाइलों के साथ ssh प्रमाणीकरण सेटअप करने का प्रयास कर रहा हूं। क्लाइंट एक विंडोज बॉक्स है जो PuTTY पर चल रहा है और सर्वर एक Ubuntu 12.04 LTS सर्वर है।

मैंने puttygen.exe डाउनलोड किया है और यह एक महत्वपूर्ण जोड़ी उत्पन्न करता है। में /etc/ssh/sshd_configमैं इस लाइन है:

AuthorizedKeysFile %h/.ssh/authorized_keys

और मेरे ग्राहक की सार्वजनिक कुंजी फ़ाइल पर यह कहता है:

---- BEGIN SSH2 PUBLIC KEY ----
Comment: "my@email.address.com"
ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAr3Qo6T5XU06ZigGOd3eKvfBhFLhg5kWv8lz6
qJ2G9XCbexlPQGanPhh+vcPkhor6+7OmB+WSdHeNO652kTofnauTKcTCbHjsT7cJ
GNrO8WVURRh4fabknUHPmauerWQZ6TgRPGaz0aucU+2C+DUo2SKVFDir1vb+4u83
AV1pKxs=my@email.address.com
---- END SSH2 PUBLIC KEY ----

मैंने "ssh-rsa AAA" से "my@email.address.com" के भाग की प्रतिलिपि बनाई और उस फ़ाइल ~/.ssh/authorized_keysको अपने सर्वर पर (अपने स्वयं के होमफ़ोल्डर में) डाल दिया । कनेक्शन> एसएसएच> प्रामाणिक के तहत पुट्टी में मैंने अपने क्लाइंट पर उत्पन्न निजी कुंजी के लिए पथ में प्रवेश किया और सत्र सेटिंग्स को बचाया।

मैंने ssh सर्वर को फिर से शुरू किया

sudo service ssh restart

अब अगर मैं प्रोफ़ाइल को PuTTY में लोड करता हूं (मैंने सत्यापित किया है कि निजी कुंजी अभी भी कनेक्शन में है> SSH> प्रामाणिक और वह रास्ता सही है) और प्रोफ़ाइल को चलाएं, यह कहता है

Server refused our key

मैंने डायरेक्टरी के तहत पब्लिक की को एक फाइल में डालने की कोशिश की, ./ssh/authorized_keys/लेकिन इससे मुझे ./ssh/authorized_keysएक फाइल के रूप में उपयोग करने में मदद नहीं मिली , इसमें चाबी को चिपका दिया। मैंने सर्वर पर एक निजी / सार्वजनिक कुंजी जोड़ी बनाने की कोशिश की, सार्वजनिक कुंजी डाल दी ./ssh/authorized_filesऔर अपने ग्राहक पर PuTTY में निजी एक को लोड किया। सर्वर को रिबूट करने से भी मदद नहीं मिली।

मैंने पाया कि उपयोगकर्ता के होम फोल्डर के बाहर एक स्थान पर चाबी लगाने से त्रुटि हल हो सकती है लेकिन यह केवल तभी उपयोगी है जब होम फोल्डर एन्क्रिप्ट किया गया हो, जो कि यह नहीं है।

यह भी एक 4096 बिट कुंजी पैदा करने की कोशिश की, शायद 1024 बहुत कम था।

में इससे कैसे चला सकता हूँ? धन्यवाद!

संपादित करें:

ठीक है, /var/log/auth.logने कहा:

sshd: Authentication refused: bad ownership or modes for directory /home/vorkbaard/.ssh

Google कहता है कि मुझे 700०० ~/.ssh/होना चाहिए और ~/.ssh/authorized_keys६०० होना चाहिए, इसलिए मैंने ऐसा किया। अब /var/log/auth.logकहता है:

sshd: error: key_read: uudecode AAAAB3N [etc etc etc until about 3/4 of my public key]

जवाबों:


95

ठीक है, यह तय है, लेकिन मैं नहीं देखता कि यह कैसे मैंने पहले से ही कोशिश की से अलग है।

मैंने क्या किया:

  • puttygen.exe के साथ एक महत्वपूर्ण जोड़ी उत्पन्न करें (लंबाई: 1024 बिट्स)
  • PuTTY प्रोफ़ाइल में निजी कुंजी लोड करें
  • ~/.ssh/authorized_keys एक पंक्ति में सार्वजनिक कुंजी दर्ज करें (के साथ शुरू करने की जरूरत है ssh-rsa)
  • chmod 700 ~/.ssh
  • chmod 600 ~/.ssh/authorized_keys
  • chown $USER:$USER ~/.ssh -R
  • /etc/ssh/sshd_configइसलिए इसमें बदलाव हैAuthorizedKeysFile %h/.ssh/authorized_keys
  • sudo service ssh restart

समस्या निवारण के लिए # tail -f /var/log/auth.log

आपकी सहायताके लिए धन्यवाद!


1
हम्म, तो उस sshd: error: key_read: uudecode AAAAB3Nत्रुटि का क्या हुआ auth.log?
अला अली

मुझे कोई सुराग नहीं है, अला। शायद मैंने पिछली कुंजी स्ट्रिंग को चिपकाने में त्रुटि की थी। Auth.log को अब कोई और प्रविष्टि नहीं मिलती है और कुंजी आधारित प्रमाणीकरण त्रुटिपूर्ण कार्य करता है। मेरा मुख्य समस्या यह है कि मैं के बारे में वास्तव में यकीन नहीं था क्या किया जा करने की जरूरत है, जिससे कैसे है कि और अधिक कठिन। इसलिए मुझे नहीं पता कि यह क्यों काम करता है। आपकी मदद के लिए फिर से धन्यवाद :)
Forkbeard

बहुत बढ़िया!!! मैं 2 दिनों से अपना सिर खुजला रहा हूं। यह उत्तर दिन बचाता है !!
नाका

चरण 3 मेरे लिए चाल थी। मैंने उस सार्वजनिक कुंजी को उस authorized_keysफ़ाइल में नहीं रखा था जिसे मैंने अपनी mykey.pubफ़ाइल को ~/.sshफ़ोल्डर में चिपकाया था और सोचा था कि इसे उठा लेगा। इसके बजाय मुझे अंततः क्या चाहिए था, इसे चलाने या संपादित करने और अन्य कुंजियों के नीचे पेस्ट करने के लिए जो वहां हो सकता है। cat mykey.pub >> authorized_keys। अब सरल लगता है, लेकिन सबक सीखा है सभी सार्वजनिक कुंजी को authorized_keysन केवल ~/.ssh/निर्देशिका में रहना है । किसी ने सलाह दी अगर यह एक सही दावा नहीं है।
टिब्बर

यदि चरण मदद नहीं करते हैं, तो यह भी देखें: 1. आपने सहेजी गई PuTTY सार्वजनिक कुंजी को अधिकृत_की में कॉपी किया है, OpenSSH एक नहीं। 2. यदि आपने PuTTYgen (जो आपको करना चाहिए) से कॉपी / पेस्ट का उपयोग करके कॉपी की, तो आप विभाजित हो सकते हैं कई लाइनों में सार्वजनिक कुंजी; यह एक एकल पंक्ति होनी चाहिए; सुनिश्चित करें कि आपने r_hartman centos.org/forums/viewtopic.php?t=990
mvladk

23

मेरे सामने अभी यह समस्या आई. इस थ्रेड में पहले से बताए गए कॉन्फिगर सेट को सही तरीके से रखने के बावजूद (अधिकृत_की पर अनुमति आदि), यह पता चला कि मेरे पास गलत प्रारूप में सार्वजनिक कुंजी थी। यह इस रूप में था:

---- BEGIN SSH2 PUBLIC KEY ----
Comment: "imported-openssh-key"
AAAAB3NzaC1yc2EAAAADAQABAAABAQDUoj0N3vuLpeviGvZTasGQ...
... lPmTrOfVTxI9wjax2JvKcyE0fiNMzXO7qiHJsQM9G9ZB4Lkf71kT
---- END SSH2 PUBLIC KEY ----

जो काम नहीं कर रहा था। लेकिन यह इस रूप में काम कर रहा है:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDU.....j0N3vuLpeviGvZTasGQa1rcJiPXQMW7v3uurb+n94B9MQaaWR0odsg5DJQL92TNenOda5BO1nd08y6+sdLQmHXExTz6X8FzgoVsAkEl3RscxcxHUksiKA9JfTo38vQvG/bPxIHMCuSumCQVA1laf3rO/uOrkcB7iMWhaoi1/z6AbFtPzeh7xjGfInMWwtBI0CsHSRF73VWIxT26w0P+KjafCjSn/7vDO1bT8QHujSQelU/GqaVEvbbvPl1a7POVjKgHLNekolwRKfNeVEewcnmZaoqfHgOKlPmTrOfVTxI9wjax2JvKcyE0fiNMzXO7qiHJsQM9G9ZB4Lkf71kT UserName@HOSTNAME

14
आप ssh-keygen -i -f filenameofwindowsformpub.keyसार्वजनिक कुंजी को अपने ओपनएसएसएच सर्वर द्वारा समझे गए प्रारूप में बदलने के लिए उपयोग कर सकते हैं ।
काला

हाँ, यह मेरे लिए काम किया! इसे एक ही लाइन में होना है। विश्वास नहीं कर सकता कि यह केवल था!
adelriosantiago

1
HI कुराएरा I ऊपर दिए गए निर्देश को @Black द्वारा माना जाता है, उत्तर में प्रमुख बनाया जाना चाहिए।
इकरन

क्या मैं ओपनएसएसएच सर्वर प्रारूप में टिप्पणी जोड़ सकता हूं? मानव के लिए यह बताना कठिन है कि यह कुंजी किस कंप्यूटर का प्रतिनिधित्व करती है।
user1700890

जब मैं @Black द्वारा सुझाव का पालन करता हूं, तो स्ट्रिंग के अंत में कोई उपयोगकर्ता नाम @ HOSTNAME नहीं है। मुझे नहीं पता कि क्या हिस्सा मायने रखता है।
अरनॉल्डबर्ड

9

समस्या यह है कि विंडोज़ लिनक्स की तुलना में एक अलग नई लाइन का उपयोग करती है , इसलिए विंडोज़ से लिनक्स की कुंजी की प्रतिलिपि बनाते समय, लाइन के अंत में एक \ n होता है जिसे आप संपादक में लिनक्स पर नहीं देख सकते हैं।

यदि आप /var/log/auth.log को पूंछते हैं और लॉगिन करने का प्रयास करते हैं, तो त्रुटि इस प्रकार है:

sshd: error: key_read: uudecode AAAAB3N [....] == \ n

यदि आप अपनी कुंजी को खिड़कियों पर बदलते हैं , तो अंत में एक नई लाइन के बिना इसकी एक ही पंक्ति में है और इसे फिर से लिनक्स पर कॉपी करें, यह काम करना चाहिए (मेरे लिए चाल)।


यह मेरी समस्या थी, लेकिन मैंने यह देखने के लिए कि यह क्या था सुझाव देने के लिए स्थित में कुछ भी नहीं देखा। निराशा होती है ...
एंथनी

8

मुझे घर निर्देशिका के लिए अनुमतियां बदलनी पड़ीं

chmod 700 ~

2
इसने मेरे लिए भी काम किया (हालांकि AIX पर)।
स्टीवेपस्टेलन

CentOS पर मेरे लिए भी काम किया
Jaywalker

रेडहैट पर मेरे लिए काम किया! समूह लेखन अभिगम विशिष्ट मुद्दा लगता है। फिर भी मेरे लिए काम करता है अगर मैं समूह पढ़ने की अनुमति छोड़ देता हूं, हालांकि: "chmod 740 ~"।
पॉल मार्क

6

मुझे 770 से 700 तक ~ /। Ssh निर्देशिका अनुमतियों को बदलना पड़ा और ~ / .ssh / अधिकृत_की 660 से 600 तक फ़ाइल अनुमतियाँ।

किसी कारण से समूह की अनुमतियाँ हटाने से मेरे लिए यह समस्या ठीक हो गई।

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

5

~/.ssh/authorized_keysफ़ाइल एक लाइन पर सभी होना करने के लिए कुंजी की आवश्यकता है। यदि आपने इसे अपने पेस्ट के रूप में कई लाइनों में जोड़ा है, तो लाइनों में शामिल होने का प्रयास करें।


धन्यवाद, यह समझ में आता है और अब मैं समझता हूं कि यह एक फाइल क्यों है, निर्देशिका नहीं है। हालांकि यह मदद नहीं की।
Forkbeard

3
जो भी इससे भ्रमित हो सकता है, उसके लिए इसका मतलब यह है कि प्रत्येक कुंजी स्वयं एक पंक्ति में होनी चाहिए, लेकिन अलग-अलग कुंजी को अलग-अलग रेखाओं पर होना चाहिए।
एंथनी

2

यहाँ मेरे लिए क्या काम किया गया है:

में puttygen, के बाद आप अपनी चाबी बनाने के बाद, यह सुनिश्चित करें कि आप कॉपी बनाने के लिए और शीर्ष क्षेत्र से जानकारी पेस्ट अपने authorized_keys फाइल में जाने के लिए। यदि आप अपनी सार्वजनिक कुंजी को अपने ग्राहक मशीन में सहेजते हैं, और फिर इसे खोलते हैं, तो पाठ puttygenस्क्रीन के शीर्ष पर स्थित पाठ से अलग होता है । फिर, सुनिश्चित करें कि आप puttygenअपने अधिकृत_की फ़ाइल में स्क्रीन के शीर्ष से पाठ को कॉपी और पेस्ट करें (आपके द्वारा अपनी कुंजी बनाने के बाद) जो कि स्थित होना चाहिए ~/.ssh


यह वास्तव में समस्या को ठीक करता है। मुझे नहीं लगता कि अगर आप सार्वजनिक कुंजी को बचाने पर क्लिक करते हैं तो यह उचित प्रारूप को क्यों नहीं बचाता है।
लूसी

1

उपरोक्त सभी उत्तरों के अलावा, सुनिश्चित करें कि आप कुंजी को puttygenसही तरीके से कॉपी और पेस्ट करते हैं !

यदि आप इसे चुनने के लिए कुंजी स्ट्रिंग के बल्क पर केवल डबल-क्लिक करते हैं, तो आपको संपूर्ण स्ट्रिंग नहीं मिल सकती है, क्योंकि टेक्स्ट बॉक्स कुछ वर्णों पर रेखाओं को विभाजित करता है +, जैसे कि, आप +वर्ण के बाद पाठ का चयन नहीं करते हैं ( जो आप नहीं देख सकते क्योंकि टेक्स्ट बॉक्स बहुत छोटा है)। ssh-rsaपाठ बॉक्स के बहुत अंत से, मैन्युअल रूप से पूरे स्ट्रिंग का चयन करना सुनिश्चित करें ।


1

कभी-कभी यह एक लाइन पर सार्वजनिक कुंजी होने से जुड़ी समस्या हो सकती है, यह दृष्टिकोण इसे हल करने के लिए लगता है

echo 'the content of the public key' > /root/.ssh/authorized_keys

1

मेरे लिए समस्या यह थी कि मैं ~/.ssh/authorized_keysरूट के स्वामित्व में रूट का उपयोग करके बनाया गया था । मुझे chown sshuser:sshuser ~/.ssh/authorized_keysतब काम करना शुरू कर दिया था


1

मैंने भी इस त्रुटि का सामना किया और अधिकृत_की फ़ाइल की अनुमतियों को बदलकर इसे हल किया 600

chmod 600 ~/.ssh/authorized_keys

1

सामान्य त्रुटि यह है कि लोग टेक्स्ट एडिटर (जैसे विम) का उपयोग करते हैं और कॉपी किए गए टेक्स्ट को "इंसर्ट" करने से पहले पेस्ट करते हैं (पेस्ट करने से पहले विम में दबाएं)


0

वास्तव में, मैंने authorized_keysअनुमति बदल दी 644, फिर समस्या हल हो गई।

chmod 644 ~/.ssh/authorized_keys

0

खुले ssh को डिबग करने के लिए उपयोग कर सकते हैं:

sudo `which sshd` -p 2020 -Dd

यह अन्य पोर्ट 2020 पर sshd चलाता है। यह sshd को एक चालू प्रोग्राम के रूप में चलाता है ताकि आउटपुट स्क्रीन पर जाए। अगर बंद है तो बंद है।

फिर कनेक्ट करने का प्रयास करें।

स्पष्टीकरण:

  • `जो sshd` - sshd एड्रेस को ढूँढता है, जिसे sshd देखता है उस पर अमल करता है। वापस उद्धरणों का उपयोग करते समय यह क्रियान्वित होता है और परिणाम को वापस लौटाता है।
  • -p 2020 - पोर्ट निर्दिष्ट करता है
  • -D - फाइल करने के लिए लॉग इन करें
  • -d - स्क्रीन पर लॉग इन करें

https://www.attachmate.com/documentation/rsit-unix-802/rsit-unix-guide/data/sshd_options_ap.htm


क्या आप इस उत्तर पर विस्तार कर सकते हैं? तर्क क्या देते हैं? कमांड क्या कर रहा है (किसी के लिए अनुभवी नहीं है)?
ज़ज़च ...

-1

मैं रूट के रूप में लॉग इन करते समय .ssh और अधिकृत_की फाइलें बना रहा था, जिससे गलत अनुमतियां मिलीं। इसने सभी फाइलों को रूट डायरेक्टरी के तहत रखा।

आप की इच्छा रखने वाले उपयोगकर्ता के लिए उन फ़ाइलों का स्वामित्व बदलना अच्छा अभ्यास नहीं होगा, इसलिए मैंने अपने चरणों को फिर से अपनाया और सुनिश्चित किया कि मैं उस उपयोगकर्ता के रूप में लॉग इन किया गया था जिसे मैं SSH के साथ उपयोग करना चाहता था।

Win7 को Xubuntu 15.04 सर्वर से कनेक्ट करने के लिए निर्देश: VPS से कनेक्ट करने के लिए SSH कीज़ w / Putty कैसे बनाएँ

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.