2011-09-27 10 views
11

मैं एक स्क्रिप्ट फ़ाइल को प्रोग्राम के बनाने रहा हूँ और psftp.exe फोन मूल्य पारित करने के लिए:कैसे इस प्रकार PSFTP को शीघ्र

psftp [email protected] -pw password -b psftpscript.txt 

लेकिन यह उपयोगकर्ता इनपुट के लिए संकेत देता है

सर्वर का होस्ट कुंजी में कैश नहीं है रजिस्ट्री आपके पास गारंटी नहीं है कि सर्वर वह कंप्यूटर है जिसे आप सोचते हैं। सर्वर का आरएसए 2 कुंजी फिंगरप्रिंट है: [ssh-rsa 1024 somekey] यदि आप इस होस्ट पर भरोसा करते हैं, तो पुटी के कैश में कुंजी जोड़ने के लिए "y" दर्ज करें और कनेक्टिंग पर जाएं। यदि आप केवल एक बार कनेक्ट करना चाहते हैं, बिना कैश की कुंजी जोड़कर, "n" दर्ज करें। यदि आप इस होस्ट पर भरोसा नहीं करते हैं, तो कनेक्शन छोड़ने के लिए प्रेस रिटर्न दबाएं। कैश में स्टोर कुंजी? (वाई/एन)

मुझे इसे पूरी तरह से नि: शुल्क, स्वचालित रूप से त्वरित होने की आवश्यकता है। मैंने कोशिश की- बैच पैरामीटर लेकिन यह सिर्फ

उत्तर

-2

पर छोड़ देता है, मैंने प्रॉम्प्ट पर 'y' दर्ज करके कैश करने के लिए कुंजी जोड़ना समाप्त कर दिया। मुझे इसे केवल एक बार करना था, और उसके बाद कोई और संकेत नहीं था, यह अच्छा काम करता है।

+1

-1: इस पूरी तरह से स्वचालित नहीं है: शीघ्र पहली बार कनेक्शन खुला दिखाया गया है। अगर कोई कैश साफ़ करने के लिए होता है, तो आपका प्रोग्राम टूट जाएगा। ऐसा नहीं होने पर निर्भर बुरा है! – ya23

3

आप युक्त इनपुट के रूप में एक फ़ाइल बना सकते हैं बस ay और गाड़ी वापसी तो इस तरह के एक सरल समाधान के लिए http://www.sqlservercentral.com/Forums/Topic281954-9-1.aspx से जेम्स को चलाने

psftp [email protected] -pw password -b psftpscript.txt < filename.txt 

धन्यवाद

+0

