क्या मैं स्वचालित रूप से OS X कीचेन से पासवर्ड का उपयोग करके ssh में प्रवेश कर सकता हूं?


9

मुझे एक ssh सर्वर पर लॉगिन करने की आवश्यकता है जो कुंजी आधारित प्रमाणीकरण का समर्थन नहीं करता है। और मैं हर बार पासवर्ड टाइप नहीं करना चाहता।

मैं ओएस एक्स लायन (10.7.2) का उपयोग कर रहा हूं। मैंने ओएस एक्स कीचेन [1] में पासवर्ड जोड़े हैं। अब मैं किचेन से पासवर्ड को स्वचालित रूप से पुनः प्राप्त कर सकता हूं /usr/bin/security, हालांकि मुझे यह पासवर्ड ssh प्रॉम्प्ट पर भेजने का कोई रास्ता नहीं मिल रहा है।

मैंने भी कोशिश की sshpass। हालाँकि जब मैं इसे चलाने की कोशिश करता हूँ ssh निम्नलिखित त्रुटि के साथ बाहर निकलता है:

ssh_askpass: exec(/usr/libexec/ssh-askpass): No such file or directory
Permission denied, please try again.
ssh_askpass: exec(/usr/libexec/ssh-askpass): No such file or directory
Permission denied, please try again.
ssh_askpass: exec(/usr/libexec/ssh-askpass): No such file or directory
Permission denied (publickey,password).

क्या हर बार पासवर्ड दर्ज किए बिना मैं इस सर्वर में प्रवेश कर सकता हूं?

टिप्पणियाँ

  1. किचेन में मैं जिस योजना का उपयोग करता हूं, वह इस तरह दिखती है
    • तरह: इंटरनेट पासवर्ड
    • खाता उपयोगकर्ता नाम
    • कहां: ssh: // सर्वर-नाम

जवाबों:


11

गैर-इंटरैक्टिव एसएसएच सत्र

यदि आपको दूरस्थ सर्वर पर एक संवादात्मक सत्र की आवश्यकता नहीं है, तो आप sshबिना किसी वातावरण में निष्पादित कर सकते हैं tty, उदाहरण के लिए ऑटोमेटर में एक रन शैल स्क्रिप्ट कार्रवाई के भाग के रूप में ।

आपको एक प्रोग्राम बनाने की आवश्यकता होती है, जब पासवर्ड को मानक के रूप में प्रिंट किया जाता है, उदाहरण के लिए निम्नलिखित बैश स्क्रिप्ट का उपयोग करके आपको निष्पादन योग्य बनाने की आवश्यकता होती है chmod +x pwd.sh:

#!/usr/bin/env bash
echo "password"

फिर, SSH_ASKPASSपर्यावरण चर को इस प्रोग्राम के पथ पर सेट करें , और फिर sshऑटोमेकर एक्शन में इस तरह से चलाएँ :

export SSH_ASKPASS=/Users/danielbeck/pwd.sh
ssh user@hostname ls

जब कोई नहीं है tty, लेकिन SSH_ASKPASSऔर DISPLAY(X11 के लिए, डिफ़ॉल्ट रूप से सेट) सेट किया जाता है, SSH द्वारा निर्दिष्ट प्रोग्राम को निष्पादित करता है SSH_ASKPASSऔर पासवर्ड के माध्यम से अपने आउटपुट का उपयोग करता है। इसका उद्देश्य ग्राफिकल वातावरण में उपयोग किया जाना है, ताकि एक विंडो आपके पासवर्ड के लिए पूछ सके। इस मामले में, हमने बस विंडो को छोड़ दिया, हमारे प्रोग्राम से पासवर्ड वापस किया। आप securityइसके बजाय अपने किचेन से पढ़ने के लिए उपयोग कर सकते हैं :

#!/usr/bin/env bash
security find-generic-password -l password-item-label -g 2>&1 1>/dev/null | cut -d'"' -f2

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


उपयोग करते हुए इंटरएक्टिव एसएसएच सत्र sshpass

मैंने डाउनलोड, संकलित और स्थापित किया sshpassऔर यह पूरी तरह से काम करता है। यहाँ मैंने क्या किया है:

  1. Apple डेवलपर टूल प्राप्त करें
  2. डाउनलोड करें और खोलें sshpass-1.05.tar.gz
  3. निर्देशिका के लिए एक खोल खोलें sshpass-1.05
  4. Daud ./configure
  5. Daud make
  6. भागो make install(आपको sudoइसके लिए आवश्यकता हो सकती है)

