Pojedyncza linia sftp z terminala

Kilka razy w ciągu dnia, mogę uruchamiać test, w którym muszę przejrzeć plik dziennika na zdalnym serwerze. Przyzwyczaiłem się do używania mojego terminala do sftp na zdalnym serwerze i ściągnięcia żądanego pliku dziennika do /tmp na mojej lokalnej maszynie.

Przeglądałem dzisiaj opcje używając man sftp, próbując wymyślić sposób na uruchomienie następujących poleceń w zasadzie w jednej linii, aby nie musiał wpisywać polecenia, nacisnąć enter, wpisać polecenie naciśnij wejść itp.

(what I do now)

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

Podczas przeglądania man sftp znalazłem odniesienie do scp, którego wcześniej nie używałem. Czuję, że może to być to, czego szukam, ale nie widziałem sposobu, aby określić, gdzie chcę bezpiecznie skopiowany plik, aby przejść.

Czy ktoś mógłby mi podać sposób na pobranie /dir/file ze zdalnego serwera i ściągnięcie go na /tmp/file_plus-my-description?

Miałem nadzieję, że uda mi się uruchomić polecenie SFTP lub scp podobne do zwykłej kopii like:

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

Używam wbudowanego Terminal W Mac OS X 10.8. Dzięki.

Author: Kyle, 2013-05-23

3 answers

Aktualizacja Wrzesień 2017-TL; dr

Pobierz pojedynczy plik ze zdalnego serwera ftp na swój komputer:

sftp username@hostname:remoteFileName localFileName

Prześlij pojedynczy plik ze swojego komputera na zdalny serwer ftp:

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

Oryginalna odpowiedź:

Ok, czuję się trochę głupio. Ale rozgryzłem to. Prawie miałem go na górze z:
sftp user@host remoteFile localFile

Jedyna dokumentacja pokazana w terminalu jest następująca:

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

Jednak natknąłem się na ta strona która pokazuje co następuje pod streszczeniem:

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[/]]]

Więc prosta odpowiedź jest taka, że po prostu robisz : po swoim użytkowniku i Hostie, a następnie zdalny plik i lokalną nazwę pliku. Niesamowicie proste!

Pojedyncza linia, SFTP kopiuje zdalny plik:

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

Aktualizacja Luty 2016

W przypadku, gdy ktoś szuka polecenia, aby zrobić odwrotnie tego i push Plik z lokalnego komputera do zdalnego serwera w jednej linii sftp polecenie, użytkownik @ Thariama poniżej umieścił rozwiązanie, aby to osiągnąć. Hat tip to them for the extra code.

sftp {user}@{host}:{remote_dir} <<< $'put {local_file_path}'
 125
Author: Kyle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-21 16:41:44

Aby przesłać pojedynczy plik, musisz utworzyć skrypt bash. Coś takiego powinno działać na OS X, Jeśli masz zainstalowany {[2] }.

Użycie:

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

Umieść ten skrypt gdzieś na swojej ścieżce i nazwij go 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
 4
Author: sstur,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-23 04:55:40

Sftp obsługuje pliki wsadowe.

Ze strony man:

-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*).
 3
Author: synthesizerpatel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-23 19:08:51