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?
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 .
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 ..
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
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.