यह केवल ssh कॉन्फिगरेशन के साथ पूरी तरह से करने योग्य है, बिना लैन और वान के लिए अलग उपनामों का उपयोग किए बिना या इसके लिए कोई अतिरिक्त पोर्ट बनाने के बिना। (लेकिन आपको स्वाभाविक रूप से यह पता लगाने के लिए किसी तरह की आवश्यकता है कि आप अपने लैन के अंदर हैं या नहीं)
में ~/.ssh/config
, आप कुछ इस तरह जोड़ना चाहते हैं:
Match host raspi exec "am_i_outside_of_my_lan"
HostName 12.345.67.89
Port 1234
इसके स्थान पर am_i_outside_of_my_lan
आप एक कमांड रखना चाहते हैं जो यह निर्धारित करे कि आप अपने घर के नेटवर्क के अंदर हैं या नहीं, और यदि आप इसके बाहर हैं, तो 0 एग्जिट कोड के साथ रिटर्न करते हैं और कुछ और।
host
हालत शायद आत्म व्याख्यात्मक है, लेकिन exec
हालत वारंट कुछ स्पष्टीकरण: यह मेल खाता है केवल जब बाहर निकलने के कोड 0, यानी साथ दिया आदेश रिटर्न। कोई ग़लती नहीं।
तो दूसरे शब्दों में, यह क्या करता है host raspi
यह नियम इस नियम को प्रतिबंधित करता है जब आप मेजबान रास्पि से कनेक्ट करने का प्रयास करते हैं, और exec "am_i_outside_my_lan"
आगे इसे प्रतिबंधित करता है ताकि यह केवल तब लागू हो जब आप अपने घर के नेटवर्क के बाहर से कनेक्ट कर रहे हों। इसलिए आपके होम नेटवर्क के अंदर ssh user@raspi
वही होता है जो सामान्य रूप से होता है, लेकिन इसके बाहर नियम मेल खाता है और इसके बजाय इसके बराबर होता है ssh -p 1234 user@12.345.67.89
।
इसके स्थान पर क्या उपयोग करना है am_i_outside_of_my_lan
, यह पूरी तरह से आपके सेटअप पर निर्भर करता है। मैं इनलाइन लिखने की कोशिश करने के बजाय एक अलग स्क्रिप्ट में कमांड रखने का सुझाव देता हूं, क्योंकि सही होने के लिए उद्धरण थोड़ा कठिन लगता है।
व्यक्तिगत रूप से, मैंने यह पता लगाने के लिए निम्नलिखित पायथन लिपि का उपयोग किया कि क्या मैं अपने स्वयं के नेटवर्क के अंदर हूं: (चूंकि मेरा डोमेन नाम मेरे ही नेटवर्क के अंदर एक स्थानीय आईपी का समाधान करता है)
#! /usr/bin/env python
import socket, sys
sys.exit(socket.gethostbyname('mydomain.com').startswith('192.168.1.'))
यदि आपके पास एक समान सेटअप नहीं है, तो आपको कुछ और करना होगा। (उदाहरण के लिए, आप उस वायरलेस नेटवर्क के नाम को देख सकते हैं, जिससे आप जुड़े हैं, या यहां तक कि जिस नेटवर्क से आप जुड़े हैं, उसका बाहरी आईपी प्राप्त करने के लिए कुछ व्हाट्सएप-माय-आईपी सेवा से क्वेरी करें)