it-swarm.com.de

Single Line SFTP vom Terminal

Im Laufe des Tages führe ich möglicherweise mehrmals einen Test durch, bei dem ich eine Protokolldatei auf einem Remoteserver durchsuchen muss. Ich habe mich daran gewöhnt, mit meinem Terminal sftp auf den Remote-Server zu übertragen und die gewünschte Protokolldatei auf /tmp auf meinem lokalen Rechner.

Ich habe die Optionen heute mit man sftp Um herauszufinden, wie die folgenden Befehle im Grunde genommen in einer einzigen Zeile ausgeführt werden können, muss ich keinen Befehl eingeben, die Eingabetaste drücken, einen Befehl eingeben, die Eingabetaste drücken usw.

(was mache ich nun)

sftp [email protected]
--mypassword at Prompt
lcd /tmp
get /dir/dir/dir/dir/file
quit

Ich fand beim Durchschauen man sftp ein Verweis auf scp, den ich vorher nicht benutzt habe. Ich habe das Gefühl, dass es vielleicht das ist, wonach ich suche, aber ich habe keine Möglichkeit gefunden, anzugeben, wo die sicher kopierte Datei gespeichert werden soll.

Könnte mir jemand eine Möglichkeit geben, /dir/file von einem Remote-Server herunterladen und auf /tmp/file_plus-my-description?

Ich hatte gehofft, einen sftp- oder scp-Befehl ausführen zu können, der einer regulären UNIX-Kopie ähnlich ist, wie:

scp [email protected] /dir/file /tmp/file_plus-my-description

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

66
Kyle

Update September 2017 - tl; dr

Download eine einzelne Datei von einem entfernten FTP-Server auf Ihren Computer:

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

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

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

Ursprüngliche Antwort:

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

sftp [email protected] remoteFile localFile

Die einzige Dokumentation, die im Terminal angezeigt wird, ist folgende:

sftp [[email protected]]Host[:file ...]
sftp [[email protected]]Host[:dir[/]]

Ich bin jedoch auf diese Seite gestoßen, das unter der Übersicht Folgendes 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 [[[email protected]]Host[:file [file]]] 
sftp [[[email protected]]Host[:dir[/]]]

Die einfache Antwort ist also, dass Sie nur : Nach Ihrem Benutzer und Host dann die entfernte Datei und den lokalen Dateinamen. Unglaublich einfach!

Einzelne Zeile, SFTP-Kopie Remote-Datei:

sftp [email protected]:remoteFileName localFileName
sftp [email protected]:/tmp/myLogFile.log /tmp/fileNameToUseLocally.log

Update Februar 2016

Falls jemand nach dem Befehl sucht, dies umzukehren, und Push eine Datei von Ihrem lokalen Computer auf einen Remote-Server in einer einzigen Zeile sftp Befehl, Benutzer @Thariama unten die Lösung gepostet, um das zu erreichen. Hutspitze zu ihnen für den Extracode.

sftp {user}@{Host}:{remote_dir} <<< $'put {local_file_path}'
156
Kyle

Um eine einzelne Datei HOCHZULADEN, müssen Sie ein Bash-Skript erstellen. Etwas wie das Folgende sollte unter OS X funktionieren, wenn Sie sshpass installiert haben.

Verwendung:

sftpx <password> <[email protected]> <localfile> <remotefile>

Fügen Sie dieses Skript in Ihren Pfad ein und nennen Sie es 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
6
sstur

sFTP unterstützt Batch-Dateien.

Von der Manpage:

-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