जब मैं स्थानीय Ubuntu से SSH से Amazon EC2 सर्वर के लिए SSH की कोशिश कर रहा हूं, तो मुझे "अनुमति अस्वीकृत (publickey)" क्यों मिलेगी?


218

मेरे पास अमेज़ॅन ईसी 2 उदाहरण पर क्लाउड में चलने वाले एप्लिकेशन का एक उदाहरण है, और मुझे इसे अपने स्थानीय उबंटू से कनेक्ट करने की आवश्यकता है। यह एक स्थानीय ubuntu और लैपटॉप पर भी ठीक काम करता है। मुझे संदेश मिला "अनुमति अस्वीकृत (publickey)" जब SSH को EC2 से दूसरे स्थानीय उबंटू तक पहुंचाने की कोशिश की जा रही है। यह मेरे लिए बहुत अजीब है।

मुझे लगता है कि अमेज़न EC2 पर सुरक्षा सेटिंग्स के साथ कुछ प्रकार की समस्याएं हैं जिनके पास एक उदाहरण या प्रमाण पत्र तक सीमित आईपी एक्सेस है, इसे पुन: उत्पन्न करने की आवश्यकता हो सकती है।

किसी को एक समाधान पता है?


11
"यह पहले काम करता था" - इससे पहले कि क्या ?
Womble

मेरे पास एक इलास्टिक बीनस्टॉक EC2 उदाहरण है। अगस्त -2013 में समाधान को एक्से 2 उपयोगकर्ता के रूप में एक्सेस करना था, जिसने अनुमति अस्वीकृत (publicKey) त्रुटि को दूर कर दिया। विज़: ssh -i ./mike-key-pairoregon.pem ec2-user@ec2-some-address.us-west-2.compute.amazonaws.com। बेशक आप stackoverflow.com/questions/4742478/… के
mikemay

3
यदि आपके पास गलत उपयोगकर्ता नाम निर्दिष्ट है, तो आपको यह समस्या आती है। Aws डॉक्स ( docs.aws.amazon.com/AWSEC2/latest/UserGuide/… ) वर्तमान में उपयोगकर्ता नाम ec2-user [ssh -i /path/my-key-pair.pem ec2-user @ ec2-198 के साथ एक उदाहरण देता है। -51-100-1.compute-1.amazonaws.com], जबकि मेरे (पुराने) ubuntu बॉक्स में ubuntu का उपयोगकर्ता नाम है, इसलिए जब मैंने उदाहरण का उपयोग किया तो मुझे यह त्रुटि मिली, सही उपयोगकर्ता नाम बदलने से समाधान होता है।
david.barkhuizen

@ david.barkhuizen, आपकी टिप्पणी से मुझे मदद मिली। मुझे भी ऐसी ही समस्या का समाधान करना पड़ा था; यह पता चला कि यह उपयोगकर्ता नाम के साथ करना था। धन्यवाद।
नैयाप्रोग्रामर

जवाबों:


143

इस स्थिति में पहली बात यह है कि -vविकल्प का उपयोग करना है ssh, इसलिए आप देख सकते हैं कि किस प्रकार के प्रमाणीकरण की कोशिश की जाती है और परिणाम क्या होता है। क्या इससे स्थिति को समझने में मदद मिलती है?

अपने प्रश्न के अपडेट में, आप "दूसरे स्थानीय उबंटू पर" का उल्लेख करते हैं। क्या आपने ssh निजी कुंजी को दूसरी मशीन पर कॉपी किया है?


2
मैंने दूसरी मशीन पर ssh निजी कुंजी की नकल की है जैसा कि @Greg ने सुझाव दिया है। यह अब काम करता है। धन्यवाद!
वोर्लके ची

3
FYI करें- आप झंडे का उपयोग कर सकते हैं-उन्हें स्थापित किए बिना कुंजियों के मार्ग को इंगित करने के लिए
जॉर्ज वर्गास

