Ceci est une question très basique que je suis tout juste nouvelle à bash et ne pouvais pas comprendre comment faire cela. La recherche sur Google ne m'a malheureusement conduit nulle part.
Mon objectif est de me connecter avec sftp à un serveur, de télécharger un fichier, puis de me déconnecter.
J'ai le script suivant:
UpdateJar.sh
#!/bin/bash
sftp -oPort=23 [email protected]:/home/kalenpw/TestWorld/plugins
#Change directory on server
#cd /home/kalenpw/TestWorld/plugins
#Upload file
put /home/kalenpw/.m2/repository/com/Khalidor/TestPlugin/0.0.1-SNAPSHOT/TestPlugin-0.0.1-SNAPSHOT.jar
exit
le problème est que ce script établira une connexion sftp et ne fera rien. Une fois que je tape manuellement exit dans la connexion, il essaie d'exécuter la commande put, mais comme la session sftp a été fermée, il indique simplement put: command not found.
Comment puis-je obtenir que cela fonctionne correctement?
Merci
Vous pouvez modifier votre script pour passer des commandes dans un document ici, par exemple,
#!/bin/bash
sftp -oPort=23 [email protected]:/home/kalenpw/TestWorld/plugins <<EOF
put /home/kalenpw/.m2/repository/com/Khalidor/TestPlugin/0.0.1-SNAPSHOT/TestPlugin-0.0.1-SNAPSHOT.jar
exit
EOF
Le <<
marqueur suivi du nom (EOF
) indique au script de passer les lignes suivantes jusqu'à ce que le nom soit trouvé au début de la ligne (par lui-même).
Vous préférerez peut-être utiliser scp
au lieu de sftp
. scp
se comporte comme la commande ordinaire cp
, mais les fichiers peuvent être distants:
scp -P 23 /home/kalenpw/.m2/repository/com/Khalidor/TestPlugin/0.0.1-SNAPSHOT/TestPlugin-0.0.1-SNAPSHOT.jar [email protected]:/home/kalenpw/TestWorld/plugins
Cela copie le fichier sur votre machine locale dans un répertoire sur la machine distante sans avoir à utiliser l'interface de commande de style ftp à l'ancienne.
Les services ssh
, scp
et sftp
sont généralement disponibles si l'un d'entre eux l'est; le même programme démon les fournit tous simultanément. En principe, l'administrateur du serveur peut choisir de désactiver l'un d'eux, mais en pratique, c'est assez rare.
Vous pouvez également utiliser le -b
option de sftp
pour indiquer un fichier contenant des commandes pour sftp
.
Par exemple, vous pouvez placer toutes vos commandes dans le fichier sftp_commands.txt
:
cd /home/kalenpw/TestWorld/plugins
put /home/kalenpw/.m2/repository/com/Khalidor/TestPlugin/0.0.1-SNAPSHOT/TestPlugin-0.0.1-SNAPSHOT.jar
exit
et exécutez sftp
comme:
sftp -oPort=23 -b sftp_commands.txt [email protected]:/home/kalenpw/TestWorld/plugins
Ou vous pouvez également passer les commandes via STDIN si vous ne souhaitez pas utiliser de fichier.
De man sftp
:
-b batchfile
Le mode batch lit une série de commandes à partir d'un fichier batch d'entrée au lieu de stdin. Comme il manque d'interaction avec l'utilisateur, il doit être utilisé en conjonction avec une authentification non interactive. Un fichier batch de "-" peut être utilisé pour indiquer une entrée standard. sftp abandonnera si l'une des commandes suivantes échoue: get, put, reget, rename, ln, rm, mkdir, chdir, ls, lchdir, chmod, chown, chgrp, lpwd, df, symlink et lmkdir. La terminaison en cas d'erreur peut être supprimée commande par commande en préfixant la commande avec un caractère "-" (par exemple, -rm/tmp/blah *).
Une autre option serait d'utiliser curl :
curl -u user -T file.tar sftp://example.com/home/user/