@ उत्तर के लिए धन्यवाद , इसने मुझे बहुत प्रेरित किया।
मैंने पाया कि आप अपने कनेक्शन को जबरन रीडायरेक्ट कर सकते हैं ProxyCommand nc dst dst-port।
उदाहरण के लिए, B.comयदि आप उपयोग करते हैं, तो आप वास्तव में कनेक्ट करेंगे
ssh A.com -o ProxyCommand="nc B.com 22"
लेकिन UserKnownHostsFileफिर भी रिकॉर्ड करेंगेA.com
तो आप अपने लिए एक डोमेन "ऑटो" जोड़ सकते हैं ssh_config
Host auto.internal-server
Hostname {internal-server ip or domain}
ProxyCommand bash -c '(timeout 0.1 nc -z %h %p) && nc %h %p || ssh -W %h:%p external-server'
मैंने इसके nc -w 1 %h %pसाथ प्रतिस्थापित किया (timeout 0.1 nc -z %h %p) && nc %h %p, यह अधिक त्वरित होगा यदि आप आंतरिक-सर्वर तक कम पहुंच सकते हैं तो 100ms।
या आप द्वारा प्रतिस्थापित किया जा सकता है ping, लेकिन यदि आप टीसीपी आधारित प्रॉक्सी का उपयोग करते हैं proxychains, या सर्वर ICMP प्रतिध्वनि की अनुमति नहीं देता है , तो यह बुरी सूचना का संकेत दे सकता है ।
Host auto.internal-server
Hostname {internal-server ip or domain}
ProxyCommand bash -c '(ping %h &>/dev/null) && nc %h %p || ssh -W %h:%p external-server'
आप किसी (timeout 0.1 nc -z %h %p)भी चीज़ से प्रतिस्थापित कर सकते हैं जो पता लगाता है कि आप आंतरिक-सर्वर में हैं या नहीं।
यदि आपके पास कई उम्मीदवार IP हैं, तो भी आप इसका उपयोग कर सकते हैं:
Host auto.internal-server
Hostname {internal-server ip or domain}
ProxyCommand bash -c 'f(){(timeout 0.1 ping -c 1 $1 &>/dev/null) && nc $1 %p;}; f 1.1.1.1 || f 2.2.2.2 || f 3.3.3.3'
यह कनेक्ट करने का प्रयास करेगा 1.1.1.1, यदि असफल होने पर कनेक्ट करने का प्रयास करें 2.2.2.2, और फिर 3.3.3.3।