20
मेरे मामले में, मैं एक बिटनामी का उपयोग कर रहा था। आईआईएम और महसूस नहीं किया कि आपको बिटनामी नाम के उपयोगकर्ता के रूप में लॉग इन करने की आवश्यकता है, जैसे ssh -i <keyfile> bitname@<ec2-address>:। दुर्भाग्य से -vविकल्प ने मुझे इसे खोजने में मदद नहीं की, लेकिन यह अभी भी जांचने के लिए बहुत उपयोगी है!
मैट कोनोली

7
खैर, मेरे मामले में मैं गलत उपयोगकर्ता नाम का उपयोग कर रहा था। "बिटनामी" के बजाय "उबंटु" का उपयोग कर रहा था। इस तरह: ssh -i key.pem bitnami @ hostaddress
लुकास पोटरस्की

3
एक अच्छा लीड भी रिमोट नोड ही है, पर गौर करें /var/log/auth.log, कभी-कभी आपको निम्नलिखित संदेश दिखाई देंगे: Authentication refused: bad ownership or modes for file /var/lib/jenkins/.ssh/authorized_keysया कुछ और
जोनास लिब्रेब्रेट

76

जैसा कि स्पष्ट रूप से उल्लेख नहीं किया गया है, sshd डिफ़ॉल्ट रूप से authorized_keysफ़ाइलों के लिए अनुमतियों पर बहुत सख्त है । तो, अगर authorized_keysहै लिखने योग्य या उपयोगकर्ता के अलावा अन्य किसी के लिए भी लिखने योग्य बनाया जा सकता है उपयोगकर्ता के अलावा अन्य किसी के द्वारा, यह (जब तक sshd के साथ कॉन्फ़िगर किया गया है प्रमाणित करने के लिए मना कर दिया जाएगा StrictModes no)

मेरे द्वारा "योग्य" बनाया जा सकता है, इसका मतलब यह है कि यदि माता-पिता निर्देशिकाओं में से कोई भी उपयोगकर्ता के अलावा किसी के लिए भी योग्य है, तो उपयोगकर्ताओं को उन निर्देशिकाओं को संशोधित करने की अनुमति इस तरह से अनुमतियों को संशोधित करना शुरू कर सकती है, जिससे वे अधिकृत_कीड़ों को संशोधित / बदल सकते हैं।

इसके अलावा, यदि /home/username/.sshनिर्देशिका उपयोगकर्ता के स्वामित्व में नहीं है, और इस प्रकार उपयोगकर्ता के पास समस्याओं को चलाने के लिए कुंजी पढ़ने की कोई अनुमति नहीं है:

drwxr-xr-x 7 jane jane 4096 Jan 22 02:10 /home/jane
drwx------ 2 root root 4096 Jan 22 03:28 /home/jane/.ssh

ध्यान दें कि jane के पास .sshफ़ाइल नहीं है। इसके माध्यम से ठीक करें

chown -R jane:jane /home/jane/.ssh

इस प्रकार की फाइल सिस्टम अनुमति के मुद्दों के साथ दिखाई नहीं देगा ssh -v, और वे sshd लॉग में भी नहीं दिखाएंगे (!) जब तक आप लॉग लेवल को DEBUG में सेट नहीं करते हैं।

  • संपादित करें /etc/ssh/sshd_config। आप एक ऐसी लाइन चाहते हैं, जो LogLevel DEBUGवहां कहीं पढ़े । डिस्ट्रो द्वारा प्रदान किए गए तंत्र का उपयोग करके एसएसएच सर्वर को पुनः लोड करें। ( service sshd reloadRHEL / CentOS / वैज्ञानिक पर।) एक सुंदर रीलोड मौजूदा सत्रों को नहीं गिराएगा।
  • फिर से प्रमाणित करने का प्रयास करें।
  • वर्क आउट करें जहां आपकी ऑर्कुलर सुविधा लॉग जाती है और उन्हें पढ़ें। (IIRC, /var/log/auth.logडेबियन-आधारित डिस्ट्रोस /var/log/secureपर ; RHEL / CentOS / वैज्ञानिक पर।)

