सार्वजनिक कुंजी (कोई पासवर्ड नहीं) के साथ SSH प्राप्त करने की कोशिश कर रहा है + Ubuntu 14.04.1 पर काम करने वाला Google प्रमाणक


20

मैं Ubuntu 14.04.1 (OpenSSH 6.6 और libpam-google-Authorator 20130529-2 के साथ) का उपयोग कर रहा हूं।

मैं SSH लॉगिन स्थापित करने का प्रयास कर रहा हूं, जहां सार्वजनिक कुंजी प्रमाणीकरण (बिना पासवर्ड) और उपयोगकर्ता को Google के प्रमाणीकरणकर्ता से एक कोड के लिए प्रेरित किया जाता है।

इन निर्देशों का पालन / पालन करने से मुझे पासवर्ड प्रॉम्प्ट के साथ-साथ Google प्रामाणिक प्रॉम्प्ट मिल गया है:

मैंने पैकेज स्थापित किया है, मेरे /etc/ssh/sshd_configऔर /etc/pam.d/sshफ़ाइलों को संपादित किया है

इन /etc/ssh/sshd_config:

ChallengeResponseAuthentication yes
AuthenticationMethods  publickey,keyboard-interactive
UsePAM yes

और सबसे नीचे /etc/pam.d/ssh:

auth required pam_google_authenticator.so nullok # (I want to give everyone a chance to set up their 2FA before removing "nullok")

मुझे पता है कि PAM ऑर्डर पर निर्भर है, लेकिन यह sshd_configभी है?

मैं क्या गलत कर रहा हूं? किसी भी सहायता की सराहना की जाएगी।

जवाबों:


28

क्या यह अच्छी तरह से काम कर रहा है, पहले किया था:

apt-get install libpam-google-authenticator

में /etc/pam.d/sshdमैं बदल गया है / जोड़ा निम्नलिखित लाइनों (शीर्ष पर):

# @include common-auth
auth required pam_google_authenticator.so

और में /etc/ssh/sshd_config:

ChallengeResponseAuthentication yes
UsePAM yes
AuthenticationMethods publickey,keyboard-interactive
PasswordAuthentication no

अच्छी तरह से काम करता है और मुझे अब सार्वजनिक कुंजी के साथ प्रमाणीकरण के बाद "सत्यापन कोड" प्रॉम्प्ट प्राप्त होता है। मुझे यकीन नहीं है कि मैं पासवर्ड + टोकन या कुंजी + टोकन के साथ प्रमाणीकरण की अनुमति कैसे दूंगा, क्योंकि मैंने अब PAM के साथ पासवर्ड प्रमाणीकरण विधि को प्रभावी रूप से हटा दिया है।

उबंटू 14.04.1 LTS (GNU / Linux 3.8.0-19-जेनेरिक x86_64) का उपयोग ssh -v के साथ करें: OpenSSH_6.6.1p1 Ubuntu-2ubuntu2, OpenSSL 1.0.1f 6 जन 2014


इसलिए, पोस्टर की खातिर, मुझे अपनी समस्या का एहसास हुआ। मैंने भी कोशिश की थी PasswordAuthentication no, लेकिन ऐसा नहीं था। समस्या यह है कि मेरी ~ / .ssh / config फाइल में / मेरे पास ControlMaster autoऔर ControlPathनिर्देश थे। मैं यह सुनिश्चित करना चाहता था कि मैं खुद को बाहर न लूं, इसलिए मैं हमेशा एसएसएच सत्र खुला छोड़ दूंगा। चूँकि मेरा कंप्यूटर उन्हें फिर से उपयोग करेगा, मैं हमेशा बिना टोकन मांगे सिस्टम में आ गया। मैंने आपके उत्तर को सही के रूप में चिह्नित किया है, क्योंकि इसका अनुसरण करने वाला व्यक्ति वास्तव में एक काम करने वाला सेटअप प्राप्त करेगा। धन्यवाद!
जेटी।

2
मैं 7. CentOS का उपयोग कर रहा है कर रहा हूँ PasswordAuthentication no, ChallengeResponseAuthentication yes, AuthenticationMethods publickey,keyboard-interactive, और UsePAM yesमें sshd_config। यह मेरी कुंजी को मान्य करता है और फिर मुझसे मेरा Google प्रमाणक टोकन मांगता है और फिर मुझसे मेरा पासवर्ड भी पूछता है। मुझे बनाता है तीनों - उनमें से किसी को भी नहीं छोड़ सकते। मैंने भी AuthenticationMethods publickey,keyboard-interactive:pamमैन पेज द्वारा सुझाए अनुसार प्रयास किया है, लेकिन इससे कुछ भी नहीं बदला। कोई विचार?
निक विलियम्स

6
@NickWilliams मैं एक ही मुद्दा रहा था। मेरे लिए यह तय था कि मुझे उस @include common-authलाइन की सराहना करने की ज़रूरत है जो उत्तर दिखाती है। मैंने सोचा था कि यह pam_google_authenticatorपहली बार /etc/pam.d/sshd में लाइन के लिए एक टिप्पणी थी ।
फ्रीब

5
धन्यवाद! मेरा समाधान बिल्कुल वैसा नहीं था (मुझे टिप्पणी करने की आवश्यकता थी auth substack password-auth), लेकिन आपकी टिप्पणी से मेरी समस्या हल हो गई!
निक विलियम्स


