@ उत्तर के लिए धन्यवाद , इसने मुझे बहुत प्रेरित किया।
मैंने पाया कि आप अपने कनेक्शन को जबरन रीडायरेक्ट कर सकते हैं 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
।