स्क्रिप्ट के माध्यम से sftp कनेक्शन में निष्पादित कमांड


13

यह एक बहुत ही बुनियादी सवाल है मैं बस कोसने के लिए काफी नया हूं और यह पता नहीं लगा सका कि यह कैसे करना है। दुर्भाग्य से गुगली मुझे कहीं नहीं मिली।

मेरा लक्ष्य एक सर्वर से sftp से जुड़ना, एक फ़ाइल अपलोड करना और फिर डिस्कनेक्ट करना है।

मेरे पास निम्न स्क्रिप्ट है:

UpdateJar.sh

#!/bin/bash

sftp -oPort=23 kalenpw@184.155.136.254:/home/kalenpw/TestWorld/plugins
#Change directory on server
#cd /home/kalenpw/TestWorld/plugins

#Upload file
put /home/kalenpw/.m2/repository/com/Khalidor/TestPlugin/0.0.1-SNAPSHOT/TestPlugin-0.0.1-SNAPSHOT.jar

exit

मुद्दा यह है, यह स्क्रिप्ट एक sftp कनेक्शन स्थापित करेगा और फिर कुछ भी नहीं करेगा। एक बार जब मैं मैन्युअल रूप से कनेक्शन से बाहर निकलता हूं तो यह पुट कमांड को निष्पादित करने की कोशिश करता है लेकिन क्योंकि sftp सत्र को बंद कर दिया गया है, यह सिर्फ पुट कहता है: कमांड पाया गया।

मैं इसे ठीक से काम करने के लिए कैसे प्राप्त कर सकता हूं?

धन्यवाद


जवाबों:


15

आप अपने स्क्रिप्ट को यहां दस्तावेज़ में आदेश पारित करने के लिए बदल सकते हैं, उदाहरण के लिए,

#!/bin/bash

sftp -oPort=23 kalenpw@184.155.136.254:/home/kalenpw/TestWorld/plugins <<EOF
put /home/kalenpw/.m2/repository/com/Khalidor/TestPlugin/0.0.1-SNAPSHOT/TestPlugin-0.0.1-SNAPSHOT.jar   
exit
EOF

<<नाम के बाद का मार्कर ( EOF) स्क्रिप्ट को निम्नलिखित पंक्तियों को पास करने के लिए कहता है जब तक कि लाइन की शुरुआत में नाम नहीं मिलता है (खुद से)।


बहुत बढ़िया जो मुझे चाहिए था। मुझे यहाँ दस्तावेजों पर पढ़ना होगा। त्वरित उत्तर के लिए धन्यवाद, मैं इसे 8 मिनट में स्वीकार करूंगा।
कालेंपव

कोई समस्या नहीं है (मैंने एक डुप्लिकेट के लिए एक नज़र ली, लेकिन केवल एक को "अस्पष्ट" के रूप में बंद पाया)।
थॉमस डिकी

क्या आप सुनिश्चित हैं कि सर्वर शेल-स्क्रिप्ट की टिप्पणियों पर चोक नहीं करेगा?
alk

इसके अलावा यह दृष्टिकोण शेल के प्रकार पर निर्भर करता है।
alk

@alk स्क्रिप्ट टिप्पणियों के साथ और बिना काम करती है
kalenpw

5

आप scpइसके बजाय उपयोग करना पसंद कर सकते हैं sftpscpसामान्य cpकमांड जैसा व्यवहार करता है, लेकिन फ़ाइलें दूरस्थ हो सकती हैं:

scp -P 23 /home/kalenpw/.m2/repository/com/Khalidor/TestPlugin/0.0.1-SNAPSHOT/TestPlugin-0.0.1-SNAPSHOT.jar kalenpw@184.155.136.254:/home/kalenpw/TestWorld/plugins

यह आपको पुराने मशीन पर एक निर्देशिका में दूरस्थ मशीन पर फ़ाइल को पुराने स्कूल के ftp- शैली कमांड इंटरफ़ेस का उपयोग किए बिना कॉपी करता है।

ssh, scp, और sftpसेवाएं आम तौर पर उपलब्ध है, तो उनमें से किसी को कर रहे हैं कर रहे हैं; एक ही डेमन प्रोग्राम उन सभी को एक साथ प्रदान करता है। सिद्धांत रूप में सर्वर का प्रशासक उनमें से किसी को भी अक्षम करने का विकल्प चुन सकता है, लेकिन व्यवहार में यह काफी दुर्लभ है।


पहले से ही scp के बारे में नहीं पता था कि यह बहुत उपयोगी है। और आप सही थे scpपहले से ही मेरी मशीन पर उपलब्ध है
kalenpw

4

आप किसी फ़ाइल को इंगित -bकरने के sftpलिए कमांड के विकल्प का उपयोग भी कर सकते हैं sftp

उदाहरण के लिए, आप फ़ाइल में अपनी सारी कमांड डाल सकते हैं sftp_commands.txt:

cd /home/kalenpw/TestWorld/plugins
put /home/kalenpw/.m2/repository/com/Khalidor/TestPlugin/0.0.1-SNAPSHOT/TestPlugin-0.0.1-SNAPSHOT.jar
exit

और निम्नानुसार चलाएं sftp:

sftp -oPort=23 -b sftp_commands.txt kalenpw@184.155.136.254:/home/kalenpw/TestWorld/plugins 

या यदि आप फ़ाइल का उपयोग नहीं करना चाहते हैं, तो आप STDIN के माध्यम से भी आदेश पारित कर सकते हैं।

से man sftp:

-बी बैचफाइल

बैच मोड स्टड के बजाय एक इनपुट बैचफाइल से कमांड की एक श्रृंखला पढ़ता है। चूंकि इसमें उपयोगकर्ता सहभागिता का अभाव है इसलिए इसे गैर-संवादात्मक प्रमाणीकरण के साथ संयोजन में उपयोग किया जाना चाहिए। मानक इनपुट को इंगित करने के लिए '-' का एक बैचफाइल इस्तेमाल किया जा सकता है। sftp निरस्त कर देगा यदि निम्न में से कोई भी आदेश विफल हो: get, put, reget, rename, ln, rm, mddir, chdir, ls, lchdir, chmod, chown, chgrp, lpwd, df, symlink, और lmkdir। '' - 'वर्ण (उदाहरण के लिए, -rm / tmp / blah *) के साथ कमांड को ठीक करके कमांड के आधार पर त्रुटि पर समाप्ति को दबाया जा सकता है।


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