SSH को मुख्य पासफ़्रेज़ के लिए ग्राफ़िकल प्रॉम्प्ट का उपयोग करने के लिए कहें


41

मैं टर्मिनल का उपयोग करने वाले मानक के बजाय ग्राफ़िकल प्रॉम्प्ट (जीटीके, उदाहरण के लिए) का उपयोग करके पासफ़्रेज़ का अनुरोध करने के लिए एसएसएच को कैसे मजबूर कर सकता हूं?

मैंने सेटिंग की कोशिश की, SSH_ASKPASS=/usr/bin/ssh-askpassलेकिन इसका कोई असर नहीं हुआ।

समस्या तथ्य यह है कि ओपनिश प्रलेखन कहता है

अगर ssh के पास इससे जुड़ा कोई टर्मिनल नहीं है, लेकिन DISPLAY और SSH_ASKPASS सेट हैं, तो यह SSH_ASKPASS द्वारा निर्दिष्ट प्रोग्राम को निष्पादित करेगा और पासफ़्रेज़ को पढ़ने के लिए एक X11 विंडो खोलें।

एक के परिणाम के रूप मेरे मामले में, कमांड लाइन से शुरू की एक SSH git push, होगा तो, इसके साथ जुड़े एक टर्मिनल है SSH_ASKPASSतर्क पर ध्यान नहीं दिया जा रहा है।

कृपया ध्यान दें कि मैं जिक्र नहीं कर रहा हूं ssh-add, लेकिन एक मेजबानों के लिए जेनेरिक ssh चालान के लिए, जिसके लिए एक प्रमुख जोड़ी मौजूद है, लेकिन पासफ़्रेज़ द्वारा संरक्षित है।

जवाबों:


32

# 1 - गुम पैकेज?

आपको शायद वह पैकेज याद आ रहा है जिसमें शामिल है ssh-askpass। इसे स्थापित करने का प्रयास करें।

फेडोरा / CentOS / RHEL:

$ sudo yum install openssh-askpass

Debian / Ubuntu:

$ sudo apt-get install ssh-askpass-gnome ssh-askpass

लापता उपयोगिताओं का पता लगाना

आप इन आदेशों का उपयोग करके लापता टूल खोज सकते हैं:

फेडोरा / CentOS / RHEL:

$ yum search ssh-askpass
Loaded plugins: langpacks, presto, refresh-packagekit
Adding en_US to language list
======================================================= Matched: ssh-askpass =======================================================
x11-ssh-askpass.x86_64 : A passphrase dialog for X and not only for OpenSSH
ksshaskpass.x86_64 : A KDE version of ssh-askpass with KWallet support
connect-proxy.x86_64 : SSH Proxy command helper
openssh-askpass.x86_64 : A passphrase dialog for OpenSSH and X

Debian / Ubuntu:

$ apt-file -l search ssh-askpass
app-install-data
cruft
git-cola
luckybackup-data
pssh
sdm-terminal
seahorse
ssh-askpass
ssh-askpass-fullscreen
ssh-askpass-gnome

# 2 - डिस्कनेक्टेड टर्मिनल?

मैंने इसे शुरू में याद किया, लेकिन आगे पढ़ने के बाद मैंने पर्यावरण चर के sshसंबंध में मैन पेज में इस टिप्पणी को देखा SSH_ASKPASS

अंश

SSH_ASKPASS    If ssh needs a passphrase, it will read the passphrase from the 
               current terminal if it was run from a terminal.  If ssh does not
               have a terminal associated with it but DISPLAY and SSH_ASKPASS 
               are set, it will execute the program specified by SSH_ASKPASS 
               and open an X11 window to read the passphrase. This is particularly
               useful when calling ssh from a .xsession or related script.  
               (Note that on some machines it may be necessary to redirect the 
               input from /dev/null to make this work.)

आप टिप्पणी में हैं, तो यह कहा गया है कि ssh "एक टर्मिनल जुड़े नहीं है" और DISPLAY और SSH_ASKPASSस्थापित कर रहे हैं। यह देखना महत्वपूर्ण है। तो sshइसका उपयोग करने के लिए SSH_ASKPASSहमें sshएक टर्मिनल (उर्फ STDINऔर । STDOUT) संलग्न करने की आवश्यकता नहीं है।