7

मैं अंत auth [success=done new_authtok_reqd=done default=die] pam_google_authenticator.so nullokमें शीर्ष पर रखकर यह काम पाने में सक्षम था /etc/pam.d/sshd

Pam.d मैन पेज के अनुसार :

  • success=done इसका अर्थ है कि यदि Google प्रमाणक बंद करता है, तो कोई और प्रमाणीकरण नहीं किया जाएगा, जिसका अर्थ है कि कोई अतिरिक्त पासवर्ड संकेत नहीं।
  • default=die इसका अर्थ है कि यदि Google प्रमाणक लॉगिन प्रयास को अस्वीकार करता है, तो प्रमाणीकरण तुरंत विफल हो जाएगा, पासवर्ड संकेत को छोड़ देगा।

इसलिए नियंत्रण और नियंत्रण मूल्यों के [success=done new_authtok_reqd=done default=die]बीच एक मिश्रण है , क्योंकि हम दोनों से व्यवहार चाहते हैं: यदि सफलता, तुरंत (पर्याप्त) समाप्त हो जाती है, और यदि विफलता है, तो भी तुरंत (अपेक्षित) समाप्त करें।sufficientrequisite

ध्यान दें कि nullokpam_google_authenticator.so का तर्क यह है कि यदि कोई ~/.google_authenticatorफ़ाइल किसी उपयोगकर्ता के लिए नहीं मिली है, तो सार्वजनिक-कुंजी प्रमाणीकरण सामान्य रूप से आगे बढ़ता है। यदि मैं 2FA के साथ अपने खातों का केवल सबसेट बंद करना चाहता हूं तो यह उपयोगी है।


6

लिनस केंडल का जवाब पुराने सिस्टम पर काम करना चाहिए, लेकिन नए लिनक्स मशीनों पर यह समस्याग्रस्त है; मेरे आर्च लाइनर आधारित वेबसर्वर पर जो कि पैमाइश में परिणाम देता है मेरे एसएचएस कुंजी (यानी मुझे सभी 3 की आवश्यकता है) प्राप्त करने के बाद मेरे प्रमाणक कोड और मेरे पासवर्ड के लिए पूछ रहा है।

एक सरल समाधान जो इस समस्या को रोकता है और जिसे हर प्रणाली पर काम करना चाहिए, इसमें प्रविष्टि /etc/pam.d/sshdको निम्न में बदलना है:

auth sufficient pam_google_authenticator.so

और फिर एक ही संपादन `` / आदि / ssh / sshd` करने के लिए कि Linus उल्लेख किया है:

ChallengeResponseAuthentication yes
UsePAM yes
AuthenticationMethods publickey,keyboard-interactive
PasswordAuthentication no

सर्वर से आपकी सार्वजनिक कुंजी स्वीकार करने के बाद आपको अपने प्रमाणक टोकन के लिए पूछना चाहिए। इसे आपका पासवर्ड नहीं पूछना चाहिए।

एक साइड नोट के रूप में, यदि आप एक sftp उपयोगकर्ता खाता चाहते हैं, तो आपको इसे काम करने के लिए संभवतः Google प्रमाणक को बायपास करना होगा। यहाँ एक सुझाव है कि कैसे सुरक्षित रूप से sftp जेल का उपयोग किया जाए। इन etc/ssh/sshd_config:

Subsystem sftp internal-sftp
Match User ftp-user
  PasswordAuthentication yes
  AuthenticationMethods password
  ChrootDirectory /path/to/ftp/dir
  ForceCommand internal-sftp

आपको केवल / path / to / ftp / dir root लिखने पर अनुमतियाँ बनाने की आवश्यकता होगी (उदाहरण के लिए chown root:root /path/to/ftp/dir, chmod 755 /path/to/ftp/dirउस निर्देशिका से ऊपर के सभी माता-पिता को भी सुरक्षित अनुमतियों की आवश्यकता होती है। आमतौर पर मैं ऐसा करता हूं, यह chroot निर्देशिका /home/shared/userबनाने के द्वारा होता है। वहां निर्देशिका (उदाहरण के लिए 'डेटा') और फिर जो भी निर्देशिका मैं इस तरह साझा करना चाहता हूं उसे बढ़ाना:sudo mount -o bind /path/to/ftp/dir /home/shared/user/data

यदि आप उन सभी चरणों का पालन करते हैं, तो आपके पास अपने ssh उपयोगकर्ताओं के लिए सार्वजनिक कुंजी + Google प्रमाणक लॉगिन और डेटा ट्रांसफर के लिए एक कार्यात्मक पासवर्ड संरक्षित sftp खाता होगा।


यह बहुत अच्छा काम करता है। और जब से किसी कारण से मैं सिर्फ कॉमन-ऑउट को कमेंट करने में सहज महसूस नहीं करता हूँ, यह लाइनस के समाधान से अधिक आदर्श था।
ल्यूक सपन

आपका बहुत बहुत धन्यवाद! एक रात डिबगिंग ssh को बर्बाद कर दिया, सोच रहा था कि मुझे अभी भी pubkey + odcode के बाद पासवर्ड क्यों लिखना है ……
felix021
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.