सुरक्षा परिणामों की व्याख्या किए बिना किसी एसएसएच सर्वर की मेजबान कुंजी को अंधाधुंध रूप से स्वीकार करने का सुझाव न दें! ऐसा करने से आप [एमआईटीएम हमलों] (https://en.wikipedia.org/wiki/Man-in-the-middle_attack) के खिलाफ सुरक्षा खो देते हैं। –

2

नेट में, मैंने पाया कि उपरोक्त विधि काफी उम्मीद नहीं की थी। चाल का उपयोग नेट के अंतर्निर्मित इनपुट पुनर्निर्देशन का उपयोग करना था - और < ऑपरेटर नहीं। यहाँ कोड अब कैसा दिखता है:

System.Diagnostics.Process proc = new System.Diagnostics.Process(); 
proc.EnableRaisingEvents = false; 
proc.StartInfo.FileName = "c:\\psftp.exe"; 
proc.StartInfo.UseShellExecute = false; 
proc.StartInfo.RedirectStandardInput = true;    
proc.StartInfo.Arguments = strIP + " -v -l " + strUsername + " -pw " + strPassword + " -b " + strBatchFilename;    
proc.Start(); 
StreamWriter myStreamWriter = proc.StandardInput; 
myStreamWriter.WriteLine("Y\n"); //override the public key question <--- 
myStreamWriter.Close(); 
proc.WaitForExit(); 
proc.Close(); 
+0

+1: अच्छा जवाब, .NET को बाध्य, लेकिन उपयोगी। – ya23

+0

सुरक्षा परिणामों की व्याख्या किए बिना किसी भी एसएसएच सर्वर की मेजबान कुंजी को अंधाधुंध रूप से स्वीकार करने का सुझाव न दें! ऐसा करने से आप [एमआईटीएम हमलों] (https://en.wikipedia.org/wiki/Man-in-the-middle_attack) के खिलाफ सुरक्षा खो देते हैं। –

+0

@ मार्टिनप्रिक्रील - जबकि आप इस बारे में पूरी तरह से सही हैं, तो क्या आपकी टिप्पणी इस प्रश्न में नहीं होनी चाहिए? यह वही नहीं है जो पूछने वाले ने पूछा था? – FuzzyAmi

21

मैं पर्यावरण की तरह विंडोज सर्वर 2008 के 'सैंडबॉक्स' में एक पहुंच से बाहर स्क्रिप्ट चलाने के साथ एक ही समस्या थी।

echo y | psftp [email protected] -l username -pw password -b psftpscript.txt 

आशा इस मदद करता है: मैं जिसके बाद में प्रवेश करती है आप के लिए प्रॉम्प्ट पर y चल रहा समाप्त हो गया!

नोट: मुझे केवल एक बार इको वाई चलाने और दूसरे रन के लिए इसे हटाने के लिए कुंजी को कैश करने के लिए नहीं कहा गया था।

+13

नोट: यदि आप इसके बजाय 'n' गूंजते हैं तो आपको अधिक संगत व्यवहार मिलेगा। आप अभी भी कनेक्शन के साथ जारी रहेगा, लेकिन कुंजी कैश नहीं किया जाएगा। यह आपको हर बार इसके लिए पूछेगा। –

+2

उपयोगकर्ता इंटरैक्शन के बिना एक निर्बाध फ़ाइल अपलोड की उम्मीद के रूप में काम करता है। एक बार एक कुंजी स्वीकार करने के बाद भी मैंने मैन्युअल रूप से परीक्षण किया। स्क्रिप्ट फ़ाइल "echo n | psftp.exe ..." अभी भी काम करता है। – Whome

+0

मेरे लिए काम नहीं किया गया है यदि मेरे पास psftp पर कॉल से पहले बैच (.bat) फ़ाइल में echo कमांड है। मैं कमांड प्रॉम्प्ट से .bat चलाता हूं। – VISQL

0

मुझे लगता है कि आपकी कमांड लाइन में कोई समस्या है।

Usage: psftp [options] [[email protected]]host 

प्रयास करें:

psftp -pw password -b psftpscript.txt [email protected] 
0

यह सीधे आपके प्रश्न का उत्तर नहीं है, लेकिन एक संभावित समाधान प्रदान करता है:

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

आपकी आवश्यकता को देखते हुए, जो कहा गया है उससे परे, यह काम कर सकता है या नहीं भी हो सकता है। मैं एक ही समस्या के साथ इस प्रश्न पर आया और मैंने जिस दृष्टिकोण का वर्णन किया है उसका उपयोग करके इसे हल कर लिया।

8

जब आप इसे पहली बार चलाते हैं, तो यह आपको सर्वर के लिए अपनी कुंजी दिखाएगा। कॉपी कुंजी और फिर अपने कमांड लाइन पर, इस तरह आपके मेजबान कुंजी निर्दिष्ट: \

psftp yourhostAddress -hostkey 06:15:d4:3b:e4:e8:23:c0:d6:6d:45:47:7e:bd:8d:74 -l yourusername -pw yourpassword -batch

+0

'-hostkey' मान्य param नहीं है। और यह '-i' के साथ काम नहीं करता है, फिर भी y/n इनपुट के लिए पूछता है। – niksofteng

+0

@ निखिलवर्तक होस्टकी 2014 में पुट्टी में जोड़ा गया था। आप किस प्रकार का पुटी चल रहे हैं? –

1

मैं इस समस्या है जहाँ मैं हटाने की अनुमति नहीं किया था दूरस्थ सर्वर और अधिक फ़ाइल का नाम बदलें फाइलों में समय टिकट शामिल है। तो मुझे नाम से फ़ाइलों को डाउनलोड करने की आवश्यकता है। psftp पैराम स्वीकार नहीं कर सकता (या किसी भी तरह से मुझे पता था) और मैं वर्तमान तारीख के अनुसार फ़ाइल नामों को गतिशील रूप से बदल नहीं सका।

तो, बैच फ़ाइल से जो मैं psftp कमांड को बुला रहा हूं, मैंने गतिशील रूप से और प्रासंगिक समय टिकट के साथ फ़ाइल के साथ आदेश बनाए। मैं केवल आज की फाइलों की प्रतिलिपि बना सकता हूं जो हर समय बेहतर है, फिर हर बार कॉपी करें।

cd "C:\CX\FTP\IG\Files" 
echo cd outbound > C:\SFTP\temp.txt 
echo mget file_%date:~10,4%%date:~4,2%%date:~7,2%*.csv >> C:\SFTP\temp.txt 
echo quit >> C:\SFTP\temp.txt 
echo close >> C:\SFTP\temp.txt 
C:\SFTP\psftp [email protected] -b C:\SFTP\temp.txt 
close 
exit 

"गूंज सीडी आउटबाउंड> C: \ SFTP \ temp.txt" पुरानी फाइल साफ किया और नई फ़ाइल की सामग्री लेखन शुरू। "echo mget file_% दिनांक: ~ 10,4 %% दिनांक: ~ 4,2 %% दिनांक: ~ 7,2% .csv >> सी: \ SFTP \ temp.txt" परिणामस्वरूप कमांड बनाने में परिणाम : "mget file_20151008 .csv" जो "file_20151008 ..." से शुरू होने वाली सभी फ़ाइलों को डाउनलोड करता है, अगली 2 पंक्तियों ने अभी कार्रवाई और रेखा को समाप्त कर दिया है "सी: \ एसएफटीपी \ psftp [email protected] -b सी: \ SFTP \ temp.txt "इसे निष्पादित करें।

के रूप में परिणाम temp.txt इस तरह दिखता है:

cd outbound 
mget file_20151008*.csv 
quit 
close 
संबंधित मुद्दे