ONLINE HELP
 WINDEVWEBDEV AND WINDEV MOBILE

Help / WLanguage / WLanguage functions / Communication / SSH functions
  • Principe
  • Comment le faire ?
  • Envoi direct de commandes
  • Dialogue avec un serveur SSH
WINDEV
WindowsLinuxJavaEtats et RequêtesCode Utilisateur (MCU)
WEBDEV
WindowsLinuxPHPWEBDEV - Code Navigateur
WINDEV Mobile
AndroidWidget AndroidiPhone/iPadWidget IOSApple WatchMac Catalyst
Autres
Procédures stockées
Principe
Le protocole SSH (Secure Shell) est un protocole réseau sécurisé permettant d'établir une connexion chiffrée entre deux systèmes.
Ce protocole est souvent utilisé pour l'administration à distance de serveurs car il assure la confidentialité et l'intégrité des données échangées, protégeant ainsi contre les interceptions et les attaques. Ce protocole permet d'exécuter des commandes à distance sur ces machines de manière sécurisée.
Un serveur peut donc supporter le protocole sécurisé SSH pour recevoir des commandes à distance.
En WLangage, les fonctions SSH permettent d'exécuter des commandes à travers ce protocole.
Le protocole géré est SSH-2.
Il existe deux méthodes pour communiquer avec un serveur SSH :
Remarque : Il est possible de copier des fichiers via SSH en utilisant les fonctions SCP.
Comment le faire ?

Envoi direct de commandes

L'envoi directe de commandes se fait à l'aide de la fonction SSHCommande. Les paramètres de connexion au serveur SSH doivent être décrits dans une variable de type sshSession.
Exemple :
cMaSession est une sshSession
buffSortie est un Buffer
cMaSession.Adresse = "127.0.0.1"
cMaSession.Port = 22
cMaSession.Utilisateur = "login"
cMaSession.MotDePasseUtilisateur = "pass"
nExitCode est un entier
sSortie est une chaîne ANSI
sSortieErr est une chaîne ANSI
(nExitCode, sSortie, sSortieErr) = SSHCommande(cMaSession, SAI_Commande)
SI ErreurDétectée ALORS
	Erreur(ErreurInfo(errComplet))
	RETOUR
FIN
SAI_ExitCode = nExitCode
SAI_StdOut = UTF8VersChaîne(sSortie)
SAI_StdErr = UTF8VersChaîne(sSortieErr)
Remarque : Par défaut, la fonction SSHCommande ouvre la session SSH, exécute la commande puis ferme la session SSH.
Nouveauté SaaS
Pour exécuter plusieurs commandes SSH sans fermer la session SSH, il suffit de conserver la connexion SSH active puis de la fermer après l'exécution des commandes, à l'aide des fonctions suivantes :
Nouveauté SaaS
SSHConnecteCommande
Permet de conserver la session SSH active entre plusieurs envois de commandes (via la fonction SSHCommande) à un serveur SSH.
Cette fonction est une nouveauté disponible à partir de WINDEV Suite SaaS 2025 Update 2.
Nouveauté SaaS
SSHDéconnecteCommande
Permet d'arrêter la session SSH qui était active pour permettre l'envoi groupé de plusieurs commandes.
Cette fonction est une nouveauté disponible à partir de WINDEV Suite SaaS 2025 Update 2.

Dialogue avec un serveur SSH

Le dialogue avec le serveur SSH se fait à l'aide des fonctions suivantes :
SSHConnecteShellOuvre une nouvelle session SSH de type "Shell".
SSHDéconnecteShellFerme une session SSH précédemment ouverte grâce à la fonction SSHConnecteShell.
SSHEcritEcrit des données dans la session SSH spécifiée.
SSHLitLit les données présentes sur le buffer de sortie de la session SSH.
Les paramètres de connexion au serveur SSH doivent être décrits dans une variable de type sshSession.
Etape 1 : Connexion au serveur SSH
La connexion au serveur s'effectue grâce à la fonction WLangage SSHConnecteShell. Cette fonction attend en paramètre une variable de type sshSession qui contient les informations de connexion au serveur SSH :
  • adresse du serveur,
  • nom d'utilisateur,
  • mot de passe,
  • port à utiliser.
gSessionSSH est une sshSession
gSessionSSH.Adresse = SAI_Serveur
gSessionSSH.Port = SAI_Port
gSessionSSH.Utilisateur = SAI_User
gSessionSSH.MotDePasseUtilisateur = SAI_Mot_de_passe
// Ouvre la session SSH
SSHConnecteShell(gSessionSSH)
Remarques:
  • Il est conseillé de modifier le port par défaut (port 22). Etant donné que le SSH est un protocole extrêmement répandu, il est aussi beaucoup "attaqué".
  • Il est conseillé de filtrer les IP autorisées à accéder au protocole SSH.
Connexion via un couple clé privée / clé publique
La connexion au serveur SSH peut également s'effectuer par un couple clé privée / clé publique.
gSessionSSH est une sshSession
gSessionSSH.Adresse = SAI_Serveur
gSessionSSH.Port = SAI_Port
gSessionSSH.Utilisateur = SAI_User
gSessionSSH.CléPrivée = SAI_Clé_privée
gSessionSSH.MotDePasseCléPrivée = SAI_Mot_de_passe
// Ouvre la session SSH
SSHConnecteShell(gSessionSSH)
Dans ce cas, le serveur possède la clé publique (voir la documentation de votre serveur SSH pour la configuration nécessaire).
Le client (l'application qui se connecte) possède quant à lui la clé privée.
L'authentification est donc effectuée par le chiffrement d'un texte envoyé au serveur. Si le serveur arrive à déchiffrer ce texte, cela signifie que le client possède bien la clé privée. Cette clé privée peut être protégée par un mot de passe.
Etape 2 : Envoi des commandes
L'envoi des commandes s'effectue via la fonction SSHEcrit. Cette fonction attend en paramètres :
  • la connexion SSH, à travers la variable de type sshSession,
  • la commande à exécuter, dans une variable de type Buffer.
    Cette commande envoyée doit obligatoirement se terminer par un caractère <10>.
sCommande est un Buffer = SAI_Commande_à_envoyer + Caract(10)
SSHEcrit(gSessionSSH, sCommande)
Etape 3 : La lecture des résultats
La lecture des résultats et sorties s'effectue à l'aide de la fonction WLangage SSHLit. Cette fonction permet de lire le texte renvoyé par le serveur SSH.
Etape 4 : La déconnexion
La déconnexion du serveur SSH s'effectue de manière très simple avec la fonction WLangage SSHDéconnecteShell en lui passant en paramètre la connexion :
SSHDéconnecteShell(gSessionSSH)
Exemple complet :
cMaSession est une sshSession
cMaSession.Adresse = "127.0.0.1"
cMaSession.Port = 22
cMaSession.Utilisateur = "login"
cMaSession.MotDePasseUtilisateur = "pass"
SI SSHConnecteShell(cMaSession) ALORS
	Info("Session Ouverte")
	bufSortie est un Buffer = "data"
	SSHEcrit(cMaSession, bufSortie)
	SSHDéconnecteShell(cMaSession)
FIN
Minimum version required
  • Version 20
Comments
Click [Add] to post a comment

Last update: 03/18/2025

Send a report | Local help