Frage Single Line sftp vom Terminal


Ich führe mehrmals den ganzen Tag einen Test durch, bei dem ich eine Protokolldatei auf einem Remote-Server durchsehen muss. Ich habe mich daran gewöhnt, mein Terminal zu benutzen sftp in den Remote-Server und ziehen Sie die gewünschte Protokolldatei nach unten /tmp auf meiner lokalen Maschine.

Ich habe heute die Optionen durchgesehen man sftp in einem Versuch, eine Möglichkeit zu finden, die folgenden Befehle grundsätzlich in einer einzigen Zeile auszuführen, so dass ich keinen Befehl eingeben muss, drücken Sie die Eingabetaste, geben Sie einen Befehl ein, drücken Sie die Eingabetaste, usw.

(was mache ich nun)

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

Ich habe beim Durchschauen gefunden man sftp ein Verweis auf scp was ich vorher noch nicht benutzt habe. Ich glaube, es könnte das sein, wonach ich suche, aber ich habe keine Möglichkeit gesehen, anzugeben, wohin die sicher kopierte Datei gehen soll.

Könnte mir jemand einen Weg geben um zu bekommen /dir/file von einem Remote-Server und laden Sie es herunter /tmp/file_plus-my-description?

Ich hatte gehofft, in der Lage zu sein, einen sftp- oder scp-Befehl ähnlich einer normalen UNIX-Kopie auszuführen, wie:

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

Ich benutze das eingebaute Terminal in Mac OS X 10.8. Vielen Dank.


47
2018-05-23 19:02


Ursprung


Antworten:


Update Sep 2017 - tl; dr

Herunterladen eine einzelne Datei von einem Remote-FTP-Server zu Ihrem Computer:

sftp username@hostname:remoteFileName localFileName

Hochladen eine einzelne Datei von Ihrem Computer zu einem entfernten FTP-Server:

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

Ursprüngliche Antwort:

Ok, ich fühle mich ein bisschen dumm. Aber ich habe es herausgefunden. Ich hatte es fast an der Spitze mit:

sftp user@host remoteFile localFile

Die einzige im Terminal gezeigte Dokumentation ist diese:

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

Ich bin jedoch gestolpert Diese Seite was folgendes unter der Übersicht zeigt:

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

Die einfache Antwort ist also einfach : Nach Ihrem Benutzer und Host dann die Remote-Datei und lokalen Dateinamen. Unglaublich einfach!

Einzellinie, sftp Kopie entfernte Datei:

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

Aktualisierung Februar 2016

Falls jemand nach dem Befehl sucht, das Gegenteil zu tun und drücken eine Datei von Ihrem lokalen Computer zu einem entfernten Server in einer einzigen Zeile sftp  Befehl, Benutzer @Thariama unten veröffentlichte die Lösung, um dies zu erreichen. Hut zu ihnen für den zusätzlichen Code.

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

119
2018-05-23 20:19



Um eine einzelne Datei zu aktualisieren, müssen Sie ein Bash-Skript erstellen. Etwas wie das Folgende sollte auf OS X funktionieren, wenn Sie es getan haben sshpass Eingerichtet.

Verwendung:

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

Setze dieses Skript irgendwo in deinen Pfad und rufe es an 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
2017-12-23 04:55



sftp unterstützt Batch-Dateien.

Von der man-Seite:

-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
2018-05-23 19:08