कमांड का उपयोग करके ऐसा करने का एक तरीका setsid। बुरा मत मानना। मैंने इस उपकरण के बारे में कभी नहीं सुना। मैन पेज से:

setid - एक नए सत्र में एक कार्यक्रम चलाते हैं

इसलिए अगर हम ssh"प्रोग्राम" के रूप में चलाते हैं, तो हम अपने टर्मिनल से setsidअलग sshहो सकते हैं , जो ssh'मैन पेज' में बताए गए मानदंडों को पूरा करते हैं । अन्य मानदंड निम्नानुसार हैं:

$ echo $DISPLAY; echo $SSH_ASKPASS
:0.0
/usr/libexec/openssh/ssh-askpass

इसलिए अगर हम यह सब एक साथ करते हैं:

$ setsid ssh user@remotehost

उदाहरण के लिए:

$ setsid ssh user@skinner

                                       गु के पूछने के ss

एक तरकीब

यदि आप इसे बनाना चाहते हैं तो यह है कि setsid"बिल्ट-इन" आप एक उपनाम बना सकते हैं जैसे:

$ alias ssh="setsid ssh"

अब जब आप sshअपना पासवर्ड मांगने के लिए GUI को पॉप अप करेंगे:

$ ssh user@skinner

संदर्भ


ssh-askpass gnome स्थापित है और यह मैन्युअल रूप से लॉन्च किए जाने पर ठीक काम करता है।
जियोले

@ सर्जेल - अपडेट देखें, मुझे लगता है कि मैंने इसे समझ लिया है।
स्लम

इस समाधान की समस्या यह है कि इसके लिए आवश्यक है कि मैं प्रत्येक git या rsync कमांड को setsid sshसादे के इंस्टैड का उपयोग करने के लिए संशोधित करूं ssh
जियोले

@ सर्जेल - आपने पासवर्ड GUI को "फोर्स" करने के लिए एक विधि मांगी, यह प्रदान करता है। आप आदेशों को बदल सकते हैं जैसे कि sshउपनाम setsid sshएक दृष्टिकोण है। और भी तरीके हैं। सीमित कारक खुलता है ASK_SSHPASS को सक्रिय करने के लिए कोई TTY संलग्न नहीं है।
स्लम

मुझे पैकेज की कमी नहीं है और मैं अपने टर्मिनल से setsidकाम नहीं कर सकता ssh। यह सिर्फ एक वैध जवाब नहीं है !? इसके अलावा, यह उबंटू के पुराने संस्करणों में काम कर रहा था, इसलिए मुझे यकीन नहीं है कि मैं समझता हूं कि अचानक काम करना क्यों बंद कर दिया!
एलेक्सिस विल्के

8

यह वर्तमान OpenSSH में नहीं किया जा सकता है: OpenSSH Bugzilla में 2013-07 के अनुसार इस सुविधा के लिए एक मुद्दा खुला है: SSH_ASKPASS को सामान्य करें


यह प्रश्न का उत्तर प्रदान नहीं करता है। किसी लेखक से स्पष्टीकरण मांगने या उसका अनुरोध करने के लिए, उनके पोस्ट के नीचे एक टिप्पणी छोड़ दें।
congonglm

8
@cuonglm "यह संभव नहीं है" एक उत्तर है। यह गलत या भ्रामक हो सकता है (मैं यह नहीं कह रहा हूं), लेकिन यह अभी भी एक जवाब है।
terdon

2

एकल कमांड के लिए टर्मिनल बंद करने का एक तरीका है, और वह फ़ाइल पुनर्निर्देशन का उपयोग कर रहा है:

ssh-add > /dev/null < /dev/null 2>&1

यह ssh-addटर्मिनल बंद के साथ कमांड चलाएगा । जो इसकी जटिलता को छोड़कर, ठीक और बांका है। लेकिन अब जब आप सही कमांड जानते हैं, तो बस इसे एक उपनाम बनाएं और इसे इसमें जोड़ें ~/.bash_aliases:

alias ssh-add="/usr/bin/ssh-add > /dev/null < /dev/null 2>&1"

और आपको सेट किया जाना चाहिए। बस टाइपिंग ssh-addअब उपनाम को लागू करेगा जो वास्तविक आदेश को सभी पुनर्निर्देशन के साथ लागू करेगा।

