एक दूरस्थ एसएसएच सत्र द्वारा एक शेल के स्वामित्व में होने का पता कैसे लगाया जाए?


9

मेरा प्रश्न इस के समान है , लेकिन मैं कुछ अलग सा देख रहा हूँ। मेरे पास एक नोटबुक पीसी है जो मैं दो अलग-अलग परिदृश्यों में नेटवर्क पर लिनक्स मशीनों का उपयोग करने के लिए उपयोग करता हूं:

  • मेरे पास नेटवर्क से सीधा, वायर्ड कनेक्शन है।

  • मेरा नेटवर्क से अप्रत्यक्ष संबंध है। इंटरनेट के संपर्क में आने वाले नेटवर्क पर एक गेटवे मशीन है, जिसका उपयोग मैं नेटवर्क पर मेजबानों को SSH सुरंगों को स्थापित करने के लिए कर सकता हूं। यह स्पष्ट रूप से एक बहुत धीमी, उच्च-विलंबता कनेक्शन है।

मेरे घर की निर्देशिका सभी मशीनों से नेटवर्क-सुलभ है, इसलिए वे मेरी एक प्रति साझा करते हैं .bashrc। मैं यह .bashrcपता लगाने के लिए कार्यक्षमता जोड़ना चाहूंगा कि मैं किन दो परिदृश्यों का पता लगा सकता हूं और तदनुसार कार्य कर सकता हूं (तकनीकी रूप से, तीन परिदृश्य होंगे, जहां तीसरा यह है कि मैं अपने स्थानीय मशीन में प्रवेश कर रहा हूं, लेकिन इसे आसानी से नियंत्रित किया जाना चाहिए। )। मैं चीजों को करना पसंद करूंगा:

  • alias ssh ssh -X जब मैं स्थानीय नेटवर्क पर हूं, लेकिन मैं इंटरनेट पर X अग्रेषण का उपयोग नहीं करना चाहता।

  • export EDITOR=gvimजब मैं स्थानीय नेटवर्क पर export EDITOR=vimहोता हूं , लेकिन जब मैं दूरस्थ होता हूं।

और इसी तरह। पिछले उत्तर के आधार पर, ऐसा लगता है कि मुझे SSH_CLIENT(अगर यह मौजूद है) की सामग्री की जांच करके ऐसा कुछ हासिल करने में सक्षम होना चाहिए और यह देखना कि क्लाइंट आईपी पता मेरे स्थानीय मशीन पर नेटवर्क एडेप्टर में से एक से मेल खाता है या नहीं। मुझे लगा कि मैं यह देखूंगा कि क्या इसे पूरा करने के लिए कोई स्लीकर या अधिक मजबूत तरीका है।

जवाबों:


10

SSH सत्र का पता लगाने के लिए, का उपयोग करें $SSH_CLIENT

स्थानीय और दूरस्थ सत्रों के बीच अंतर करने के लिए, दो संभावित दृष्टिकोण हैं: क्लाइंट-साइड या सर्वर-साइड। सर्वर की ओर, $SSH_CLIENTस्थानीय आईपी पते या रूटिंग टेबल के साथ तुलना करें ; यह आमतौर पर आपको बताएगा कि क्या कनेक्शन लैन से है। क्लाइंट की तरफ, आप ForwardX11अपने में सेटिंग्स रखना चाहते हैं ~/.ssh/config: इसे yesLAN होस्ट्स के लिए और noWAN होस्ट्स के लिए सेट कर सकते हैं । इसका मतलब है अलग- ~/.ssh/configअलग साइटों पर एक अलग होना ; यही मैं करता हूं, और मैं एक शेल स्क्रिप्ट के साथ मेरा निर्माण करता हूं।

यदि X11 अग्रेषण LAN कनेक्शन के लिए और WAN कनेक्शन के लिए बंद है, तो आप अपने पसंदीदा संपादक को ध्यान $DISPLAYमें रख सकते हैं।

सर्वर-साइड सेटिंग्स सामान्य रूप से आपके .profile(या .bash_profileयदि आपका लॉगिन शेल बैश है और आप उपयोग करते हैं .bash_profile, या .zprofileयदि आपका लॉगिन शेल zsh है)।

case ${SSH_CLIENT%% *}//$(/sbin/ifconfig |
                          sed -n 's/^.* addr:\([0-9][0-9.]*\) .*/\1/p' |
                          tr '\n' /)/ in
  "") :;;# local session
  10.42.*/10.42.*) :;; # LAN session
  1.2.3.*/1.2.3.*) :;; # LAN session
  *) unset DISPLAY;; # WAN session
esac
export EDITOR=vim
if [ -n "$DISPLAY" ] && type gvim >/dev/null 2>/dev/null; then
  EDITOR=gvim
fi
export VISUAL="$EDITOR"

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