मैं ssh- एजेंट को ssh और tmux पर कैसे काम कर सकता हूं (OS X पर)?


17

मेरे पास मेरे github खाते के लिए एक निजी कुंजी सेट है, जो पासफ़्रेज़ है, मेरा मानना ​​है कि ओएस एक्स के किचेन में संग्रहीत है। जब मैं टर्मिनल विंडो खोलता हूं और प्रवेश करता हूं तो मुझे निश्चित रूप से इसे टाइप करने की आवश्यकता नहीं होती है ssh git@github.com

हालाँकि, जब मैं एक ssh सत्र पर या स्थानीय रूप से tmux सत्र के अंदर बैश चल रहा होता हूं, तो मुझे हर बार पासफ़्रेज़ में टाइप करना होता है जब मैं गीथब को ssh करने का प्रयास करता हूं।

यह सवाल बताता है कि एक समान समस्या स्क्रीन के साथ मौजूद है, लेकिन मैं वास्तव में इस मुद्दे को अच्छी तरह से समझ नहीं पा रहा हूं ताकि इसे tmux में ठीक किया जा सके। यह पृष्ठ भी है जिसमें काफी जटिल समाधान शामिल है, लेकिन zsh के लिए।

संपादित करें :

के जवाब में @ मिकेल का जवाब , एक स्थानीय टर्मिनल मैं निम्नलिखित आउटपुट प्राप्त से:

[~]
$ echo $SSH_AUTH_SOCK
/tmp/launch-S4HBD6/Listeners
[~] 
$ ssh-add -l
2048 [my key fingerprint] /Users/richie/.ssh/id_rsa (RSA)
[~]
$ typeset -p SSH_AUTH_SOCK
declare -x SSH_AUTH_SOCK="/tmp/launch-S4HBD6/Listeners"

जबकि ssh या tmux में मुझे मिलता है:

[~]
$ echo $SSH_AUTH_SOCK

[~]
$ ssh-add -l
Could not open a connection to your authentication agent.
[~]
$ typeset -p SSH_AUTH_SOCK
bash: typeset: SSH_AUTH_SOCK: not found

echo $SSH_AGENT_PID जो कुछ भी खोल मैं इसे से चलाने के लिए कुछ भी नहीं देता है।


किस बारे में typeset -p SSH_AUTH_SOCK?
मिकेल

@ bash: typeset: SSH_AUTH_SOCK: not foundSsh / tmux के भीतर से मैकल । यदि आवश्यक हो तो मैं आज रात स्थानीय स्तर पर कोशिश करूंगा।
रिच

@Mikel मैंने उस कमांड के आउटपुट को प्रश्न में जोड़ दिया है।
रिच

AFAIK, प्रश्न और उत्तर OS X- विशिष्ट नहीं हैं। यह कुछ गैर-OS X- विशिष्ट द्वंद्वों से बचने के लिए प्रासंगिक है, अर्थात् superuser.com/q/334975/46794 और superuser.com/q/479796/46794
ब्लेसरॉब्लेड

@ ब्लेज़रब्लड मैं इस धारणा के तहत था कि मेरा पासफ़्रेज़ ओएस एक्स कीचेन में संग्रहीत किया गया था (हालांकि मुझे अब याद नहीं है कि मुझे विश्वास क्यों था कि मामला होना चाहिए)। क्या यह गलत है?
अमीर

जवाबों:


4

मेरे सहयोगी ने लाइव एजेंट खोजने में सहायता करने के लिए कुछ बश फ़ंक्शन बनाए: https://github.com/wwalker/ssh-find-agent

वह इसे मुख्य रूप से सिस्टम (लैपटॉप से ​​डेस्कटॉप, आदि) के बीच कनेक्ट करने के लिए उपयोग करता है, लेकिन मैं इसका उपयोग अक्सर स्थानीय tmux सत्रों के लिए करता हूं, जहां आप अपने विंडो मैनेजर से (अपने लिए OS X) लॉगआउट करते हैं।