ssh-addअब सही तरीके से आप एक संवाद बॉक्स के साथ पासवर्ड पूछता है ... बशर्ते कि आप इन पैकेजों स्थापित (Ubuntu या डेरिवेटिव में, वे कहीं और अन्य नामों हो सकता है) में से एक है:

  • ssh-askpass
  • ssh-askpass-fullscreen
  • ssh-askpass-gnome
  • ksshaskpath
  • kwalletcli
  • lxqt-openssh-askpass
  • razorqt-openssh-askpasss

अब, उन सभी चीजों का क्या मतलब है?

2>&1एक ही स्थान पर वर्णन करने वाले फ़ाइल पुनर्निर्देशक # 2 (मानक त्रुटि) का मतलब फ़ाइल वर्णनकर्ता # 1 (मानक आउटपुट) को निर्देशित किया जाता है।

इसका > /dev/nullमतलब है कि मानक आउटपुट को पुनर्निर्देशित करना /dev/null, जो एक विशेष फ़ाइल है जो इसके लिए लिखे गए सभी डेटा को छोड़ देता है।

< /dev/nullसाधन के लिए मानक इनपुट अनुप्रेषित /dev/null(इडेम)।

एक साइड नोट के रूप में, और एक ऑफ़ टॉपिक लेकिन संबंधित नोट, यदि आप कभी भी किसी सेवा को बैश में रखना चाहते हैं, तो आपको याद रखना चाहिए कि वास्तव में एक सेवा क्या है, मानक इनपुट, आउटपुट और त्रुटि के साथ एक प्रक्रिया जो पृष्ठभूमि में है:

service > /dev/null < /dev/null 2>&1 &

ध्यान दें कि अंतर केवल अंत में जोड़ा गया है (प्लस तथ्य यह है कि मैंने ssh-addएक सैद्धांतिक के लिए कमांड को बदल दिया है service। वे कमांड सही ढंग से पृष्ठभूमि पर एक सेवा डाल देंगे।


विस्तृत उत्तर के लिए धन्यवाद विक्टर। हालांकि, यह मेरी आवश्यकताओं के अनुरूप नहीं है। जैसा कि मैंने सवाल के अंत में लिखा था, «कृपया ध्यान दें कि मैं ssh-add का जिक्र नहीं कर रहा हूं, लेकिन एक मेजबान के प्रति सामान्य ssh के आक्रमण के लिए, जिसके लिए एक महत्वपूर्ण जोड़ी मौजूद है लेकिन पासफ़्रेज़ द्वारा संरक्षित है।»
जियोले

समझा। ठीक है, sshठीक उसी तरह से कार्य करता है, और वही उत्तर जो मैंने पहले दिया था वह अभी भी लागू होता है। बस के ssh-addसाथ हर घटना की जगह sshऔर आप सेट कर रहे हैं।
विक्टर

बस एक छोटा सा विवरण है जिसे आप भूल गए हैं: यदि मैं ssh के लिए stdin / stdout को बंद करता हूं, तो मैं ssh के माध्यम से कमांड कैसे दे सकता हूं? ;)
जियोले

यह ssh-addमेरे लिए काम करता है - मुझे वांछित व्यवहार प्राप्त करने के लिए stdout / stderr को पुनर्निर्देशित करने की आवश्यकता नहीं थी, जिसे ssh-askpassप्रोग्राम को पॉप अप करना था। (वह ssh-add < /dev/nullपर्याप्त था।)
बेन स्टर्न

0

आर्केलिनक्स पर seahorse-ssh-askpassपैकेज gnome-keyringको स्थापित किए बिना मैंने सीहोर (जो प्रदान करते हैं ) स्थापित करते समय मुझे एक ही समस्या थी ।

इस पैकेज की सामग्री gnome-keyring( https://www.archlinux.org/packages/extra/i686/gnome-keyring ) को देखने से आपको अपनी समस्या हल करने में मदद मिल सकती है।

किसी भी मामले में, यदि आपको सीहोर का उपयोग करने में कोई आपत्ति नहीं है, तो आप पैकेज seahorseऔर gnome-keyring(या आपके वितरण के लिए समकक्ष) भी स्थापित कर सकते हैं । यदि आप Gnome का उपयोग नहीं करते हैं, तो अतिरिक्त चरणों की आवश्यकता हो सकती है: https://wiki.archlinux.org/index.php/GNOME_Keyring

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