डिबग आउटपुट में क्या गलत हो रहा है, इस पर काम करना बहुत आसान है, जिसमें फाइल सिस्टम अनुमति त्रुटियां शामिल हैं। याद रखें कि किए गए परिवर्तन को वापस करने के लिए /etc/ssh/sshd_config!


5
कि "मुझे योग्य बनाया जा सकता है" बिट मुझे क्या मिला है
wmarbut

7
FWIW कुंजी फ़ाइलों के लिए सही अनुमतियाँ 600 हैं ( यहां देखें )
मैट ल्योन

1
हां, मेरी .authorized_keys फ़ाइल समूह द्वारा लिखने योग्य थी, इसलिए इसे स्वीकार करने से इनकार कर दिया गया।
आदित्य सांसद

2
मैं दीवार के खिलाफ अपना सिर पीट रहा था! मेरे उपयोगकर्ता फ़ोल्डर में गलत अनुमतियां थीं। धन्यवाद!
XJones

4
वही ~ / .shsh फ़ोल्डर के लिए ही जाता है। आपको निम्न त्रुटि संदेश मिल सकता है:Authentication refused: bad ownership or modes for directory
येवगेनी एम।

37

मुझे यह त्रुटि मिली, क्योंकि मैं -lविकल्प जोड़ना भूल गया । मेरा स्थानीय उपयोगकर्ता नाम रिमोट सिस्टम पर समान नहीं था।

यह आपके प्रश्न का उत्तर नहीं देता है, लेकिन मैं अपनी समस्या का उत्तर ढूंढने के लिए यहां आया हूं।


25
ssh host -l userजैसा है ssh user@host, ठीक है?
ज़र्नार्कस

3
@Znarkus हाँ, यह वही है।
cregox

हाँ, इसने मेरी समस्या को हल कर दिया, जिसके कारण "अनुमति अस्वीकृत (publickey)" त्रुटि हुई।
ब्रूक्स मूसा

1
मेरे लिए यही समस्या थी। मुझे काम करने के लिए उपयोगकर्ता "रूट" की उम्मीद थी, लेकिन मैं एक Ubuntu EC2 छवि का उपयोग कर रहा था जिसमें डिफ़ॉल्ट उपयोगकर्ता "ubuntu" था।
सेरिन

20

मुझे यह संदेश उबंटू एएमआई पर आधारित एक नए उदाहरण पर मिला। मैं PEM प्रदान करने के लिए -i विकल्प का उपयोग कर रहा था लेकिन यह अभी भी "अनुमति अस्वीकृत (publickey)" दिखा रहा था।

मेरी समस्या यह थी कि मैं सही उपयोगकर्ता का उपयोग नहीं कर रहा था। Sub को ubuntu @ ec2 के साथ चलाकर ... यह सामान्य की तरह काम करता था।


हाँ ... मैं कमांड चला रहा था sudo, जिसके कारण यह काम नहीं कर रहा था।
thaddeusmt

16

कुछ ऐसा जो पढ़ने में आसान है ssh -v(बेशक मेरी राय में), है tail -f /var/log/auth.log। उस सर्वर पर चलाया जाना चाहिए जिसे आप कनेक्ट करने का प्रयास करते समय कनेक्ट करने का प्रयास कर रहे हैं। यह सादे पाठ में त्रुटियों को दिखाएगा।

इससे मुझे अपने मुद्दे को हल करने में मदद मिली:

उपयोगकर्ता [उपयोगकर्ता नाम] xx.yy.com से अनुमति नहीं है क्योंकि उपयोगकर्ता का कोई भी समूह AllowGroups में सूचीबद्ध नहीं है


यह सर्वर लॉग है। RHEL / CentOS 7 के लिए:tail -f /var/log/secure
जियानफ्रेंको पी।

10

अपनी / etc / ssh / sshd_config फ़ाइल की जाँच करें । वहां, जो लाइन कहती है, उसे खोजो

PasswordAuthentication no

उस पंक्ति को बिना कहने के लिए हां कहने के लिए संशोधित करने की आवश्यकता है। इसके अलावा, बाद में sshd सर्वर को पुनरारंभ करें।