अब प्रोग्राम को स्थापित किया गया है /usr/local/bin/sshpass। निम्नलिखित की तरह एक लाइन का उपयोग करते हुए निष्पादित करें:

sshpass -pYourPassword ssh username@hostname

आप securityऐसा करने से पहले पासवर्ड को पढ़ सकते हैं , और इसे इस तरह उपयोग कर सकते हैं:

SSHPASSWORD=$( security find-generic-password -l password-item-label -g 2>&1 1>/dev/null | cut -d'"' -f2 )
sshpass -p"$SSHPASSWORD" ssh username@hostname

इसे शेल फ़ंक्शन में लपेटें और आप केवल ssh-yourhostnameकनेक्ट करने के लिए उदा टाइप कर सकते हैं, इसे पुनः प्राप्त करने और पासवर्ड को स्वचालित रूप से दर्ज करने के लिए।


नमस्ते, मैंने आपके उत्तर को गलत कर दिया है क्योंकि इसने मुझे समाधान के लिए प्रेरित किया। हालाँकि, आपने यहाँ जो वर्णन किया है वह बिल्कुल काम नहीं आया (यह ssh के शेर के संस्करण के लिए विशिष्ट हो सकता है) 1) गैर-संवादात्मक सत्रों के लिए, ssh ने तब भी मुझसे पासवर्ड मांगा, और उसके प्रवेश करने के बाद, मुझे मिल गया STDIN is not a terminal। 2) के साथ इंटरैक्टिव सत्र के लिए sshpass, -pविकल्प स्पष्ट रूप से कुछ भी नहीं करता है। लेकिन सेट sshpassकरते समय दौड़ना SSH_ASKPASSकाम करता है!
चैतन्य गुप्त

@चैतन्यगुप्त विषम। इसने मेरे लिए ऑटोमैटिक ऑन लायन के भीतर से गैर-अंतःक्रियात्मक रूप से काम किया। उस दूसरे मुद्दे के बारे में, यह संभव है कि मेरे पास उस बिंदु पर एक गंदा शेल सत्र था, मुझे अब यकीन नहीं है। आप के लिए +1, और साइट पर अपना समाधान जोड़ने के लिए धन्यवाद।
डैनियल बेक

मेरा बुरा (लगभग 1) - मैं टर्मिनल में नॉन-इंटरेक्टिव सत्र चलाने की कोशिश कर रहा था और ऑटोमेकर नहीं। मैंने इसे अब ऑटोमेकर में आज़माया, और मुझे अभी भी STDIN is not a terminalत्रुटि मिलती है। हालाँकि, मुझे इस बार किसी भी पासवर्ड के लिए प्रेरित नहीं किया गया था; मेरा मानना SSH_ASKPASSहै कि जब से मैं SSH_ASKPASSगलत पासवर्ड के बदले में फाइल बनाता हूं, मुझे ऑटोमेटर में काम करना पड़ता है , मुझे एक Permission denied, please try again.त्रुटि मिलती है ।
चैतन्य गुप्त

1
अंतिम उदाहरणों के लिए ध्यान दें कि यूनिक्स की तरह OSes कमांड लाइन तर्क और पर्यावरण चर सिस्टम पर अन्य उपयोगकर्ताओं के लिए दिखाई दे सकते हैं, इसलिए यह संवेदनशील बहु उपयोगकर्ता वातावरण में सुरक्षित नहीं है।
जुरगेन स्ट्रोबेल

@DanielBeck किसी भी आइडिया को कैसे काम करना हैmacOs >= 10.13
nbari

7

मुझे एक समाधान मिला (इसके लिए आवश्यक महत्वपूर्ण जानकारी प्रदान करने के लिए डैनियल बेक का धन्यवाद)। ध्यान दें कि मैंने केवल OS X Lion 10.7.2 के साथ इसका परीक्षण किया है। यदि यह आपके लिए काम नहीं करता है, तो डैनियल के समाधान का प्रयास करें।

पहले हमें SSH_ASKPASSपर्यावरण चर सेट करने की आवश्यकता है - इसका मान उस प्रोग्राम का पथ होना चाहिए जो मानक आउटपुट के लिए पासवर्ड प्रिंट करता है। चाबी का गुच्छा से पासवर्ड प्राप्त करने के लिए, इसे ऐसा दिखने की आवश्यकता है (मैं इसे कॉल करता हूं get-ssh-password.sh):

