Single Line sftp du terminal

Plusieurs fois au cours de la journée, je suis peut-être en train de tester un fichier journal sur un serveur distant. Je me suis habitué à utiliser mon terminal pour sftp sur le serveur distant et à extraire le fichier journal souhaité vers /tmp sur mon ordinateur local.

Je regardais les options aujourd’hui en utilisant man sftp pour essayer de trouver un moyen d’exécuter les commandes suivantes essentiellement dans une seule ligne afin de ne pas avoir à taper une commande, appuyez sur Entrée, tapez une commande, appuyez sur Entrée, etc. .

(ce que je fais maintenant)

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

J’ai trouvé en regardant à travers l’ man sftp une référence à scp que je n’ai pas utilisée auparavant. Je pense que c’est peut-être ce que je recherche, mais je n’ai pas vu de moyen de spécifier où je voulais que le fichier soit copié de manière sécurisée.

Quelqu’un pourrait-il me fournir un moyen d’obtenir /dir/file depuis un serveur distant et le télécharger sur /tmp/file_plus-my-description ?

J’espérais pouvoir exécuter une commande sftp ou scp similaire à une copie régulièreUNIX comme:

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

J’utilise le Terminal intégré sous Mac OS X 10.8. Merci.

Mise à jour sept. 2017 – tl; dr

Téléchargez un seul fichier depuis un serveur ftp distant sur votre machine:

 sftp username@hostname:remoteFileName localFileName 

Chargez un seul fichier de votre machine sur un serveur FTP distant:

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

Réponse originale:

Ok, alors je me sens un peu bête. Mais j'ai compris. Je l'avais presque au sumt avec:

 sftp user@host remoteFile localFile 

La seule documentation présentée dans le terminal est la suivante:

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

Cependant, je suis tombé sur ce site qui montre ce qui suit sous le synopsis:

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

Donc, la réponse simple est que vous faites juste : après votre utilisateur et votre hôte, puis le fichier distant et le nom de fichier local. Incroyablement simple!

Ligne unique, fichier distant de copie sftp:

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

Mise à jour de février 2016

Si quelqu'un cherche la commande pour faire l'inverse et pousse un fichier de votre ordinateur local vers un serveur distant en une seule ligne, l'utilisateur @Thariama a publié la solution pour y parvenir. Astuce pour eux pour le code supplémentaire.

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

Pour télécharger un seul fichier, vous devez créer un script bash. Quelque chose comme ce qui suit devrait fonctionner sous OS X si vous avez installé sshpass .

Usage:

 sftpx     

Placez ce script quelque part sur votre chemin et appelez-le 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 supporte les fichiers batch.

De la page de manuel:

 -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*).