पीएससीपी का उपयोग यूनिक्स मशीन से विंडोज मशीन में फाइल कॉपी करने के लिए कैसे करें जहां लक्ष्य पथ में रिक्त स्थान हैं?


14

मुझे एक यूनिक्स मशीन से विंडोज मशीन में फाइल कॉपी करने के लिए C # प्रोग्राम में PSCP का उपयोग करने में समस्या हो रही है। समस्या केवल तब होती है जब विंडोज मशीन पर लक्ष्य फ़ोल्डर में एक स्थान होता है। उदाहरण के लिए, निम्नलिखित कार्य ठीक है: (नोट: आईपी पते और पासवर्ड को इस उदाहरण के लिए बदल दिया गया है)

pscp.exe -pw MyPassword root@127.0.0.1:/etc/myfolder/myfile.opt C:\download

लेकिन जब मैं इसे इसे बदलता हूं:

pscp.exe -pw MyPassword root@127.0.0.1:/etc/myfolder/myfile.opt C:\download files

मुझे निम्न त्रुटि मिलती है: एक से अधिक दूरस्थ स्रोत समर्थित नहीं हैं।

मुझे लगता है कि क्योंकि PSCP एक और लक्ष्य के रूप में अंतरिक्ष inteprets है। लेकिन मैं यह कैसे कर सकता हूं? मैंने सभी तरह की चीजों की कोशिश की है जैसे कि इसे उद्धरणों में रखना और अंतरिक्ष से बचना। मैंने निम्नलिखित सभी काम किए हैं और कुछ भी काम नहीं करता है:

pscp.exe -pw MyPassword root@127.0.0.1:/etc/myfolder/myfile.opt "C:\download files"
pscp.exe -pw MyPassword root@127.0.0.1:/etc/myfolder/myfile.opt C:\"download files"
pscp.exe -pw MyPassword root@127.0.0.1:/etc/myfolder/myfile.opt C:\download\\ files

कोई विचार?

जवाबों:


18

हालाँकि उचित उत्तर शायद WinSCP और उनके C # लाइब्रेरी का उपयोग करना है, लेकिन मुझे PSCP को काम करने का एक तरीका मिला जब लक्ष्य फ़ोल्डर में एक जगह होती है।

इसका सही उत्तर यह है:

pscp.exe -pw MyPassword root@127.0.0.1:/etc/myfolder/myfile.opt "C:\download files"

यह पता चला है कि मुझे एक और समस्या हो रही थी जिससे मुझे लगता है कि ऊपर काम नहीं कर रहा था। मूल रूप से मैं PSCP.EXE निष्पादन योग्य के लिए पूर्ण पथ का उपयोग कर रहा था। पूर्ण पथ में रिक्त स्थान शामिल थे। तो मैं निम्नलिखित करने की कोशिश कर रहा था:

"C:\My PSCP Folder\pscp.exe" -pw MyPassword root@127.0.0.1:/etc/myfolder/myfile.opt "C:\download files"

और मैं कॉल करने की कोशिश कर रहा था कि C # से Process.Start () का उपयोग कर रहा था और यह विफल हो रहा था। ऐसा लग रहा था कि यह पीएससीपी पथ या लक्ष्य पथ में एक जगह है, लेकिन दोनों नहीं तो इसे संभाल सकता है। मैंने तय किया कि अपने Windows पर्यावरण चर में PSCP निष्पादन योग्य के लिए पथ को शामिल करके। अब मैं सिर्फ PSCP.EXE को कॉल करने में सक्षम हूं और यह लक्ष्य फ़ोल्डर के आसपास के उद्धरणों के साथ काम करता है।


10

उपयोग न करें pscp

WinSCP ग्राहक (जो पुट्टी के शीर्ष पर बनाया गया है) एक प्रदान करता है नेट विधानसभा । यहाँ एक उदाहरण है


