सही टेंट पर शुरू करने के लिए पिनेंट्री-शाप कैसे प्राप्त करें?


13

मैं gpg-agentपीजीपी ई एसएसएच पहचान दोनों के प्रबंधन के लिए उपयोग करता हूं । एजेंट को इस तरह से स्क्रिप्ट के साथ शुरू किया जाता है

gpg_agent_env="$XDG_CACHE_HOME/gpg-agent.env"

export GPG_TTY="$(tty)"

if ! ps -U "$USER" -o ucomm | grep -q gpg-agent; then
    eval "$({gpg-agent --daemon | tee $gpg_agent_env} 2> /dev/null)"
else
    source "$gpg_agent_env" 2> /dev/null
fi

जब भी मैं एक इंटरेक्टिव शेल चलाता हूँ, तो यह खट्टा होता है। इस सेटअप के साथ सब कुछ ठीक है, लेकिन एक मुद्दा है। आइए हम बताते हैं:

  1. एक टर्मिनल खोलें (पृष्ठभूमि में एजेंट को लॉन्च करना) और काम करना शुरू करें
  2. थोड़ी देर बाद दूसरा टर्मिनल खोलें
  3. दूसरे टर्मिनल में पासफ़्रेज़ में प्रवेश करने की आवश्यकता है

इस बिंदु पर एक पासफ़्रेज़ का संकेत देना gpg-agentशुरू कर pinentry-cursesदिया जाएगा, लेकिन यह पहले टर्मिनल में ऐसा करेगा, जिसके परिणामस्वरूप इसका आउटपुट जो कुछ भी चल रहा था (आमतौर पर एक पाठ संपादक) के साथ मिश्रित होता है, जिसमें प्रोग्राम को फिर से शुरू करने या पिनेंट्री को रोकने का कोई तरीका नहीं है (यह 100% बाप्पू का उपयोग करना शुरू करता है और मुझे इसे मारना होगा)।

मुझे यहां कुछ गलत करना चाहिए। यह किसी ने अनुभव किया है?

अपडेट करें:

मुझे लगा कि यह केवल SSH कुंजी को अनलॉक करने के लिए संकेत के लिए होता है, जो इस तरह दिखता है , जबकि PGP कुंजियों के लिए संकेत हमेशा सही (यानी चालू) tty पर खुलते हैं।


क्या आपने अपने लॉगिन शेल से एजेंट को शुरू करने की कोशिश की है, तो आपके पास केवल एक ही है?
jasonwryan

@ajonwryan मैंने अभी-अभी कोशिश की है: यह लिनक्स वर्चुअल टर्मिनल (एगेटी) के लिए एक ही बात है। टर्मिनल के साथ प्रश्न में जिस तरह से मैं एक टर्मिनल एमुलेटर खिड़की का मतलब था।
राणमहोज 19

1
यह है export GPG_TTY="$(tty)"कि यह मेरे लिए तय किया गया था
naisanza

जवाबों:


11

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

gpg-connect-agent updatestartuptty /bye

नए टर्मिनल में एजेंट के दृष्टिकोण को अद्यतन करने के लिए कि किस tty या डिस्प्ले का उपयोग करना है।


1
इस जवाब ने मुझे इस अहसास को पूरी तरह से हासिल करने में मदद की: जिन लोगों के लिए gpg2यह कमांड-लाइन-केंद्रित वर्कफ़्लो / जीवनशैली होना पसंद है उनकी कोई अवधारणा नहीं है। किसी तरह जिन लोगों की मूलभूत अवधारणा आ ठेठ कंप्यूटर उपयोगकर्ता अनुभव शुरू होती है और जीयूआई खिड़कियों की सीमाओं के भीतर समाप्त होती है, वे निर्णय लेने के लिए एक उपकरण को प्रभावित करते हैं जो पहले कमांड-लाइन पर आराम से उपयोग करने योग्य थे।
mtraceur

2
@mtraceur वास्तव में नहीं, यह ssh- एजेंट यहाँ पर गलती है: वास्तव में gpg2 पीजीपी कुंजी को अनलॉक करते समय सही tty पर संकेत प्रदर्शित करेगा। यह उन ssh- एजेंट के लिए जिम्मेदार है जो संभवतः एक अलग tty में स्विच करने के बारे में कभी नहीं सोचा था।
रंमहोज

2
@Rnhmjoj क्या SSH वालों को TTY- स्विचिंग यूज़ेस का समर्थन करना चाहिए था जो कि अधिकांश यूनिक्स / लिनक्स इतिहास के लिए कोई कमांड-लाइन टूल नहीं था? क्या आप जानते हैं कि डिजाइन कैसे सोचा प्रक्रिया और निर्णय के लिए वर्कफ़्लो का कौन सा हिस्सा कमान द्वारा संभाला गया था और जो एजेंट द्वारा नियंत्रित किया गया था? यदि आप हैं, तो शायद आप मुझे कुछ ऐसा देखने में मदद कर सकते हैं जो मुझे याद आ रही है, क्योंकि मैं सिर्फ एक स्पष्ट रास्ता नहीं देख सकता कि एजेंट को "स्विच" करने के लिए बहुत आवश्यकता कैसे होगी टीटीवाई भी तब तक उत्पन्न होंगे जब तक कि वास्तुकला पर विचार किए बिना तय किया गया था। विशिष्ट कमांड-लाइन का उपयोग और वर्कफ़्लो।
mtraceur

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

1
@ArneBabenhauserheide जब तक आप SSH एजेंट और gpg2 के बीच अंतर के बारे में पूछ रहे हैं? क्योंकि इतने, तो अंतर है अगर है कि SSH (सक्रिय रूप से पृष्ठभूमि में स्विच टर्मिनलों के लिए विशेष रूप से उसके एजेंट बताने के लिए होने अन्य टूलींग के इस विकृति की आवश्यकता कभी नहीं मैं जानता हूँ कि जहाँ तक - और अगर यह तो किया था मैं के लिए एक ही आलोचनाओं है यह भी )। gpg2अगर लोग हैं, जो कैसे लिनक्स / यूनिक्स काम करता है की CLI-प्रासंगिक पहलुओं grok नहीं है, और क्या मनमाना संयोजन में लिखने के लिए इंटरफेस और टूलींग अच्छा बनाता है की अच्छी समझ नहीं है द्वारा कार्यान्वित डिजाइन केवल समझ में आता है।
मृत्युंजय

5

ओपनश के खिलाफ अपस्ट्रीम बग के अनुसार , इसका उचित तरीका आपके लिए निम्नलिखित को जोड़ रहा है ~/.ssh/config:

Match host * exec "gpg-connect-agent UPDATESTARTUPTTY /bye"

इसने मेरे लिए अब तक पूरी तरह से काम किया है।


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