मैं tmux में पहले से अग्रेषित ssh कुंजी को कैसे अग्रेषित कर सकता हूं?


15

मैं SSH के माध्यम से एक ऐसी मशीन से जुड़ रहा हूँ जहाँ मेरी चाबियाँ संग्रहीत हैं, एक दूसरी मशीन को अग्रेषित कर रहा है, और फिर टिक्स के भीतर से कुंजियों का उपयोग करने का प्रयास करें। मैं tmux में प्रवेश करते समय अग्रेषण को "ढीला" करता हूं। "फिर से आगे" कैसे कर सकते हैं ताकि मैं tmux के भीतर से अपनी कुंजियों का उपयोग कर सकूं?

$ ssh [server] -o ForwardAgent=yes
$ git pull       # Succeeds.
$ /bin/bash
$ git pull       # Still succeeds, despite new shell.
$ exit
$ tmux attach
$ git pull       # Permission denied (publickey)

यदि आप अपने सभी सत्रों के बीच साझा किए गए एजेंट को लॉन्च करते हैं, तो मैं इसकी पुष्टि करता हूं। दस्तावेज़ bose.utmb.edu/Compu_Center/ssh/SSH_HOWTO.html > कॉन्फ़िगर ssh- Agent प्रक्रिया इस परिणाम को प्राप्त करने का एक तरीका बताती है।
डेरेकॉन

इसके अलावा प्रासंगिक: unix.stackexchange.com/questions/75681/…
जो

जवाबों:


12

यदि आप पहले से मौजूद tmux सेशन को संलग्न कर रहे हैं, तो शेल आपके लॉगिन शेल से पर्यावरण चर नहीं ले रहा है। विशेष रूप से, यह ssh एजेंट वातावरण चर का वारिस नहीं करेगा।

यह ठीक करने का प्रयास करें :

  1. यह स्क्रिप्ट बनाएं और इसे $ HOME / .ssh / saveagent में डालें

    #!/bin/sh
    SSHVARS="SSH_CLIENT SSH_TTY SSH_AUTH_SOCK SSH_CONNECTION DISPLAY"
    
    for var in ${SSHVARS} ; do
      echo "export $var=\"$(eval echo '$'$var)\""
    done 1>$HOME/.ssh/latestagent
  2. इसे अपने शेल स्टार्टअप स्क्रिप्ट में जोड़ें। उदाहरण के लिए यदि आप बैश का उपयोग करते हैं:

    echo '. ~/.ssh/saveagent' >> ~/.bash_login
  3. Tmux को अटैच करने के बाद रन करें . $HOME/.ssh/latestagent

यह भी देखें कि एसएसएच के माध्यम से कनेक्ट करने के तुरंत बाद मैं एक स्क्रिप्ट कैसे चला सकता हूं? और tmux सत्र में संलग्न करें और एक कमांड चलाएं


1
यदि आप अन्य शेल्स के साथ संगत होने का प्रयास कर रहे हैं, तो .profile भेजें।
डेरेकसन

2
बहुत बढ़िया जवाब! कुछ मुद्दों पर मैं भाग गया: एक - कुछ पर्यावरण चर में रिक्त स्थान होते हैं, इसलिए saveagentस्क्रिप्ट में अंतिम से पहले की रेखा होनी चाहिए echo "export $var=\"$(eval echo '$'$var)\"":। b - latestagentस्क्रिप्ट को sourceइसके बजाय के साथ बुलाया जाना चाहिए sh, इसलिए चर सेट करने से कॉलिंग शेल प्रभावित होगा। c - latestagenttmux को अटैच करने पर स्क्रिप्ट को अपने आप कॉल करना यहाँ वर्णित विधि से किया जा सकता है: unix.stackexchange.com/questions/86925/…
जो

धन्यवाद @ जो, मैंने आपके सुधारों को शामिल करने के लिए अपने उत्तर को संशोधित किया।
GnP

0

जब तक आप एक ऐसी स्क्रिप्ट का स्रोत नहीं बनाना चाहते, जिसमें आपके लिए आवश्यक प्रत्येक चर में आपके द्वारा खोले जाने वाले किसी भी नए शेल में एक ही tmuxसर्वर सत्र द्वारा स्पॉन किए गए सभी गोले हों , तो आप संभवतया tmuxसत्र के साथ वैरिएबल को सत्र या वैश्विक वातावरण में रखना चाहते हैं set-environment। इस तरह के उदाहरण के लिए (बैश के लिए):

for var in DISPLAY SSH_AUTH_SOCK ...; do
    tmux setenv "$var" "${!var}"
done

-gयदि आप इसे अन्य सत्रों में भी चाहते हैं और -t <session>यदि आप इसे बाहर से चला रहे हैं तो ध्वज को जोड़ना याद रखें tmux


0

यहां अन्य उत्तरों को पढ़ने के बाद, मैंने अपने सार्वजनिक / निजी कीपर को रिमोट सर्वर पर कॉपी करने का निर्णय लिया, जिससे मुझे अब एजेंट अग्रेषण के बारे में चिंता करने की आवश्यकता नहीं थी।

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