Laisser un commentaire

Synthèse des commandes SFTP en CLI

Je sais bien que la plupart du temps, vous utilisez un client graphique pour ce genre d’activité… surement FileZilla même. Mais pour une raison x ou y – ou tout simplement pour le plaisir de jouer le barbu – il arrive un jour où vous devez vous connectez en SFTP en ligne de commande. Rien de bien complexe rassurez-vous. Voyons rapidement comment s’en sortir.

Pour être très franc, je n’avais jamais non plus eu ce besoin jusqu’à très récemment. Ayant un accès ssh à quasi tous mes serveurs et aux environnements de mes clients, un mix de scp, rsync, ansible et git clone pour les deploy m’ont toujours gardé à l’écart du FTP et SFTP.

Soyons honnête, j’ai toujours un FileZilla à portée de main pour ces hébergements mutus auxquels ont n’a d’autre accès qu’en ftp. Bref. Soyons fous, rangeons le FZ et sortons la CLI.

Pour se connecter, rien de sorcier, c’est quasi comme en ssh : sftp [-P port] login@host.

Vous verrez que les commandes sont les mêmes que celles que vous connaissez déjà en bash. La seule différence est que sftp permet de gérer deux dimensions à la fois : les fichiers distants (sur le serveur) et les fichiers locaux (sur le client).

Lorsque nous voulons effectuer une action en local, il suffit de préfixer la commande avec l. Les détails dans le tableau ci-dessous.

Commande Description
pwd Affiche le dossier courant
lpwd Affiche le dossier courant local (client)
cd Change de répertoire
lcd Change de répertoire en local
ls Liste les fichiers et répertoires du dossier courant
lls Liste les fichiers et répertoires du dossier courant sur le client
mkdir Créer un répertoire
lmkdir Créer un répertoire en local
get Télécharger des fichiers depuis le serveur vers le client (l’option -r permet d’envoyer un répertoire)
put Envoyer des fichiers depuis le client vers le serveur (l’option -r permet d’envoyer un répertoire)
rm Supprime un fichier
rmdir Supprime un répertoire
exit Je pense que celui-ci se passe d’explications
help Afficher l’aide

LFTP, le client qui vous veut du bien

Conseillé par @BXT dans les commentaires, LFTP est un client bien plus puissant que le SFTP natif. Ce client supporte de nombreux protocoles, mais le cas qui nous intéresse ici est bien l’usage du sftp. Pour se connecter avec ce protocole, il va falloir lui spécifier dans l’url :

lftp [-p port] protocol://login:password@host

# exemple
lftp sftp://buzut:azerty@127.0.0.10

Chose assez étrange, même si vous utilisez une connexion par clef (et que vous ne spécifiez pas de mot de passe), l’oiseau vous le demande quand même, vous n’avez cas spécifier n’importe quoi ou juste “entrer”.

Mais alors, pourquoi utiliser lftp plutôt que sftp ? Le premier supporte l’auto-complétion, l’effacement récursif (vous pouvez faire rm -r un_dossier/), sans vous embêter à d’abord effacer manuellement tout son contenu. Il supporte aussi le mirrorring un peu à la rsync en upload et en download. Pratique pour ne répercuter que les modifications !

# -R pour inverser (de la machine locale vers le serveur)
lftp > mirror [-R] repertoire_source repertoire_dest

Dans les options intéressantes du mode mirror, on notera --delete qui permet d’effacer les fichiers du répertoire de destination qui ne sont pas présents dans le répertoire source – comme dans rsync – et --parallel[=N] qui permet de paralléliser les téléchargements.

On n’hésitera donc pas longtemps à troquer sftp contre lftp pour tout autre chose qu’un trivial upload.

Et voilà, vite fait, bien fait. Vous êtes maintenant autonomes en sftp ! Easy, wasn’t it?

Commentaires

Rejoignez la discussion !

Vous pouvez utiliser Markdown pour les liens [ancre de lien](url), la mise en *italique* et en **gras**. Enfin pour le code, vous pouvez utiliser la syntaxe `inline` et la syntaxe bloc

```
ceci est un bloc
de code
```