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