#!/bin/bash

/usr/bin/security find-internet-password -a "$SSH_PASSWORD_USER" -s "$SSH_PASSWORD_HOSTNAME" -r "ssh " -g 2>&1 1>/dev/null | cut -d\" -f2

नोट करने के लिए कुछ बिंदु:

  1. यह मानता है कि आपने किचेन में पासवर्ड को उस तरीके से संग्रहीत किया है जिस तरह से मैंने प्रश्न में वर्णित किया है

  2. दिए गए कार्यक्रम को SSH_ASKPASSबिना किसी तर्क के बुलाया जाएगा; इसलिए हम उपयोगकर्ता और पासनाम को पास करने के लिए पर्यावरण चर का उपयोग करते हैं।

अब हम अपने सर्वर पर लॉगिन करने के लिए सेट SSH_PASSWORD_USERऔर SSH_PASSWORD_HOSTNAMEरन कर सकते हैं sshpass

मैंने ssh-kcpassऐसा करने के लिए एक और स्क्रिप्ट बनाई :

#!/bin/bash

export SSH_ASKPASS=~/bin/get-ssh-password.sh
export SSH_PASSWORD_USER=$(echo "$1" | cut -d@ -f1)
export SSH_PASSWORD_HOSTNAME=$(echo "$1" | cut -d@ -f2)

sshpass ssh "$1"

किसी भी पासवर्ड को टाइप किए बिना ssh सर्वर में लॉगिन करने के लिए, आपको बस चलाने की आवश्यकता है ssh-kcpass user@hostname


काम करने के लिए यह कैसे करेंmacOS >= 10.13
nbari

-3

हाय वहाँ लोगों को मैं इस विषय में आया था किसी और चीज़ की तलाश में ... लेकिन पता नहीं अगर मैं यहाँ कुछ याद कर रहा हूँ ... लेकिन आपका दृष्टिकोण मुझे अजीब लगता है। सिर्फ सार्वजनिक कुंजी प्रमाणीकरण का उपयोग क्यों न करें ... rsa key $ ssh-keygen -t rsa -b 2048 -C 'email / id' उत्पन्न करें

आदर्श रूप से आप एक बार ssh-copy-id उपयोगकर्ता @ होस्ट का उपयोग करते हैं और पासवर्ड को एक बार दूसरे सर्वर पर स्थापित करने के लिए प्रमाणित करते हैं, या ~ / .ssh / अधिकृत_की को तैनात करने के लिए किसी भी प्रकार की स्क्रिप्ट या ऑरमोमेशन टूल का उपयोग करते हैं। अन्य होस्ट (उस उपयोगकर्ता के लिए जिसे आप लॉग इन करना चाहते हैं) यदि आप मैन्युअल रूप से कमांड के साथ करते हैं तो आपको उसके अनुसार / etc / ssh / sshd_config को एडिट करना होगा और डब्ल्यू ऑटोमेशन (शेफ, एसिसिबल) को आप वांछित कंडिगा को वांछित स्थिति में धकेल देंगे।

वितरित करने के लिए महत्वपूर्ण कुंजी id_rsa.pub है, निजी कुंजी को सुरक्षित रखें

मेजबानों का उपयोग करने के लिए अपने मशीन पर एक स्वचालित सीधे फैशन संपादन में मेजबानों को प्रमाणित करने के लिए ~ / .ssh / config जोड़ें और जोड़ें।

होस्ट * UseKeychain हाँ

Ssh config फाइल विकल्पों पर अधिक जानकारी के लिए देखें उम्मीद है कि इसमें से कोई भी काम आए


1
प्रश्न निकाय का पहला वाक्य पढ़ें: '' मुझे एक ssh सर्वर में लॉगिन करने की आवश्यकता है जो कुंजी आधारित प्रमाणीकरण का समर्थन नहीं करता है। ''
स्कॉट

हाय स्कॉट मुझे लगता है कि आप भी उस हिस्से को याद करते हैं जहां वह कहता है कि वह हर बार पासवर्ड टाइप नहीं करना चाहता है, जिसका मतलब है कि वह ऐसा कर रहा है।
रिकार्डो

नहीं, मुझे वह याद नहीं था। आप क्यों विश्वास करेंगे कि मैंने किया?
स्कॉट

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