Cliente SSH
Ejecutar comandos en el servidor y transferir archivos.
Introducción
Netuno tiene integrado en su framework low-code un cliente SSH, que permite conectar con servidores, ejecutar comandos, enviar y recibir archivos, modificar carpetas, entre otras operaciones remotas.
Admite múltiples conexiones simultáneas, además de SCP y SFTP.
Esto es gracias a la implementación Java y de código abierto
SSHJ, lo que permite a Netuno
ofrecer estas funcionalidades a todos los lenguajes de script mediante el recurso _ssh.
Más información sobre el recurso SSH de Netuno.
Configuración
El primer paso será configurar los datos de acceso al SSH que Netuno utilizará para realizar la conexión.
Navegue dentro de la aplicación que está desarrollando hasta el archivo de configuración de entorno. En este ejemplo, utilizaremos el archivo de desarrollo, situado en:
config/_development.json
Compruebe si hay configuraciones para SSH; si no existen, añada al final del archivo de configuración (en formato JSON) los parámetros de configuración de SSH, por ejemplo:
{
...
"ssh": {
"default": {
"enabled": true,
"host": "mi.servidor.net",
"port": 22,
"username": "root",
"password": "$eCr37"
}
},
...
}
Después de guardar los cambios, basta con reiniciar Netuno para que asuma los cambios de la configuración. Estas son las
configuraciones predeterminadas para la conexión, como indica el nombre de clave default.
Puede añadir más configuraciones de conexión SSH con otras claves en el JSON.
Para añadir más configuraciones de conexión SSH basta con repetir el bloque de configuración predeterminado y cambiar la clave
default por otra a su elección, por ejemplo:
{
...
"ssh": {
"default": {
"enabled": true,
"host": "mi.servidor.net",
"port": 22,
"username": "root",
"password": "$eCr37"
},
"otro": {
"enabled": true,
"host": "mi.otro-servidor.net",
"port": 22,
"username": "root",
"password": "$eCr37"
}
},
...
}
La configuración anterior permite utilizar la cuenta default cuando se codifique de la siguiente forma:
- 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()
Para utilizar la configuración otro, basta con añadir la clave de la configuración como parámetro de la función
_ssh.init(), de la siguiente forma:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const sshOtro = _ssh.init("otro")
const sshOtro = _ssh.init("otro")
sshOtro = _ssh.init("otro")
sshOtro = _ssh.init("otro")
val sshOtro = _ssh.init("otro")
final sshOtro = _ssh.init("otro")
Si no añade un nombre de configuración como parámetro, se utilizará la configuración de la cuenta
default.
Conexión
Antes de hacer cualquier cosa es necesario iniciar la conexión SSH:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
ssh.connect()
ssh.connect()
ssh.connect()
ssh.connect()
ssh.connect()
ssh.connect()
Comandos
Para ejecutar comandos es necesario iniciar una sesión de comandos:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const sshSesion = ssh.initSession()
const sshSesion = ssh.initSession()
sshSesion = ssh.initSession()
sshSesion = ssh.initSession()
val sshSesion = ssh.initSession()
final sshSesion = ssh.initSession()
Al ejecutar un comando se proporciona un objeto que contiene el estado de la ejecución y su correspondiente salida de datos (output), por ejemplo:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const sshResultadoComando = sshSesion.exec("ls -rato")
if (sshResultadoComando.ok) {
_out.println("Se ejecutó con éxito:")
_out.println(sshResultadoComando.output())
} else {
_out.println("El comando falló:")
_out.println(sshResultadoComando.error())
}
const sshResultadoComando = sshSesion.exec("ls -rato")
if (sshResultadoComando.ok) {
_out.println("Se ejecutó con éxito:")
_out.println(sshResultadoComando.output())
} else {
_out.println("El comando falló:")
_out.println(sshResultadoComando.error())
}
sshResultadoComando = sshSesion.exec("ls -rato")
if sshResultadoComando.ok:
_out.println("Se ejecutó con éxito:")
_out.println(sshResultadoComando.output())
else:
_out.println("El comando falló:")
_out.println(sshResultadoComando.error())
sshResultadoComando = sshSesion.exec("ls -rato")
if sshResultadoComando.ok
_out.println("Se ejecutó con éxito:")
_out.println(sshResultadoComando.output())
else
_out.println("El comando falló:")
_out.println(sshResultadoComando.error())
end
val sshResultadoComando = sshSesion.exec("ls -rato")
if (sshResultadoComando.ok) {
_out.println("Se ejecutó con éxito:")
_out.println(sshResultadoComando.output())
} else {
_out.println("El comando falló:")
_out.println(sshResultadoComando.error())
}
final sshResultadoComando = sshSesion.exec("ls -rato")
if (sshResultadoComando.ok) {
_out.println("Se ejecutó con éxito:")
_out.println(sshResultadoComando.output())
} else {
_out.println("El comando falló:")
_out.println(sshResultadoComando.error())
}
El objeto devuelto por el comando es SSHExecResult.
Recuerde cerrar siempre la sesión:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
sshSesion.close()
sshSesion.close()
sshSesion.close()
sshSesion.close()
sshSesion.close()
sshSesion.close()
SCP
Mediante SCP podemos enviar y recibir archivos.
Para crear un archivo de texto a partir de una cadena y descargar el contenido del archivo creado, vea el ejemplo:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const sshSCP = ssh.initSCP()
// Crea el archivo de texto.
sshSCP.uploadText("hola.txt", "¡Hola! Mi contenido aquí...")
// Descarga e imprime el contenido del archivo.
_out.println(sshSCP.downloadText("hola.txt"))
sshSCP.close()
const sshSCP = ssh.initSCP()
// Crea el archivo de texto.
sshSCP.uploadText("hola.txt", "¡Hola! Mi contenido aquí...")
// Descarga e imprime el contenido del archivo.
_out.println(sshSCP.downloadText("hola.txt"))
sshSCP.close()
sshSCP = ssh.initSCP()
# Crea el archivo de texto.
sshSCP.uploadText("hola.txt", "¡Hola! Mi contenido aquí...")
# Descarga e imprime el contenido del archivo.
_out.println(sshSCP.downloadText("hola.txt"))
sshSCP.close()
sshSCP = ssh.initSCP()
# Crea el archivo de texto.
sshSCP.uploadText("hola.txt", "¡Hola! Mi contenido aquí...")
# Descarga e imprime el contenido del archivo.
_out.println(sshSCP.downloadText("hola.txt"))
sshSCP.close()
val sshSCP = ssh.initSCP()
// Crea el archivo de texto.
sshSCP.uploadText("hola.txt", "¡Hola! Mi contenido aquí...")
// Descarga e imprime el contenido del archivo.
_out.println(sshSCP.downloadText("hola.txt"))
sshSCP.close()
final sshSCP = ssh.initSCP()
// Crea el archivo de texto.
sshSCP.uploadText("hola.txt", "¡Hola! Mi contenido aquí...")
// Descarga e imprime el contenido del archivo.
_out.println(sshSCP.downloadText("hola.txt"))
sshSCP.close()
Para realizar el envío (upload) de archivos existentes en la aplicación:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const sshSCP = ssh.initSCP()
// Envía un archivo que está en storage/filesystem.
sshSCP.upload("hoja_calculo.xlsx", _storage.filesystem("server", "hoja_calculo.xlsx").file())
// Envía un archivo que está en la raíz de la aplicación.
sshSCP.upload("documento.pdf", _app.file("documento.pdf"))
sshSCP.close()
const sshSCP = ssh.initSCP()
// Envía un archivo que está en storage/filesystem.
sshSCP.upload("hoja_calculo.xlsx", _storage.filesystem("server", "hoja_calculo.xlsx").file())
// Envía un archivo que está en la raíz de la aplicación.
sshSCP.upload("documento.pdf", _app.file("documento.pdf"))
sshSCP.close()
sshSCP = ssh.initSCP()
# Envía un archivo que está en storage/filesystem.
sshSCP.upload("hoja_calculo.xlsx", _storage.filesystem("server", "hoja_calculo.xlsx").file())
# Envía un archivo que está en la raíz de la aplicación.
sshSCP.upload("documento.pdf", _app.file("documento.pdf"))
sshSCP.close()
sshSCP = ssh.initSCP()
# Envía un archivo que está en storage/filesystem.
sshSCP.upload("hoja_calculo.xlsx", _storage.filesystem("server", "hoja_calculo.xlsx").file())
# Envía un archivo que está en la raíz de la aplicación.
sshSCP.upload("documento.pdf", _app.file("documento.pdf"))
sshSCP.close()
val sshSCP = ssh.initSCP()
// Envía un archivo que está en storage/filesystem.
sshSCP.upload("hoja_calculo.xlsx", _storage.filesystem("server", "hoja_calculo.xlsx").file())
// Envía un archivo que está en la raíz de la aplicación.
sshSCP.upload("documento.pdf", _app.file("documento.pdf"))
sshSCP.close()
final sshSCP = ssh.initSCP()
// Envía un archivo que está en storage/filesystem.
sshSCP.upload("hoja_calculo.xlsx", _storage.filesystem("server", "hoja_calculo.xlsx").file())
// Envía un archivo que está en la raíz de la aplicación.
sshSCP.upload("documento.pdf", _app.file("documento.pdf"))
sshSCP.close()
Para descargar (download) archivos del servidor a la aplicación:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const sshSCP = ssh.initSCP()
// Descarga el archivo en storage/filesystem.
sshSCP.download("hoja_calculo.xlsx", _storage.filesystem("server", "hoja_calculo.xlsx").file())
// Descarga el archivo en la raíz de la aplicación.
sshSCP.download("documento.pdf", _app.file("documento.pdf"))
sshSCP.close()
const sshSCP = ssh.initSCP()
// Descarga el archivo en storage/filesystem.
sshSCP.download("hoja_calculo.xlsx", _storage.filesystem("server", "hoja_calculo.xlsx").file())
// Descarga el archivo en la raíz de la aplicación.
sshSCP.download("documento.pdf", _app.file("documento.pdf"))
sshSCP.close()
sshSCP = ssh.initSCP()
# Descarga el archivo en storage/filesystem.
sshSCP.download("hoja_calculo.xlsx", _storage.filesystem("server", "hoja_calculo.xlsx").file())
# Descarga el archivo en la raíz de la aplicación.
sshSCP.download("documento.pdf", _app.file("documento.pdf"))
sshSCP.close()
sshSCP = ssh.initSCP()
# Descarga el archivo en storage/filesystem.
sshSCP.download("hoja_calculo.xlsx", _storage.filesystem("server", "hoja_calculo.xlsx").file())
# Descarga el archivo en la raíz de la aplicación.
sshSCP.download("documento.pdf", _app.file("documento.pdf"))
sshSCP.close()
val sshSCP = ssh.initSCP()
// Descarga el archivo en storage/filesystem.
sshSCP.download("hoja_calculo.xlsx", _storage.filesystem("server", "hoja_calculo.xlsx").file())
// Descarga el archivo en la raíz de la aplicación.
sshSCP.download("documento.pdf", _app.file("documento.pdf"))
sshSCP.close()
final sshSCP = ssh.initSCP()
// Descarga el archivo en storage/filesystem.
sshSCP.download("hoja_calculo.xlsx", _storage.filesystem("server", "hoja_calculo.xlsx").file())
// Descarga el archivo en la raíz de la aplicación.
sshSCP.download("documento.pdf", _app.file("documento.pdf"))
sshSCP.close()
SFTP
SFTP es una forma de transferencia y manipulación de archivos y carpetas que admite las mismas funcionalidades que FTP, pero utilizando SSH.
Para iniciar una nueva sesión 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()
Inicia el objeto SSHSFTP que es el cliente de la sesión.
Crear una nueva carpeta de forma remota:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
sftp.createDirectory("ruta/nueva-carpeta")
sftp.createDirectory("ruta/nueva-carpeta")
sftp.createDirectory("ruta/nueva-carpeta")
sftp.createDirectory("ruta/nueva-carpeta")
sftp.createDirectory("ruta/nueva-carpeta")
sftp.createDirectory("ruta/nueva-carpeta")
Crea o sustituye el archivo remoto con el contenido de texto pasado:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
sftp.uploadText("carpeta/archivo.txt", "¡Mi contenido!")
sftp.uploadText("carpeta/archivo.txt", "¡Mi contenido!")
sftp.uploadText("carpeta/archivo.txt", "¡Mi contenido!")
sftp.uploadText("carpeta/archivo.txt", "¡Mi contenido!")
sftp.uploadText("carpeta/archivo.txt", "¡Mi contenido!")
sftp.uploadText("carpeta/archivo.txt", "¡Mi contenido!")
Obtiene el contenido de texto de un archivo remoto:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const contenidoArchivoRemoto = sftp.downloadText("carpeta/archivo.txt")
_out.println(contenidoArchivoRemoto)
const contenidoArchivoRemoto = sftp.downloadText("carpeta/archivo.txt")
_out.println(contenidoArchivoRemoto)
contenidoArchivoRemoto = sftp.downloadText("carpeta/archivo.txt")
_out.println(contenidoArchivoRemoto)
contenidoArchivoRemoto = sftp.downloadText("carpeta/archivo.txt")
_out.println(contenidoArchivoRemoto)
val contenidoArchivoRemoto = sftp.downloadText("carpeta/archivo.txt")
_out.println(contenidoArchivoRemoto)
final contenidoArchivoRemoto = sftp.downloadText("carpeta/archivo.txt")
_out.println(contenidoArchivoRemoto)
Elimina definitivamente un archivo remoto:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
sftp.deleteFile("carpeta/archivo.txt")
sftp.deleteFile("carpeta/archivo.txt")
sftp.deleteFile("carpeta/archivo.txt")
sftp.deleteFile("carpeta/archivo.txt")
sftp.deleteFile("carpeta/archivo.txt")
sftp.deleteFile("carpeta/archivo.txt")
Elimina definitivamente la carpeta remota:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
sftp.deleteDirectory("carpeta")
sftp.deleteDirectory("carpeta")
sftp.deleteDirectory("carpeta")
sftp.deleteDirectory("carpeta")
sftp.deleteDirectory("carpeta")
sftp.deleteDirectory("carpeta")
Lista todo el contenido de una carpeta:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
for (const i of sftp.list("ruta/carpeta")) {
if (i.directory) {
_out.print("Carpeta: ")
} else if (i.regularFile) {
_out.print("Archivo: ")
} else {
_out.print("Otro: ")
}
_out.println(i.name)
_out.println("<br/>")
}
for (const i of sftp.list("ruta/carpeta")) {
if (i.directory) {
_out.print("Carpeta: ")
} else if (i.regularFile) {
_out.print("Archivo: ")
} else {
_out.print("Otro: ")
}
_out.println(i.name)
_out.println("<br/>")
}
for i in sftp.list("ruta/carpeta"):
if i.directory:
_out.print("Carpeta: ")
elif i.regularFile:
_out.print("Archivo: ")
else:
_out.print("Otro: ")
_out.println(i.name)
_out.println("<br/>")
sftp.list("ruta/carpeta").each do |i|
if i.directory
_out.print("Carpeta: ")
elsif i.regularFile
_out.print("Archivo: ")
else
_out.print("Otro: ")
end
_out.println(i.name)
_out.println("<br/>")
end
sftp.list("ruta/carpeta").forEach {
if (it.directory) {
_out.print("Carpeta: ")
} else if (it.regularFile) {
_out.print("Archivo: ")
} else {
_out.print("Otro: ")
}
_out.println(it.name)
_out.println("<br/>")
}
for (i in sftp.list("ruta/carpeta")) {
if (i.directory) {
_out.print("Carpeta: ")
} else if (i.regularFile) {
_out.print("Archivo: ")
} else {
_out.print("Otro: ")
}
_out.println(i.name)
_out.println("<br/>")
}
Devuelve una lista de objetos del tipo SSHFile.
Para realizar el envío (upload) de archivos existentes en la aplicación:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
// Envía un archivo que está en storage/filesystem.
sftp.upload("hoja_calculo.xlsx", _storage.filesystem("server", "hoja_calculo.xlsx").file())
// Envía un archivo que está en la raíz de la aplicación.
sftp.upload("documento.pdf", _app.file("documento.pdf"))
// Envía un archivo que está en storage/filesystem.
sftp.upload("hoja_calculo.xlsx", _storage.filesystem("server", "hoja_calculo.xlsx").file())
// Envía un archivo que está en la raíz de la aplicación.
sftp.upload("documento.pdf", _app.file("documento.pdf"))
# Envía un archivo que está en storage/filesystem.
sftp.upload("hoja_calculo.xlsx", _storage.filesystem("server", "hoja_calculo.xlsx").file())
# Envía un archivo que está en la raíz de la aplicación.
sftp.upload("documento.pdf", _app.file("documento.pdf"))
# Envía un archivo que está en storage/filesystem.
sftp.upload("hoja_calculo.xlsx", _storage.filesystem("server", "hoja_calculo.xlsx").file())
# Envía un archivo que está en la raíz de la aplicación.
sftp.upload("documento.pdf", _app.file("documento.pdf"))
// Envía un archivo que está en storage/filesystem.
sftp.upload("hoja_calculo.xlsx", _storage.filesystem("server", "hoja_calculo.xlsx").file())
// Envía un archivo que está en la raíz de la aplicación.
sftp.upload("documento.pdf", _app.file("documento.pdf"))
// Envía un archivo que está en storage/filesystem.
sftp.upload("hoja_calculo.xlsx", _storage.filesystem("server", "hoja_calculo.xlsx").file())
// Envía un archivo que está en la raíz de la aplicación.
sftp.upload("documento.pdf", _app.file("documento.pdf"))
Para descargar (download) archivos del servidor a la aplicación:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
// Descarga el archivo en storage/filesystem.
sftp.download("hoja_calculo.xlsx", _storage.filesystem("server", "hoja_calculo.xlsx").file())
// Descarga el archivo en la raíz de la aplicación.
sftp.download("documento.pdf", _app.file("documento.pdf"))
// Descarga el archivo en storage/filesystem.
sftp.download("hoja_calculo.xlsx", _storage.filesystem("server", "hoja_calculo.xlsx").file())
// Descarga el archivo en la raíz de la aplicación.
sftp.download("documento.pdf", _app.file("documento.pdf"))
# Descarga el archivo en storage/filesystem.
sftp.download("hoja_calculo.xlsx", _storage.filesystem("server", "hoja_calculo.xlsx").file())
# Descarga el archivo en la raíz de la aplicación.
sftp.download("documento.pdf", _app.file("documento.pdf"))
# Descarga el archivo en storage/filesystem.
sftp.download("hoja_calculo.xlsx", _storage.filesystem("server", "hoja_calculo.xlsx").file())
# Descarga el archivo en la raíz de la aplicación.
sftp.download("documento.pdf", _app.file("documento.pdf"))
// Descarga el archivo en storage/filesystem.
sftp.download("hoja_calculo.xlsx", _storage.filesystem("server", "hoja_calculo.xlsx").file())
// Descarga el archivo en la raíz de la aplicación.
sftp.download("documento.pdf", _app.file("documento.pdf"))
// Descarga el archivo en storage/filesystem.
sftp.download("hoja_calculo.xlsx", _storage.filesystem("server", "hoja_calculo.xlsx").file())
// Descarga el archivo en la raíz de la aplicación.
sftp.download("documento.pdf", _app.file("documento.pdf"))
Recuerde cerrar siempre la sesión SFTP:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
sftp.close()
sftp.close()
sftp.close()
sftp.close()
sftp.close()
sftp.close()