ssh- एजेंट कुंजी स्क्रीन के साथ मध्यांतर या गढ़ होस्ट पर tmux


8

आम तौर पर मेरे पास ssh-agent चल रहा है, मैं अपने गढ़ होस्ट की ओर ssh करता हूं, फिर एक tmux सेशन खोलता हूं और उसके बाद अन्य बॉक्स से जुड़ता हूं। कुंजी अग्रेषण किसी भी सत्र के लिए काम करता है जिसे मैं उस बिंदु से आगे खोलता हूं।

अगर मैं टर्मिनल को बंद करने के बाद अपना tmux सत्र फिर से शुरू करता हूं, तो अपने लैपटॉप को सोता हूं, जो भी हो, मेरे गढ़ सत्रों पर अग्रेषण अभी भी काम करता है, जैसा कि किसी भी नए सत्र में अग्रेषण करता है । मौजूदा वाले काम नहीं करते हैं, हालांकि।

मेरे पास मेरे bashrc में एक छोटी सी चीज़ है जो tmux को फिर से शुरू करने पर काम को आगे बढ़ाती है, लेकिन मुझे यह पता लगाने में परेशानी हो रही है कि इसे कैसे प्राप्त करें ताकि tmux के भीतर सत्रों को खुला रखा जा सके।

उदाहरण के लिए, मेरे पास bastion01, dbhost01, dbhost02, webhost01, और webhost02 हैं।

अगर मैं bastion01 के लिए कनेक्शन खोलता हूं, तो वहां tmux शुरू करें, और फिर dbhost01 और webhost01 को अग्रेषित करने वाले कार्यों से कनेक्ट करें। यदि मैं उस कनेक्शन को बंद कर देता हूं, तो मेरे मौजूदा tmux सेशन को फिर से कनेक्ट और अटैच करता हूं, तो dbhost02 और webhost02 में कनेक्शन जोड़ें, कुंजी अग्रेषण 02 बॉक्स पर काम करता है, लेकिन 01 पर नहीं।

कृपया सहायता कीजिए!

जवाबों:


11

जब भी आप ssh में जाते हैं bastion01, कुंजी अग्रेषण को संभालने के लिए एक अलग सॉकेट खोला जाता है। आप पर्यावरण चर में फ़ाइल नाम देख सकते हैं SSH_AUTH_SOCK। जब आप शुरू करते हैं tmux, तो उस पर्यावरण चर का मान tmuxवैश्विक वातावरण में शामिल होता है, जो उस सत्र में शुरू किए गए किसी भी गोले से विरासत में मिला है।

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

ऐसा करने का एक त्वरित और गंदा तरीका एक छोटी स्क्रिप्ट लिखना है जो इस नए मान को एक फ़ाइल में बचाएगा, और किसी भी tmuxविंडो के अंदर निष्पादित करें जहां से आप होंगे ssh

#!/bin/bash

echo "export SSH_AUTH_SOCK=$SSH_AUTH_SOCK" > ~/.auth_ssh

जैसे ही आप ssh में आते हैं bastion01, उस स्क्रिप्ट को निष्पादित करें , लेकिन इससे पहले कि आप अपने tmux सत्र को पुनः संलग्न करें। फिर, इससे पहले कि आप अंदर से कहीं भी ssh करने की कोशिश करें tmux, निम्नलिखित चलाएं:

source ~/.auth_ssh

प्रत्येक tmuxविंडो का अपना वातावरण होता है, इसलिए आपको प्रत्येक विंडो में उस भाग को चलाने की आवश्यकता होगी जहाँ आप ssh चलाने का प्रयास करते हैं। सादगी के लिए, आप इसे आपके लिए करने के लिए उपनाम दे सकते हैं:

alias ssh="source ~/.auth_ssh; ssh"

नोट: यह SSH प्राधिकरण जानकारी को अद्यतन करने के लिए काम में उपयोग की जाने वाली एक स्क्रिप्ट का एक स्थूल निरीक्षण है। यदि यह काफी सही काम नहीं करता है, तो मुझे उम्मीद है कि यह कम से कम आपको बेहतर समाधान के लिए Google को पर्याप्त जानकारी देता है (या कोई अन्य व्यक्ति यहां एक बेहतर समाधान पोस्ट करता है)।

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