प्रयोग

  1. डाउनलोड ssh-find-agent.bash ( git clone git://github.com/wwalker/ssh-find-agent.gitवर्क्स)।

  2. निम्नलिखित को ~ / .bashrc में जोड़ें:

    . /path/to/ssh-find-agent.bash
    
  3. फिर आप अपने वर्तमान शेल में SSH_AUTH_SOCK सेट करने के लिए निम्नलिखित टाइप कर सकते हैं:

    set_ssh_agent_socket
    

मैंने इस उत्तर को किसी भी अन्य के बजाय स्वीकार कर लिया है कि यह काम कर सकता है लिए एसएसएच एजेंट अग्रेषण की आवश्यकता नहीं है, जो मेरे उद्देश्यों के लिए बेहतर है। धन्यवाद!
रिच

8

एक सुरुचिपूर्ण समाधान, dagit.o से उठाया गया :

सृजन करना ~/.ssh/rc

#!/bin/bash
if [ -S "$SSH_AUTH_SOCK" ]; then
    ln -sf $SSH_AUTH_SOCK ~/.ssh/ssh_auth_sock
fi

में जोड़े ~/.tmux.conf

set -g update-environment "DISPLAY SSH_ASKPASS SSH_AGENT_PID SSH_CONNECTION WINDOWID XAUTHORITY"
set-environment -g 'SSH_AUTH_SOCK' ~/.ssh/ssh_auth_sock

7

अपनी .tmux.confकॉन्फ़िगरेशन फ़ाइल में, यह पंक्ति जोड़ें:

सेट -g अद्यतन-वातावरण "SSH_ASKPASS SSH_AUTH_SOCK SSH_AGENT_PID SSH_CONNECTION"

यह इन पर्यावरण चरों को आपके मुख्य शेल से tmux के भीतर खोले गए किसी भी गोले में कॉपी करने का कारण बनता है, जो तब ssh-Agent को उन tmux गोले के भीतर ठीक से काम करने की अनुमति देता है।


2
उन मानों को tmux सत्र में प्राप्त करने के लिए यह उपयुक्त विधि है , लेकिन उन सभी पर्यावरण चर को पहले से ही डिफ़ॉल्ट मान में शामिल किया जाना चाहिए update-environment। ओपी को अपने update-environmentमूल्य की जांच करनी चाहिए और संभवत: जहां भी पहले से बदलाव किया जा रहा है, उसे अपडेट करें।
क्रिस जॉन्सन

1
हम्म .. आगे खुदाई करने के बाद, मैं सहमत हूं - मेरे द्वारा सूचीबद्ध सेटिंग्स पहले से ही चूक में हैं, और अगर मैं .tmux.conf फ़ाइल के बिना tuxux चलाता हूं, तो सब कुछ ठीक से काम करता है। और अगर मैं अपने .tmux.conf फ़ाइल से उद्धृत लाइन को हटाता हूं, तो यह मेरे लिए भी काम कर रहा है, हालांकि यह पहले नहीं था। स्पष्ट रूप से कभी-कभी कुछ और गलत हो रहा है। हो सकता है कि सस्पेंड / रिस्टोर या अटैच करना / अटैच करना या किसी टीएमक्स सेशन में दूर से भेजना। मैं अपनी आँखें खुली रखूँगा और अद्यतन करूँगा यदि मुझे वह कारक मिल जाए जो इसे प्रतिलिपि प्रस्तुत करने योग्य बनाता है।
ट्रेवर पॉवेल

update-environmentसही तरीके से सेट किया गया है। हालाँकि, समस्या अभी भी होती है।
रिच

2
इसके साथ समस्या यह है कि कॉन्फ़िगर केवल तभी निष्पादित किया जाएगा जब कोई tmuxसर्वर मौजूद न हो, फिर से संलग्न करने के उद्देश्य को धता बताते हुए ... हो सकता है कि उन चर को फिर से अपडेट करने के लिए कमांड लाइन स्विच हो?
तोबियस किंज़्लर

3

यह मेरे साथ हुआ कि OS X से ssh के माध्यम से कनेक्ट होने पर बने पैन ने ठीक काम करने के थोड़ी देर बाद मेरा पासफ़्रेज़ पूछना शुरू कर दिया। मुझे http://santini.di.unimi.it/extras/ph/my-tmux-setup.html से इस लाइन को ठीक करने का एक तरीका मिला

eval $(tmux show-environment -t [YOUR-SESSION] | grep '^SSH_AUTH_SOCK')

बस इसे उस फलक से चलाएं जिसकी शिकायत है।


2

यकीन नहीं होता कि आप बैश या किसी अन्य शेल का उपयोग कर रहे हैं, लेकिन इस आदमी का tmux सेटअप ऐसा लग रहा है कि यह बैश के लिए काम करेगा। व्यक्तिगत रूप से, मैं ओह- माय - ज़श के साथ zsh का उपयोग कर रहा हूं , और मैंने पाया कि ssh-agent ने मेरे जुड़ने के बाद tm में काम करना शुरू कर दिया है

zstyle :omz:plugins:ssh-agent agent-forwarding on

मेरे .zshrc फ़ाइल में और मेरे चल रहे zsh सत्रों में कॉन्फिग को पुनः लोड किया। मुझे इस लड़के का zsh-उन्मुख समाधान भी मिला , लेकिन यह मेरे लिए अनावश्यक निकला।


1

क्या करता है:

echo $SSH_AUTH_SOCK
echo $SSH_AGENT_PID
ssh-add -l

प्रिंट?

इसे अपने सामान्य टर्मिनल में चलाएं, फिर इसे अपने tmuxसत्र के अंदर चलाएं । उन्हें एक ही बात छापनी चाहिए।


मैंने इन आदेशों की प्रतिक्रिया को प्रश्न में जोड़ा। मैंने यह भी महसूस किया है कि समस्या तब भी होती है जब मैं ssh (tmux का उपयोग किए बिना) पर लॉगिन करता हूं, और उसी के अनुसार प्रश्न संपादित करता हूं।
रिच

4
sshआसान है। एजेंट को चालू करें चालू करें। ssh -Aइसके बजाय सबसे आसान तरीका यह है कि इसे चलाया जाए ssh। एक उपनाम का उपयोग करें ताकि आप इसे हर बार टाइप न करें, या इसे अपने में रखें .SSH/config
मिकेल

धन्यवाद। कि ssh के लिए काम किया। कैसे tmux में इसे ठीक करने के लिए कोई विचार?
रिच

0

कई समाधान हैं, लेकिन 27 जनवरी 2014 से संबंधित स्टैकऑवरफ्लो प्रश्न से संबंधित 8 जनवरी 2016 के हंस गेंजेल के उत्तर में सबसे सरल पाया गया है । बस अपने शेल ~/.profileया इसके समान निम्नलिखित जोड़ें :

alias ssh='eval $(tmux show-env -s | grep "^SSH_") && ssh'

मल्टी-लाइन फ़ंक्शन को परिभाषित करने या नई अस्थायी फ़ाइलों को बनाने की कोई आवश्यकता नहीं है। यदि आप उपनाम नहीं चाहते हैं ssh, तो बस इसे बदल fixsshदें और && sshअंत में हटा दें , और fixsshजब भी आप sshreattached tmux सत्र के अंदर से चलाने का प्रयास कर रहे हों , तब इसे चलाएं ।

हंस गिन्ज़ेल के जवाब से पता चलता है कि चलाने के लिए tmux का एक 'नया संस्करण' आवश्यक है show-env -s। यह tmux 2.7 में मेरे लिए काम करता है, और चैंज के मेरे पढ़ने पर , -stmux 0.3 की रिलीज से ठीक पहले 3 जून 2008 को जोड़ा गया। tmux 2.3 (29 सितंबर 2016) स्थिर डेबियन में है।

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