टर्मिनल से सिंगल लाइन sftp


92

दिन भर में कई बार, मैं एक परीक्षण चला सकता हूं, जहां मुझे रिमोट सर्वर पर लॉग फाइल के माध्यम से देखना होगा। मैंने अपने टर्मिनल का उपयोग sftpरिमोट सर्वर में करने के लिए किया है और /tmpअपनी स्थानीय मशीन पर वांछित लॉग फ़ाइल को नीचे खींचने के लिए उपयोग किया है ।

मैं आज man sftpमूल रूप से एक पंक्ति में निम्नलिखित आदेशों को चलाने का एक तरीका जानने के प्रयास में विकल्पों के माध्यम से देख रहा था ताकि मुझे एक कमांड टाइप न करना पड़े, प्रेस दर्ज करना, एक कमांड प्रेस दर्ज करना, आदि।

(मैं अभी क्या करता हूं)

sftp myuser@myserver
--mypassword at prompt
lcd /tmp
get /dir/dir/dir/dir/file
quit

मैं man sftpएक संदर्भ के माध्यम से देख scpरहा था, जिसे मैंने पहले इस्तेमाल नहीं किया था। मुझे लगता है कि यह वही हो सकता है जिसकी मैं तलाश कर रहा हूं, लेकिन मुझे यह निर्दिष्ट करने का कोई तरीका नहीं था कि मैं कहाँ जाने के लिए सुरक्षित रूप से कॉपी की गई फ़ाइल चाहता था।

क्या कोई मुझे /dir/fileदूरस्थ सर्वर से प्राप्त करने का कोई तरीका प्रदान कर सकता है और क्या इसे डाउनलोड करना है /tmp/file_plus-my-description?

मैं एक नियमित रूप से कॉपी करने के लिए एक sftp या scp कमांड चलाने में सक्षम होने की उम्मीद कर रहा था जैसे:

scp myuser@myserver /dir/file /tmp/file_plus-my-description

मैं Terminalमैक ओएस एक्स 10.8 में बिल्ट का उपयोग कर रहा हूं । धन्यवाद।

जवाबों:


204

अद्यतन सितम्बर 2017 - tl; डॉ

एक दूरस्थ ftp सर्वर से अपनी मशीन में एक एकल फ़ाइल डाउनलोड करें:

sftp {user}@{host}:{remoteFileName} {localFileName}

अपनी मशीन से दूरस्थ ftp सर्वर पर एकल फ़ाइल अपलोड करें:

sftp {user}@{host}:{remote_dir} <<< $'put {local_file_path}'

मूल उत्तर:

ठीक है, इसलिए मैं थोड़ा गूंगा महसूस करता हूं। लेकिन मैंने इसका पता लगा लिया। मैं लगभग इसके साथ शीर्ष पर था:

sftp user@host remoteFile localFile

टर्मिनल में दिखाया गया एकमात्र दस्तावेज यह है:

sftp [user@]host[:file ...]
sftp [user@]host[:dir[/]]

हालाँकि, मैं इस साइट पर आया था जो सारांश के तहत निम्नलिखित दिखाता है:

sftp [-vC1 ] [-b batchfile ] [-o ssh_option ] [-s subsystem | sftp_server ] [-B buffer_size ] [-F ssh_config ] [-P sftp_server path ] [-R num_requests ] [-S program ] host 
sftp [[user@]host[:file [file]]] 
sftp [[user@]host[:dir[/]]]

तो इसका सीधा सा जवाब है कि आप :अपने यूजर और होस्ट के बाद ही रिमोट फाइल और लोकल फाइलनाम करें। अविश्वसनीय रूप से सरल!

सिंगल लाइन, sftp कॉपी रिमोट फाइल:

sftp username@hostname:remoteFileName localFileName
sftp kyle@kylesserver:/tmp/myLogFile.log /tmp/fileNameToUseLocally.log

फरवरी 2016 को अपडेट करें

मामले में किसी को भी इसके विपरीत करने के लिए कमांड की तलाश है और अपने स्थानीय कंप्यूटर से एक सिंगल लाइन कमांड में एक रिमोट सर्वर के लिए एक फ़ाइल पुशsftp करें, उपयोगकर्ता @Thariama नीचे दिए गए समाधान को पोस्ट किया। अतिरिक्त कोड के लिए उन्हें टिप दें।

sftp {user}@{host}:{remote_dir} <<< $'put {local_file_path}'

20
मैं दूसरे तरीके से (दूरस्थ सर्वर पर प्रतिलिपि) पूछ रहा था, लेकिन मैंने इसे स्वयं पाया: sftp {user} @ {host}: {dir} <<< $ 'put {path to file}'
Thariama

2
मेरी माफी, गलत समझा। यदि कोई भविष्य में किसी की मदद कर सकता है, तो मैं आपकी प्रतिक्रिया का जवाब दूंगा। साभार @Thariama
काइल

1
हमारे लिए TL: DR -types, यह पहली बार
रोली गई

1
@ काइल, बहुत बेहतर!
स्कोल