sudo /etc/init.d/ssh restart

18
इससे सर्वर कम सुरक्षित होगा।
ज़्नार्कस

मेरे पास यह समस्या थी: मैं किसी अन्य उपयोगकर्ता के लिए एक खाता स्थापित करना चाहता था, बस एक पासवर्ड के साथ प्रमाणित करना। मैं उन जगहों से खुद को लॉग-इन करने में सक्षम होना चाहता था, जहां मेरी निजी कुंजी नहीं थी।
डैनियल

1
हम कैसे जा सकते हैं /etc/ssh/sshd_config- अगर हम सर्वर में भी नहीं जा सकते हैं?
कियो

सर्वर में ही जाने के लिए, आपको PEM फ़ाइल का उपयोग करना होगा जो उन्होंने उदाहरण देते समय बनाई थी। निर्देश उसके बाद जाते हैं।
सुदीप्ता चटर्जी

यह मेरे लिए काम कर रहा था, हालाँकि sshd को पुनः आरंभ करने के लिए निम्न कमांड की आवश्यकता थी:sudo service sshd reload
pacoverflow

6

शायद वर्तमान पोस्टर के लिए प्रासंगिक नहीं है, लेकिन अन्य लोगों की मदद कर सकते हैं जो इसी तरह की स्थितियों के जवाब की तलाश में हैं। अमेज़ॅन को ssh कीपेयर उत्पन्न करने देने के बजाय, मैं अमेज़ॅन को अपना, मानक, डिफ़ॉल्ट सार्वजनिक ssh कुंजी अपलोड करने और यह निर्दिष्ट करने की सलाह देता हूं कि जब आप EC2 इंस्टेंस चलाते हैं।

यह आपको ssh में "-i" प्रकार के सिंटैक्स को छोड़ने देता है, मानक विकल्पों के साथ rsync का उपयोग करता है, और आपको सभी EC2 क्षेत्रों में समान ssh कुंजी का उपयोग करने देता है।

मैंने इस प्रक्रिया के बारे में एक लेख यहाँ लिखा है:

अमेज़ॅन EC2 http://alestic.com/2010/10/ec2-ssh-keys पर व्यक्तिगत ssh कुंजी अपलोड करना


+1 ने इस प्रश्न को इस कारण से देखा।
जॉन रिसेल्वाटो

मैं अपने लेख का अनुसरण करने में इस त्रुटि को देखता हूं। क्षेत्रों = $ (ec2-वर्णन-क्षेत्रों में कटौती -f2) आवश्यक विकल्प '-K, -पाइप-कुंजी कुंजी' लापता (उपयोग के लिए -h)
काशीफली

@KashifAli आप EC2 API कमांड लाइन टूल क्रेडेंशियल सेट करना चाहेंगे, ताकि आपको हमेशा हर कमांड लाइन पर क्रेडेंशियल्स पास न करना पड़े।
एरिक हैमंड

5

अजीब बात है, मेरी समस्या यह है कि सर्वर को फिर से शुरू किया गया था और इसे एक नया DNS नाम जारी किया गया था। मैं पुराने DNS नाम का उपयोग कर रहा था। मुझे पता है कि यह बेवकूफ लगता है लेकिन मुझे यह पता लगाने में थोड़ा समय लगा।


धन्यवाद! यह वास्तव में मेरी समस्या थी। जब आप किसी इंस्टेंस को पुनरारंभ करते हैं तो मुझे DNS नाम नहीं बदला।
टिम स्वस्त

मेरे मामले में, * .compute.amazonaws.com URL तब बदल गया जब मैंने एक इलास्टिक आईपी असाइन किया था।
जेफ्री बूथ

2

यदि आप ड्रॉपबियर चलाने वाले CyanogenMod फोन से कनेक्ट करने का प्रयास कर रहे हैं, तो आपको यह सुनिश्चित करने के लिए निम्नलिखित लाइनें चलनी चाहिए कि सब कुछ अनुमति सही है:

