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 :
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const ssh = _ssh.init()
const ssh = _ssh.init()
ssh = _ssh.init()
ssh = _ssh.init()
val ssh = _ssh.init()
final 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 :
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const sshAutre = _ssh.init("autre")
const sshAutre = _ssh.init("autre")
sshAutre = _ssh.init("autre")
sshAutre = _ssh.init("autre")
val sshAutre = _ssh.init("autre")
final sshAutre = _ssh.init("autre")
Si vous n'ajoutez pas de nom de configuration comme paramètre, la configuration du compte
defaultsera utilisée.
Connexion
Avant de faire quoi que ce soit, il faut démarrer la connexion SSH :
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
ssh.connect()
ssh.connect()
ssh.connect()
ssh.connect()
ssh.connect()
ssh.connect()
Commandes
Pour exécuter des commandes, il faut démarrer une session de commandes :
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const sessionSsh = ssh.initSession()
const sessionSsh = ssh.initSession()
sessionSsh = ssh.initSession()
sessionSsh = ssh.initSession()
val sessionSsh = ssh.initSession()
final 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 :
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
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())
}
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())
}
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())
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())
end
val 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())
}
final 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 :
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
sessionSsh.close()
sessionSsh.close()
sessionSsh.close()
sessionSsh.close()
sessionSsh.close()
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 :
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
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()
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()
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()
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()
val 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()
final 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 :
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
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()
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()
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()
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()
val 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()
final 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 :
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
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()
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()
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()
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()
val 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()
final 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 :
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const sftp = ssh.initSFTP()
const sftp = ssh.initSFTP()
sftp = ssh.initSFTP()
sftp = ssh.initSFTP()
val sftp = ssh.initSFTP()
final sftp = ssh.initSFTP()
Initialise l'objet SSHSFTP qui est le client de la session.
Créer un nouveau dossier à distance :
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
sftp.createDirectory("chemin/nouveau-dossier")
sftp.createDirectory("chemin/nouveau-dossier")
sftp.createDirectory("chemin/nouveau-dossier")
sftp.createDirectory("chemin/nouveau-dossier")
sftp.createDirectory("chemin/nouveau-dossier")
sftp.createDirectory("chemin/nouveau-dossier")
Crée ou remplace le fichier distant avec le contenu texte fourni :
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
sftp.uploadText("dossier/fichier.txt", "Mon contenu !")
sftp.uploadText("dossier/fichier.txt", "Mon contenu !")
sftp.uploadText("dossier/fichier.txt", "Mon contenu !")
sftp.uploadText("dossier/fichier.txt", "Mon contenu !")
sftp.uploadText("dossier/fichier.txt", "Mon contenu !")
sftp.uploadText("dossier/fichier.txt", "Mon contenu !")
Obtient le contenu texte d'un fichier distant :
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const contenuFichierDistant = sftp.downloadText("dossier/fichier.txt")
_out.println(contenuFichierDistant)
const contenuFichierDistant = sftp.downloadText("dossier/fichier.txt")
_out.println(contenuFichierDistant)
contenuFichierDistant = sftp.downloadText("dossier/fichier.txt")
_out.println(contenuFichierDistant)
contenuFichierDistant = sftp.downloadText("dossier/fichier.txt")
_out.println(contenuFichierDistant)
val contenuFichierDistant = sftp.downloadText("dossier/fichier.txt")
_out.println(contenuFichierDistant)
final contenuFichierDistant = sftp.downloadText("dossier/fichier.txt")
_out.println(contenuFichierDistant)
Supprime définitivement un fichier distant :
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
sftp.deleteFile("dossier/fichier.txt")
sftp.deleteFile("dossier/fichier.txt")
sftp.deleteFile("dossier/fichier.txt")
sftp.deleteFile("dossier/fichier.txt")
sftp.deleteFile("dossier/fichier.txt")
sftp.deleteFile("dossier/fichier.txt")
Supprime définitivement le dossier distant :
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
sftp.deleteDirectory("dossier")
sftp.deleteDirectory("dossier")
sftp.deleteDirectory("dossier")
sftp.deleteDirectory("dossier")
sftp.deleteDirectory("dossier")
sftp.deleteDirectory("dossier")
Liste tout le contenu d'un dossier :
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
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/>")
}
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/>")
}
for i in sftp.list("chemin/dossier"):
if i.directory:
_out.print("Dossier : ")
elif i.regularFile:
_out.print("Fichier : ")
else:
_out.print("Autre : ")
_out.println(i.name)
_out.println("<br/>")
sftp.list("chemin/dossier").each do |i|
if i.directory
_out.print("Dossier : ")
elsif i.regularFile
_out.print("Fichier : ")
else
_out.print("Autre : ")
end
_out.println(i.name)
_out.println("<br/>")
end
sftp.list("chemin/dossier").forEach {
if (it.directory) {
_out.print("Dossier : ")
} else if (it.regularFile) {
_out.print("Fichier : ")
} else {
_out.print("Autre : ")
}
_out.println(it.name)
_out.println("<br/>")
}
for (i in 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 :
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
// 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"))
// 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"))
# 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"))
# 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"))
// 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"))
// 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 :
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
// 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"))
// 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"))
# 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"))
# 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"))
// 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"))
// 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 :
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
sftp.close()
sftp.close()
sftp.close()
sftp.close()
sftp.close()
sftp.close()