Passer au contenu principal

Client SSH

Exécuter des commandes sur le serveur et transférer des fichiers.

Introduction​

Netuno intègre dans son framework low-code un client SSH, qui permet de se connecter à des serveurs, exécuter des commandes, envoyer et recevoir des fichiers, modifier des dossiers, entre autres opérations distantes.

Il prend en charge plusieurs connexions simultanées, ainsi que SCP et SFTP.

Cela grâce à l'implémentation Java et open-source SSHJ, ce qui permet à Netuno de fournir ces fonctionnalités à tous les langages de script via la ressource _ssh.

En savoir plus sur la ressource SSH de Netuno.

Configuration​

La première étape consiste à configurer les données d'accès SSH que Netuno utilisera pour établir la connexion.

Naviguez dans l'application que vous développez jusqu'au fichier de configuration d'environnement. Dans cet exemple, nous utiliserons le fichier de développement, situé à :

  • config/_development.json

Vérifiez s'il existe des configurations pour SSH ; si ce n'est pas le cas, ajoutez à la fin du fichier de configuration (au format JSON) les paramètres de configuration SSH, par exemple :

{
...
"ssh": {
"default": {
"enabled": true,
"host": "mon.serveur.net",
"port": 22,
"username": "root",
"password": "$eCr37"
}
},
...
}

Après avoir enregistré les modifications, il suffit de redémarrer Netuno pour prendre en compte les modifications de configuration. Ce sont les configurations par défaut pour la connexion, comme l'indique le nom de clé default.

Vous pouvez ajouter d'autres configurations de connexion SSH avec d'autres clés dans le JSON.

Pour ajouter d'autres configurations de connexion SSH, il suffit de répéter le bloc de configuration par défaut et de remplacer la clé default par une autre de votre choix, par exemple :

{
...
"ssh": {
"default": {
"enabled": true,
"host": "mon.serveur.net",
"port": 22,
"username": "root",
"password": "$eCr37"
},
"autre": {
"enabled": true,
"host": "mon.autre-serveur.net",
"port": 22,
"username": "root",
"password": "$eCr37"
}
},
...
}

La configuration ci-dessus permet d'utiliser le compte default lorsqu'il est codé de la manière suivante :

const ssh = _ssh.init()

Pour utiliser la configuration autre, il suffit d'ajouter la clé de configuration comme paramètre de la fonction _ssh.init(), de la manière suivante :

const sshAutre = _ssh.init("autre")

Si vous n'ajoutez pas de nom de configuration comme paramètre, la configuration du compte default sera utilisée.

Connexion​

Avant de faire quoi que ce soit, il faut démarrer la connexion SSH :

ssh.connect()

Commandes​

Pour exécuter des commandes, il faut démarrer une session de commandes :

const sessionSsh = ssh.initSession()

Lors de l'exécution d'une commande, un objet est fourni contenant l'état de l'exécution et la sortie de données correspondante (output), par exemple :

const resultatCommandeSsh = sessionSsh.exec("ls -rato")
if (resultatCommandeSsh.ok) {
_out.println("Exécution réussie :")
_out.println(resultatCommandeSsh.output())
} else {
_out.println("La commande a échoué :")
_out.println(resultatCommandeSsh.error())
}

L'objet renvoyé par la commande est le SSHExecResult.

N'oubliez pas de toujours fermer la session :

sessionSsh.close()

SCP​

Grâce au SCP, nous pouvons envoyer et recevoir des fichiers.

Pour créer un fichier texte à partir d'une chaîne et télécharger le contenu du fichier créé, voir l'exemple :

const sshSCP = ssh.initSCP()
// Crée le fichier texte.
sshSCP.uploadText("bonjour.txt", "Bonjour ! Mon contenu ici...")
// Télécharge et affiche le contenu du fichier.
_out.println(sshSCP.downloadText("bonjour.txt"))
sshSCP.close()

Pour effectuer l'envoi (upload) de fichiers existants dans l'application :

const sshSCP = ssh.initSCP()
// Envoie un fichier qui se trouve dans le storage/filesystem.
sshSCP.upload("classeur.xlsx", _storage.filesystem("server", "classeur.xlsx").file())
// Envoie un fichier qui se trouve à la racine de l'application.
sshSCP.upload("document.pdf", _app.file("document.pdf"))
sshSCP.close()

Pour télécharger (download) des fichiers du serveur vers l'application :

const sshSCP = ssh.initSCP()
// Télécharge le fichier vers le storage/filesystem.
sshSCP.download("classeur.xlsx", _storage.filesystem("server", "classeur.xlsx").file())
// Télécharge le fichier vers la racine de l'application.
sshSCP.download("document.pdf", _app.file("document.pdf"))
sshSCP.close()

SFTP​

Le SFTP est une façon de transférer et manipuler des fichiers et dossiers qui prend en charge les mêmes fonctionnalités que le FTP, mais en utilisant le SSH.

Pour démarrer une nouvelle session SFTP :

const sftp = ssh.initSFTP()

Initialise l'objet SSHSFTP qui est le client de la session.

Créer un nouveau dossier à distance :

sftp.createDirectory("chemin/nouveau-dossier")

Crée ou remplace le fichier distant avec le contenu texte fourni :

sftp.uploadText("dossier/fichier.txt", "Mon contenu !")

Obtient le contenu texte d'un fichier distant :

const contenuFichierDistant = sftp.downloadText("dossier/fichier.txt")
_out.println(contenuFichierDistant)

Supprime définitivement un fichier distant :

sftp.deleteFile("dossier/fichier.txt")

Supprime définitivement le dossier distant :

sftp.deleteDirectory("dossier")

Liste tout le contenu d'un dossier :

for (const i of sftp.list("chemin/dossier")) {
if (i.directory) {
_out.print("Dossier : ")
} else if (i.regularFile) {
_out.print("Fichier : ")
} else {
_out.print("Autre : ")
}
_out.println(i.name)
_out.println("<br/>")
}

Retourne une liste d'objets de type SSHFile.

Pour effectuer l'envoi (upload) de fichiers existants dans l'application :

// Envoie un fichier qui se trouve dans le storage/filesystem.
sftp.upload("classeur.xlsx", _storage.filesystem("server", "classeur.xlsx").file())
// Envoie un fichier qui se trouve à la racine de l'application.
sftp.upload("document.pdf", _app.file("document.pdf"))

Pour télécharger (download) des fichiers du serveur vers l'application :

// Télécharge le fichier vers le storage/filesystem.
sftp.download("classeur.xlsx", _storage.filesystem("server", "classeur.xlsx").file())
// Télécharge le fichier vers la racine de l'application.
sftp.download("document.pdf", _app.file("document.pdf"))

N'oubliez pas de toujours fermer la session SFTP :

sftp.close()