Implémenter des transferts SFTP sécurisés en IEC 61131-3 avec Curl
Il y a quelques semaines, j'ai reçu la question suivante : vous devez téléverser un fichier de log vers un serveur SFTP, via un programme s'exécutant dans l'ESM.
Le protocole SSH File Transfer Protocol (SFTP) fournit l'accès aux fichiers, le transfert et la gestion sur tout flux de données fiable. Conçu par l'IETF comme extension du protocole Secure Shell (SSH) v2.0 pour offrir des capacités de transfert de fichiers sécurisées.
SFTP est inclus dans le firmware PLCnext, donc cela ne devrait pas poser problème.
Étape 1 : Créer un fichier de log en Structured Text. Exemples :
Étape 2 : J'avais besoin d'un serveur SFTP pour tester. J'ai utilisé CrushFTP, installé dans une VM sur mon portable.
Après installation, créez un utilisateur admin pour l'interface web, puis un utilisateur pour l'accès PLC.
Pour cet exemple : utilisateur = PLCnext, mot de passe = 123456789
Étape 3 : Téléverser un fichier en ligne de commande.
On voit qu'on donne d'abord une commande, puis on entre le mot de passe en seconde étape. Pour automatiser avec le FB « PBCL_SysLinuxShell_1 », il faut une commande sur une seule ligne.
Ce FB se trouve dans la bibliothèque PLCnextBase. (https://www.plcnextstore.com/#/720)
Il faut une autre commande pour le téléversement. Regardons Curl.
La version installée avec firmware 2020.6.1 ne supporte pas SFTP. Grâce à Oliver Warneke, j'ai pu installer une autre version de Curl supportant SFTP. Avec firmware 2021.0.0 LTS, cette version sera disponible.
Grâce à Curl, on peut utiliser cette commande :
curl -k -sS --key ~/.ssh/id_rsa --max-time 25 --connect-timeout 10 "sftp://192.168.1.50:22/test/Upload/" --user "PLCnext:12345679" -T "/opt/plcnext/Test.pdf" --ftp-create-dirs
En utilisant cette commande dans le FB Shell, le résultat est visible dans le fichier de log :
/opt/plcnext/PLCnextBase.ServiceProvider.log
Explication des arguments :
- -k, --insecure (TLS) : par défaut, toute connexion SSL est vérifiée. Cette option permet à curl de continuer même pour des connexions considérées comme non sécurisées.
- -S, --show-error : avec -s, affiche un message d'erreur en cas d'échec.
- -s, --silent : mode silencieux. N'affiche pas la barre de progression ni les messages d'erreur. Utilisez -S pour désactiver la progression mais garder les erreurs.
- --key <clé> (TLS SSH) : fichier de clé privée. Pour SSH, si non spécifié, curl essaie dans l'ordre :
~/.ssh/id_rsa,~/.ssh/id_dsa,./id_rsa,./id_dsa. - -m, --max-time <secondes> : temps maximum en secondes pour l'opération complète. Utile pour éviter les blocages longs.
- --connect-timeout <secondes> : temps maximum pour la phase de connexion uniquement.
- -T, --upload-file <fichier> : transfère le fichier local vers l'URL distante. Si pas de partie fichier dans l'URL, curl ajoute le nom du fichier local.
- --ftp-create-dirs (FTP SFTP) : si le chemin n'existe pas sur le serveur, curl tente de créer les répertoires manquants au lieu d'échouer.
Références :
Technologie industrielle
- Exploiter l'IoT industriel pour la croissance : au-delà des économies de coûts
- 4 tests clés pour évaluer l'efficacité d'un transformateur de puissance
- Prévention des pannes de courant : 5 stratégies essentielles pour protéger votre entreprise
- Comprendre les brownouts vs blackouts : différences clés et impact sur l'entreprise
- Facteurs clés influençant la fréquence de maintenance des groupes électrogènes diesel
- Choisir le bon générateur de secours : 4 questions clés pour une alimentation fiable
- La centrale électrique virtuelle de Tesla : transformer le réseau énergétique mondial
- Découvrez comment la surveillance énergétique booste l'efficacité Industrie 4.0 — Rejoignez notre webinaire expert
- Boostez l'efficacité de l'usine : Maîtriser le travail d'équipe pour une gestion supérieure