मुझे लगता है कि आपके उदाहरण के साथ समस्या अंतिम तर्क है; आप कर रहे हैं ssh
, बी के लिए ing जब आप लिस्टिंग किया जाना चाहिए "अंतिम गंतव्य" , बंदरगाह-अग्रेषित होस्ट / पोर्ट, जो बंदरगाह 10000 है यद्यपि, लेकिन होना चाहिए localhost
, नहीं B
, के रूप में B
के नजरिए से हल हो गई है A
, और बंदरगाह 10000 पर B
है शायद बाहरी रूप से नहीं खुला । जैसे, सुधारा गया:
ssh -ti key_file_for_C_on_A -l user_on_C -o "ProxyCommand ssh -ti key_file_for_B_on_A -W %h:%p user_on_B@B" -p 10000 localhost
इसे अपने आप को साबित करने के लिए, मैं एक ही प्रयोग सेट करता हूं, यद्यपि मेरे उपयोगकर्ता नाम सभी होस्ट पर समान हैं, और मैं एजेंट अग्रेषण का उपयोग कर रहा हूं; ध्यान दें कि मेरे hophost
(आपके B
) एक गैर-मानक बंदरगाह, 2222 पर ssh स्वीकार करता है।
C पर:
ssh -fNAR 12345:localhost:22 hophost -p 2222
फिर ए पर:
ssh -A localhost -p 12345 -o "ProxyCommand ssh -A hophost -p 2222 nc %h %p"
वैकल्पिक रूप से, आप अपने .ssh/config
ए पर इस का एक गुच्छा सांकेतिक शब्दों में बदलना कर सकते हैं :
Host C
HostName localhost
Port 12345
ForwardAgent yes
#ProxyCommand ssh -A hophost -p 2222 nc %h %p
ProxyCommand ssh -A hophost -p 2222 -W %h:%p
#ProxyCommand $HOME/.ssh/proxy -w 2 -h hophost:2222 %h %p
तब ए पर आपकी आज्ञा बस है
ssh C
नोट I में दो वैकल्पिक ProxyCommand
संस्करण भी शामिल हैं । पहले का उपयोग करता nc
मामले में अपने ssh
संस्करण 5.3, जब से अधिक पुराना है -W
विकल्प जोड़ा गया है। दूसरे ने एक प्रॉक्सी स्क्रिप्ट का उपयोग किया है जिसका उपयोग मैंने लंबे समय से दोनों मेजबानों के माध्यम से किया है (जैसे इस उदाहरण में) और corkscrew
फायरवॉल से बाहर निकलने के लिए उपयोग करें जो आउटबाउंड को ब्लॉक करते हैं ssh
। आप ssh-proxy
मेरे गितुब पर स्क्रिप्ट देख सकते हैं । ~/.ssh/config
जब आप Host *
प्रविष्टियों के लिए प्रॉक्सी का उपयोग करना चाहते हैं तो यह प्रविष्टियों को सरल करता है, लेकिन मैं यह वादा नहीं करता कि यह हमेशा सभी स्थितियों में काम करता है, जैसा कि मैंने इसे समय के साथ संशोधित किया है क्योंकि मुझे विभिन्न स्थितियों के लिए आवश्यक है, इसलिए विकल्पों में से कोई भी नाजुक हो सकता है या पर्दाफाश हो सकता है, लेकिन यह मदद कर सकता है।