web-dev-qa-db-fra.com

SFTP pour envoyer un fichier avec le script bash

J'utilise l'authentification par clé, donc le mot de passe n'est pas un problème. J'ai un fichier dont je connais le nom et je veux simplement l'envoyer à une autre machine via sftp.

J'ai essayé de chercher, mais je n'ai trouvé cette question (apparemment simple) nulle part. Peut-être que mon Google-fu me fait tout simplement défaut aujourd'hui.

En bref: je suis sur ma machine locale, je veux envoyer un fichier (test.txt) à une machine distante. Les clés autorisées sont déjà fournies. Fondamentalement, je veux automatiser ces trois étapes:

sftp root@remote:/root/dropoff
put test.txt
quit

Existe-t-il une simple commande bash que je peux utiliser pour automatiser cela? La seule option que j'ai vue utilise un script bash pour effectuer le put/quit et utiliser l'option -b pour l'exécuter. Y a-t-il quelque chose de plus propre que ça? (Je ne suis pas intéressé à utiliser d'autres applications/outils.)

Merci!

17
Bing

Vous avez dit que vous n'êtes pas intéressé par d'autres outils, mais scp est un bien meilleur choix pour les transferts de fichiers sans assistance. Voici un exemple scp:

scp test.txt root@remote:/root/dropoff
12
jordanm

Je sais que c'est un ancien, mais vous pouvez également passer des arguments à une commande avec un Here Document

Vous pouvez mettre les éléments suivants dans un script:

# The following is called a HERE document
sftp <user>@<remote> << SOMEDELIMITER 
  put test.txt
  ... # any commands you need to execute via sftp
  quit
SOMEDELIMITER

chaque commande supplémentaire sera introduite dans la commande précédant le << et SOMEDELIMTER peuvent être ce que vous voulez.

scp est une excellente option, mais sftp était le seul outil que j'ai pu utiliser en poussant de Linux vers Windows et vous êtes bloqué en utilisant FreeSSHD en mode service!

40
Mike McMahon

Je ne sais pas comment sftp était configurable lorsque cette question a été posée. Quoi qu'il en soit, 6 ans plus tard, vous pouvez mettre des commandes sftp comme PUT dans un fichier, puis référencer ce fichier dans votre appel sftp initial. Le rend l'ensemble du processus complètement non interactif et facilement configurable:

sftp -i /path/to/ssh-key -b /path/to/sftp-commands.txt root@remote:/root/dropoff

.... Où sftp-commands.txt contient juste

put test.txt; quit
1
user3061675