chmod 600 /data/dropbear/.ssh/authorized_keys

या

chmod 700 /data/dropbear/.ssh/authorized_keys # In case of MacOS X 10.6-10.8

तथा

chmod 755 /data/dropbear/ /data/dropbear/.ssh

इसने मेरे लिए इसे ठीक कर दिया, अन्यथा कुछ भी नहीं जुड़ सकता है।


"जब एक और स्थानीय उबंटू पर SSH को EC2 तक पहुंचाने की कोशिश की जा रही है।"
व्याकरणविद्या

1
अगर मेरे पास अधिकृत_की नहीं है, तो क्या होगा ?
इगोरगानापोलस्की

2

आप 5 CentOS का उपयोग कर रहे हैं, तो आप सेट कर सकते हैं StrictModes noमें /etc/ssh/sshd_config। मैं NIS / NFS का उपयोग करके / होम निर्देशिका साझा कर रहा हूं, और मैंने सभी अनुमतियों को सही ढंग से सेट किया है, लेकिन इसने मुझे हमेशा पासवर्ड के साथ प्रेरित किया। मैं सेट होने के बाद StrictModes no, समस्या गायब हो गई!


1

ग्रेग का जवाब बताता है कि इसे कैसे शूट करना है, इसे बेहतर तरीके से शूट करना है, हालांकि वास्तविक मुद्दा यह है कि आपके पास लेन-देन (क्लाइंट) के एक तरफ ssh कुंजी है, जो पासवर्ड आधारित प्रमाणीकरण के बजाय सार्वजनिक कुंजी प्रमाणीकरण का प्रयास कर रहा है। जैसा कि आपके पास EC2 उदाहरण पर संबंधित सार्वजनिक कुंजी नहीं है, यह काम नहीं करेगा।


2
आप इस मुद्दे को कैसे हल करेंगे?
जूलियन ग्रेनियर

1

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

सुपर खूनी कष्टप्रद है कि आपको जो त्रुटि मिलती है, वह अनुमति अस्वीकृत है, जिसका अर्थ है कि किसी प्रकार का कनेक्शन बनाया गया था, जीआरआर।


1

मैं एक ही समस्या थी, भले ही मैं सहित सभी चरणों का पालन कर रहा था

$ ec2-authorize default -p 22

हालाँकि, मैंने अपने उदाहरण की शुरुआत हम-पश्चिम -1 क्षेत्र में की थी। तो उपरोक्त कमांड को भी निर्दिष्ट करना चाहिए।

$ ec2-authorize default -p 22 --region us-west-1

इस आदेश के बाद मैं उदाहरण में ssh करने में सक्षम था। मैंने इस मुद्दे को महसूस करने से पहले थोड़ा समय बिताया और उम्मीद है कि यह पोस्ट दूसरों की मदद करेगी।


0

यह एक दुर्लभ मामला है, लेकिन अगर आपके पास सेलिनक्स सक्षम है और आप अधिकृत_की (जैसे साझा होम निर्देशिका) के साथ निर्देशिका के लिए nfs का उपयोग कर रहे हैं, तो आपको या तो सेलिनक्स को अक्षम करना होगा (सुरक्षा कारणों के लिए अनुशंसित नहीं है, लेकिन आप इसे अक्षम कर सकते हैं। यह देखने के लिए कि क्या यह समस्या पैदा कर रहा है) या selinux को nfs होम डाइरेक्टरीज़ का उपयोग करने की अनुमति देता है। मैं विवरण पर स्पष्ट नहीं हूं, लेकिन यह मेरे लिए काम कर रहा है setsebool -P use_nfs_home_dirs 1


0

मैंने अनजाने में समूह लिखने की अनुमति के बाद उपयोगकर्ताओं को होम निर्देशिका में अनुमति देने के बाद बस एक ही समस्या का अनुभव किया है।

मुझे पता चला tail -f /var/log/secureकि यह मशीन पर चलने और त्रुटि को देखने के कारण था Authentication refused: bad ownership or modes for directory /home/<username>

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