2011-11-07 17 views
8

मेरे पास बाहरी प्रक्रियाओं के साथ शुरू करने और संवाद करने के लिए उपयोग की जाने वाली सी ++ कक्षा है (कुछ हद तक क्यूटी के क्यूप्रोसेस के समान है - हम क्यूटी का उपयोग नहीं कर सकते क्योंकि हम एक छोटे एम्बेडेड सिस्टम पर काम कर रहे हैं)। यह माता-पिता और बाल प्रक्रिया के बीच एक लिंक स्थापित करने के लिए पाइप और डुप्ली 2 सिस्टम कॉल का उपयोग करता है। समस्या यह है - यह एसएसएच, एसपीपी और पासवर्ड की अपेक्षा रखने वाले अन्य प्रोग्राम के साथ काम नहीं करता है। मैंने एसएसएच को दबा दिया है और ऐसा लगता है कि यह/dev/tty खुलता है और किसी भी तरह कमांड लाइन से पासवर्ड पढ़ने के लिए इसका उपयोग करता है। क्या मेरी कक्षा से पासवर्ड इनपुट करने का कोई तरीका है या यह पता लगाने के लिए कि कोई एप्लाइजेशन stdin की तुलना में किसी अन्य स्रोत से इनपुट की अपेक्षा करता है (बिल्कुल पोर्टेबल नहीं होना चाहिए)?मैं सी ++ में एसएसएच के लिए पासवर्ड कैसे पाइप करूं?

+10

आप पासवर्ड नहीं भेजना चाहते हैं। आप क्या करना चाहते हैं ~/.ssh निर्देशिका –

+0

में अपनी निजी कुंजी को पढ़ने और उपयोग करने के लिए एसएसएच प्राप्त करें सार्वजनिक कुंजी प्रमाणीकरण का उपयोग करें या askpass और ssh-agent – sehe

+0

देखें [sshpass] (http://sourceforge.net/परियोजनाओं/sshpass /) – ephemient

उत्तर

7

एसएसएच कार्यक्रमों के लिए टर्मिनलों से सीधे पासवर्ड पढ़ने के लिए यह सामान्य प्रथा है। आपको इस छद्म टर्मिनल को आवंटित करने और इस छद्म टर्मिनल के भीतर इस I/O को कैप्चर करने के लिए ssh निष्पादित करने की आवश्यकता है। पीटीआई मैन पेज (सेक्शन 7,) एक अच्छा परिचय है।

मैं फिर से यह बताना चाहता हूं कि आप आमतौर पर एसएसएच को पासवर्ड नहीं देना चाहते हैं, तो कई बेहतर प्रमाणीकरण विकल्प हैं। उन प्रक्रियाओं के लिए सार्वजनिक-कुंजी प्रमाणीकरण का उपयोग करें जो उपयोगकर्ता इनपुट के बिना चलाना चाहिए और चला सकते हैं।

+0

+1 सार्वजनिक कुंजी सुझाव के लिए +1। कुछ और प्रोग्राम प्रोग्राम (खराब) में सादे टेक्स्ट पासवर्ड रखेगा। – jedwards

+0

आप शायद सुरक्षा त्रुटियों के बारे में सही हैं, लेकिन मैं सिर्फ यह पुस्तकालय चाहता हूं कि मैं लिखने के रूप में लचीला होने के लिए लिख रहा हूं। यह अंतिम उपयोगकर्ता तक होगा यदि वह एसएसएच चीजों को उचित तरीके से करने वाला है या नहीं। – Zbigh1

2

कुछ प्रोग्राम ढूंढें जो पहले से ही ऐसा करते हैं, उदाहरण के लिए lftp।

या इस पर्ल एक लाइनर strace आपको क्या करना चाहिए की एक विचार प्राप्त करने के लिए:

perl -MNet::OpenSSH -e 'Net::OpenSSH->new(localhost, password => foo)' 

यह ज्यादातर, गुरु की प्रक्रिया पर एक छद्म tty जोड़ी आवंटन forking और के गुलाम भाग की स्थापना करने के लिए कम कर देता है एसएसएच निष्पादित करने से पहले वर्तमान टीटी के रूप में बच्चे पर पीटीआई।

संबंधित मुद्दे

 संबंधित मुद्दे