1
मुझे यह विचित्र लगता है कि sftp में किसी एक कमांड में फाइल अपलोड करने का विकल्प शामिल नहीं है। यह ठीक काम करता है, लेकिन इस तरह के एक सरल ऑपरेशन के लिए यह बहुत अधिक हैक है। यह अभी भी एकमात्र चीज है जो मैं पा सकता हूं कि वास्तव में बॉक्स से बाहर काम करता है, इसलिए धन्यवाद। :)
Teekin 13

7

एक फ़ाइल को UPLOAD करने के लिए, आपको एक बैश स्क्रिप्ट बनानी होगी। यदि आपने sshpassस्थापित किया है, तो ओएस एक्स पर निम्नलिखित कुछ काम करना चाहिए ।

उपयोग:

sftpx <password> <user@hostname> <localfile> <remotefile>

इस लिपि को अपने मार्ग में कहीं रख दो और पुकारो sftpx:

#!/bin/bash

export RND=`cat /dev/urandom | env LC_CTYPE=C tr -cd 'a-f0-9' | head -c 32`
export TMPDIR=/tmp/$RND
export FILENAME=$(basename "$4")
export DSTDIR=$(dirname "$4")

mkdir $TMPDIR
cp "$3" $TMPDIR/$FILENAME

export SSHPASS=$1
sshpass -e sftp -oBatchMode=no -b - $2 << !
   lcd $TMPDIR
   cd $DSTDIR
   put $FILENAME
   bye
!

rm $TMPDIR/$FILENAME
rmdir $TMPDIR

उत्तर के लिए धन्यवाद, हालाँकि, मैंने जो उत्तर दिया था, वह दूरस्थ सर्वर से फ़ाइल प्राप्त करने के लिए sftp के साथ सिंगल लाइन कमांड का उपयोग करेगा और फ़ाइल को आपके स्थानीय मशीन पर एक विशिष्ट स्थान पर बचाएगा। मैंने सत्यापित किया है कि यह OS X पर केवल sftp के साथ काम करेगा।
काइल

2
हां, रिमोट से लोकल में ट्रांसफर के लिए यह निश्चित रूप से सबसे अच्छा जवाब है। हालाँकि मैं इसके विपरीत करने के लिए एक समाधान जोड़ूंगा: स्थानीय से दूरस्थ। बस के मामले में यह किसी के लिए उपयोगी है। धन्यवाद!
संवत्

3

sftp बैच फ़ाइलों का समर्थन करता है।

आदमी पृष्ठ से:

-b batchfile

Batch mode reads a series of commands from an input batchfile instead of stdin.  
Since it lacks user interaction it should be used in conjunction with non-interactive
authentication.  A batchfile of `-' may be used to indicate standard input.  sftp 
will abort if any of the following commands fail: get, put, rename, ln, rm, mkdir, 
chdir, ls, lchdir, chmod, chown, chgrp, lpwd, df, symlink, and lmkdir.  Termination 
on error can be suppressed on a command by command basis by prefixing the command 
with a `-' character (for example, -rm /tmp/blah*).

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

शायद 'उम्मीद' वही है जो आप तब से देख रहे हैं। linuxjournal.com/article/3065
सिंथेसाइजरपटेल

3

या echo 'put {path to file}' | sftp {user}@{host}:{dir}, जो यूनिक्स और पावरशेल दोनों में काम करेगा।


यह सिंटैक्स पुट्टीफ़्ट (psftp) के साथ भी काम करता है। मैंने सोचा कि मैं साझा करूंगा क्योंकि यही कारण है कि मैं यहां समाप्त हुआ
9 लड़के

1

नीचे दिए गए एक मामूली संशोधन ने मेरे लिए काम किया जब इसे पर्ल और सिस्टम () कॉल के भीतर से उपयोग किया गया:

sftp {user}@{host} <<< $'put {local_file_path} {remote_file_path}'

1

एससीपी जवाब

ओपी ने एससीपी का उल्लेख किया, इसलिए यहां ऐसा है।

जैसा कि दूसरों ने बताया है, एसएफटीपी एक भ्रामक है क्योंकि अपलोड सिंटैक्स डाउनलोड सिंटैक्स से पूरी तरह से अलग है । यह हो जाता है मामूली यदि आप एक ही फार्म का उपयोग करें याद करने के लिए आसान:

echo 'put LOCALPATH REMOTEPATH' | sftp USER@HOST
echo 'get REMOTEPATH LOCALPATH' | sftp USER@HOST

वास्तव में, यह अभी भी एक गड़बड़ है, और यही कारण है कि लोग अभी भी एससीपी जैसे "आउटडेटेड" कमांड का उपयोग करते हैं:

scp USER@HOST:REMOTEPATH LOCALPATH
scp LOCALPATH USER@HOST:REMOTEPATH

एससीपी सुरक्षित है लेकिन दिनांकित है। इसमें कुछ बग्स होते हैं जो कभी भी फिक्स नहीं होंगे, अर्थात् यदि सर्वर का दुर्घटनाग्रस्त हो जाए.bash_profile एक संदेश उत्सर्जन करता है । हालांकि, प्रयोज्य के संदर्भ में, देव वर्षों से आगे थे।

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