खैर मैंने उस पर ध्यान दिया और मैं एक अलग समस्या में भाग गया। जाहिरा तौर पर WinSCP को SSH होस्ट कुंजी (जो मेरे पास नहीं है) की आवश्यकता होती है। जब मैं पीएससीपी का उपयोग कर रहा था तो होस्ट कुंजी की स्वीकृति को स्वचालित करने का एक तरीका था। लेकिन WinSCP C # डॉक्यूमेंटेशन को पढ़ने में जो मैं बता सकता हूं, उससे यह प्रतीत नहीं होता है कि मेजबान कुंजी को स्वचालित रूप से स्वीकार करने का कोई तरीका है। कोई विचार?
कोरी बर्नेट

1
@CoreyBurnett: क्या आप हमेशा एक ही सर्वर से जुड़ रहे हैं?
user1686

मैं एक एप्लिकेशन बना रहा हूं जो विंडोज मशीन पर इंस्टॉल किया जाएगा और संभावित रूप से कई अलग-अलग लिनक्स सर्वरों से कनेक्ट होगा। जब मैं PSCP का उपयोग कर रहा था तो मुझे कमांड लाइन को स्वचालित रूप से होस्ट कुंजी को स्वीकार करने का एक तरीका मिला। इस तरह मुझे यह जानने की जरूरत नहीं थी कि मेजबान कुंजी समय से पहले क्या थी। हालाँकि मुझे C # और WinSCP का उपयोग करके वह विकल्प नहीं मिल रहा है।
कोरी बर्नेट

व्यक्तिगत रूप से, मैं इसे एक गंभीर सुरक्षा समस्या पर विचार करूंगा यदि कोई SSH क्लाइंट बिना सत्यापन या उपयोगकर्ता की पुष्टि के मेजबान कुंजी स्वीकार कर रहा था।
user1686

मैं सहमत हूँ। हालाँकि यह एक बहुत ही विशिष्ट स्थिति है जहाँ हम एक ऐसे अनुप्रयोग का निर्माण कर रहे हैं जिसे एक लैपटॉप पर स्थापित किया जाएगा और फिर उस लैपटॉप को नियंत्रित वातावरण में एक यूनिक्स बॉक्स से जोड़ा जाएगा। यह सेटअप ग्राहकों को बेचा जाएगा। यह इंटरनेट से भी जुड़ा नहीं है। मैं बस इसे स्थापित करने और उपयोग करने के लिए सरल बनाने की कोशिश कर रहा हूं ताकि एप्लिकेशन के ऑपरेटर को होस्ट कुंजी सामान के बारे में जानने या चिंता करने की आवश्यकता न हो। यह सिर्फ काम करना चाहिए।
कोरी बर्नेट

1

गंतव्य फ़ोल्डर में एक अवधि जोड़ें। निम्नलिखित को संलग्न के साथ काम करना चाहिए अपने उदाहरण पर:

"C:\My PSCP Folder\pscp.exe" -pw MyPassword root@127.0.0.1:/etc/myfolder/myfile.opt "C:\download files\."

0
pscp.exe -pw MyPassword root@127.0.0.1:/etc/myfolder/myfile.opt "C:\download files"

अच्छी तरह से पहले, जैसा कि आप पहले ही उल्लेख कर चुके हैं, आपके पास आपके रास्ते में स्थान हैं। इसलिए उद्धरण "C: \ डाउनलोड फ़ाइलों" का उपयोग करना बुद्धिमान होगा। दूसरा जैसा कि आपने पहले ही बताया था कि बिना किसी अजीब रास्ते के pscp को कॉल करने के लिए आपको अपना आवेदन अपने PATH में जोड़ना होगा। और तीसरा। नामकरण सम्मेलनों का उपयोग करें जो सब कुछ उद्धृत करने के कारण इस गंदगी को रोकते हैं।

camelCaseNaming
underscore_naming

दोनों समस्या को हल करते हैं, और आप 100500 बार कूलर लगते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.