web-dev-qa-db-fra.com

Comment transférer un fichier à l'aide de sftp sous UNIX

Je souhaite transférer un fichier .png d'un répertoire de mon ordinateur vers un répertoire d'un serveur distant.

Je dois utiliser SFTP pour sécuriser le fichier et le mode de transfert. Et j'ai déjà un fichier de script UNIX (.ksh) pour copier les fichiers en mode normal. Comment implémenter le transfert en mode SFTP?

5
Robin clave

Utilisez sftp à la place de la commande que vous utilisez dans votre .ksh script. Voir sftp man pour référence.

Vous pouvez également consulter scp copie sécurisée - scp man .

MODIFIER

sftp est principalement destiné aux opérations interactives, vous devez spécifier l'hôte auquel vous souhaitez vous connecter: 

sftp example.com

vous serez invité à entrer votre nom d'utilisateur et votre mot de passe, et la session interactive commencera.

Bien qu'il puisse être utilisé dans des scripts, la scp est beaucoup plus simple à utiliser:

scp /path/to/localfile user@Host:/path/to/dest

il vous sera demandé votre mot de passe ..

Modifier 2

scp et sftp utilisent ssh comme protocole sous-jacent, voir this et this

Le meilleur moyen de les configurer pour qu'ils s'exécutent à partir de scripts consiste à configurer une authentification sans mot de passe à l'aide de keys . Voir ceci et ceci . Je l’utilise abondamment sur mes serveurs .. Après avoir configuré les clés, vous pouvez exécuter

scp -i private-key-file /path/to/local/file user@Host:/path/to/remote

sftp -oIdentityFile=private-key-file -b batch-file user@Host

Si vous souhaitez vous authentifier avec un mot de passe, vous pouvez essayer le package expect. Le script le plus simple peut ressembler à ceci:

#!/usr/bin/expect
spawn sftp -b batch-file user@Host
expect "*?assword:*"
send "pasword\n"
interact

Voir this , this et this pour plus d’informations.

12
Shimon Rachlenko

Envoyer des commandes via sftp sur une ligne:

Crée un fichier et enregistre-le sous my_batch_file:

cd /root
get blah.txt
bye

Exécutez ceci pour exécuter votre fichier batch:

eric@dev /home/el $ sftp [email protected] < my_batch_file
Connecting to 10.30.25.15...
Password:
sftp> cd /root
sftp> get blah.txt
Fetching /root/blah.txt to blah.txt
sftp> bye

Le fichier est transféré

Cela a déplacé le blah.txt de l'ordinateur distant à l'ordinateur local.

Si vous ne souhaitez pas spécifier de mot de passe, procédez comme suit:

Comment exécuter la commande sftp avec un mot de passe du script Bash?

Ou si vous voulez le faire de manière peu sûre, utilisez bash et attendez-vous à:

#!/bin/bash
expect -c "
spawn sftp username@your_Host
expect \"Password\"
send \"your_password_here\r\"
interact "

Vous devrez peut-être installer expect, changer le libellé de 'Password' en minuscule 'p' pour qu'il corresponde à ce que votre invite reçoit. Le problème ici est que votre mot de passe est exposé en texte brut dans le fichier ainsi que dans l'historique des commandes. Ce qui va presque à l'encontre du but d'avoir un mot de passe en premier lieu.

1
Eric Leschinski