SSH Client
Executar comandos no servidor e transferir arquivos.
Introdução
O Netuno tem integrado na sua framework low-code um cliente SSH, que permite conectar com servidores, executar comandos, enviar e receber arquivos, modificar pastas, entre outras operações remotas.
Suporta múltiplas conexões simultâneas, e ainda SCP e SFTP.
Isso graças a implementação Java e open-source
SSHJ, é o que permite ao Netuno
fornecer estas funcionalidades a todas linguagens de script através do recurso _ssh
.
Mais sobre o recurso SSH do Netuno.
Configuração
O primeiro passo será configurar os dados de acesso ao SSH que o Netuno irá utilizar para realizar a conexão.
Navegue dentro da aplicação que está a desenvolver até ao arquivo de configuração de ambiente. Neste exemplo, iremos utilizar o arquivo de desenvolvimento, localizado em:
config/_development.json
Verifique se há configurações para o SSH, se não existir então no fim do arquivo de configuração (em formato JSON) adicione os parâmetros de configuração do SSH, por exemplo:
{
...
"ssh": {
"default": {
"enabled": true,
"host": "meu.servidor.net",
"port": 22,
"username": "root",
"password": "$eCr37"
}
},
...
}
Após salvar as alterações, basta reiniciar o Netuno para assumir as alterações da configuração. Sendo estas as
configurações padrão para a conexão, como o nome de chave default
indica.
Pode adicionar mais configurações de conexão SSH com outras chaves no JSON.
Para adicionar mais configurações de conexão SSH basta repetir o bloco de configuração padrão e trocar a chave
default
por outra à sua escolha, por exemplo:
{
...
"ssh": {
"default": {
"enabled": true,
"host": "meu.servidor.net",
"port": 22,
"username": "root",
"password": "$eCr37"
},
"outro": {
"enabled": true,
"host": "meu.outro-servidor.net",
"port": 22,
"username": "root",
"password": "$eCr37"
}
},
...
}
A configuração acima permite utilizar a conta default
quando for codificado da seguinte forma:
- JavaScript
- Python
- Ruby
- Kotlin
- Groovy
const ssh = _ssh.init()
ssh = _ssh.init()
ssh = _ssh.init()
val ssh = _ssh.init()
def ssh = _ssh.init()
Para utilizar a configuração outro
basta adicionar a chave da configuração como parâmetro da função
_ssh.init()
, da seguinte forma:
- JavaScript
- Python
- Ruby
- Kotlin
- Groovy
const sshOutro = _ssh.init("outro")
sshOutro = _ssh.init("outro")
sshOutro = _ssh.init("outro")
val sshOutro = _ssh.init("outro")
def sshOutro = _ssh.init("outro")
Se não adicionar um nome de configuração como parâmetro será utilizada a configuração da conta
default
.
Conexão
Antes de fazer qualquer coisa é preciso iniciar a conexão SSH:
- JavaScript
- Python
- Ruby
- Kotlin
- Groovy
ssh.connect()
ssh.connect()
ssh.connect()
ssh.connect()
ssh.connect()
Comandos
Para executar comandos é preciso iniciar uma sessão de comandos:
- JavaScript
- Python
- Ruby
- Kotlin
- Groovy
const sshSessao = ssh.initSession()
sshSessao = ssh.initSession()
sshSessao = ssh.initSession()
val sshSessao = ssh.initSession()
def sshSessao = ssh.initSession()
Ao executar um comando é fornecido um objeto que contém o estado da execução e a respectiva saída de dados (output), por exemplo:
- JavaScript
- Python
- Ruby
- Kotlin
- Groovy
const sshComandoResultado = sshSessao.exec("ls -rato")
if (sshComandoResultado.ok) {
_out.println("Executou com sucesso:")
_out.println(sshComandoResultado.output())
} else {
_out.println("O comando falhou:")
_out.println(sshComandoResultado.error())
}
sshComandoResultado = sshSessao.exec("ls -rato")
if sshComandoResultado.ok:
_out.println("Executou com sucesso:")
_out.println(sshComandoResultado.output())
else:
_out.println("O comando falhou:")
_out.println(sshComandoResultado.error())
sshComandoResultado = sshSessao.exec("ls -rato")
if sshComandoResultado.ok
_out.println("Executou com sucesso:")
_out.println(sshComandoResultado.output())
else
_out.println("O comando falhou:")
_out.println(sshComandoResultado.error())
end
val sshComandoResultado = sshSessao.exec("ls -rato")
if (sshComandoResultado.ok) {
_out.println("Executou com sucesso:")
_out.println(sshComandoResultado.output())
} else {
_out.println("O comando falhou:")
_out.println(sshComandoResultado.error())
}
def sshComandoResultado = sshSessao.exec("ls -rato")
if (sshComandoResultado.ok) {
_out.println("Executou com sucesso:")
_out.println(sshComandoResultado.output())
} else {
_out.println("O comando falhou:")
_out.println(sshComandoResultado.error())
}
O objeto retornado pelo comando é o SSHExecResult.
Lembre de fechar sempre a sessão:
- JavaScript
- Python
- Ruby
- Kotlin
- Groovy
sshSessao.close()
sshSessao.close()
sshSessao.close()
sshSessao.close()
sshSessao.close()
SCP
Através do SCP podemos enviar e receber arquivos.
Para criar um arquivo de texto a partir de uma string e baixar conteúdo do arquivo criado, veja o exemplo:
- JavaScript
- Python
- Ruby
- Kotlin
- Groovy
const sshSCP = ssh.initSCP()
// Cria o arquivo de texto.
sshSCP.uploadText("ola.txt", "Olá! Meu conteúdo aqui...")
// Baixa e imprime o conteúdo do arquivo.
_out.println(sshSCP.downloadText("ola.txt"))
sshSCP.close()
sshSCP = ssh.initSCP()
# Cria o arquivo de texto.
sshSCP.uploadText("ola.txt", "Olá! Meu conteúdo aqui...")
# Baixa e imprime o conteúdo do arquivo.
_out.println(sshSCP.downloadText("ola.txt"))
sshSCP.close()
sshSCP = ssh.initSCP()
# Cria o arquivo de texto.
sshSCP.uploadText("ola.txt", "Olá! Meu conteúdo aqui...")
# Baixa e imprime o conteúdo do arquivo.
_out.println(sshSCP.downloadText("ola.txt"))
sshSCP.close()
val sshSCP = ssh.initSCP()
// Cria o arquivo de texto.
sshSCP.uploadText("ola.txt", "Olá! Meu conteúdo aqui...")
// Baixa e imprime o conteúdo do arquivo.
_out.println(sshSCP.downloadText("ola.txt"))
sshSCP.close()
def sshSCP = ssh.initSCP()
// Cria o arquivo de texto.
sshSCP.uploadText("ola.txt", "Olá! Meu conteúdo aqui...")
// Baixa e imprime o conteúdo do arquivo.
_out.println(sshSCP.downloadText("ola.txt"))
sshSCP.close()
Para realizar o envio (upload) de arquivos existentes na aplicação:
- JavaScript
- Python
- Ruby
- Kotlin
- Groovy
const sshSCP = ssh.initSCP()
// Envia um arquivo que está no storage/filesystem.
sshSCP.upload("planilha.xlsx", _storage.filesystem("server", "planilha.xlsx").file())
// Envia um arquivo que está na raíz da aplicação.
sshSCP.upload("documento.pdf", _app.file("documento.pdf"))
sshSCP.close()
sshSCP = ssh.initSCP()
# Envia um arquivo que está no storage/filesystem.
sshSCP.upload("planilha.xlsx", _storage.filesystem("server", "planilha.xlsx").file())
# Envia um arquivo que está na raíz da aplicação.
sshSCP.upload("documento.pdf", _app.file("documento.pdf"))
sshSCP.close()
sshSCP = ssh.initSCP()
# Envia um arquivo que está no storage/filesystem.
sshSCP.upload("planilha.xlsx", _storage.filesystem("server", "planilha.xlsx").file())
# Envia um arquivo que está na raíz da aplicação.
sshSCP.upload("documento.pdf", _app.file("documento.pdf"))
sshSCP.close()
val sshSCP = ssh.initSCP()
// Envia um arquivo que está no storage/filesystem.
sshSCP.upload("planilha.xlsx", _storage.filesystem("server", "planilha.xlsx").file())
// Envia um arquivo que está na raíz da aplicação.
sshSCP.upload("documento.pdf", _app.file("documento.pdf"))
sshSCP.close()
def sshSCP = ssh.initSCP()
// Envia um arquivo que está no storage/filesystem.
sshSCP.upload("planilha.xlsx", _storage.filesystem("server", "planilha.xlsx").file())
// Envia um arquivo que está na raíz da aplicação.
sshSCP.upload("documento.pdf", _app.file("documento.pdf"))
sshSCP.close()
Para baixar (download) arquivos do servidor para a aplicação:
- JavaScript
- Python
- Ruby
- Kotlin
- Groovy
const sshSCP = ssh.initSCP()
// Baixa o arquivo para o storage/filesystem.
sshSCP.download("planilha.xlsx", _storage.filesystem("server", "planilha.xlsx").file())
// Baixa o arquivo para a raíz da aplicação.
sshSCP.download("documento.pdf", _app.file("documento.pdf"))
sshSCP.close()
sshSCP = ssh.initSCP()
# Baixa o arquivo para o storage/filesystem.
sshSCP.download("planilha.xlsx", _storage.filesystem("server", "planilha.xlsx").file())
# Baixa o arquivo para a raíz da aplicação.
sshSCP.download("documento.pdf", _app.file("documento.pdf"))
sshSCP.close()
sshSCP = ssh.initSCP()
# Baixa o arquivo para o storage/filesystem.
sshSCP.download("planilha.xlsx", _storage.filesystem("server", "planilha.xlsx").file())
# Baixa o arquivo para a raíz da aplicação.
sshSCP.download("documento.pdf", _app.file("documento.pdf"))
sshSCP.close()
val sshSCP = ssh.initSCP()
// Baixa o arquivo para o storage/filesystem.
sshSCP.download("planilha.xlsx", _storage.filesystem("server", "planilha.xlsx").file())
// Baixa o arquivo para a raíz da aplicação.
sshSCP.download("documento.pdf", _app.file("documento.pdf"))
sshSCP.close()
def sshSCP = ssh.initSCP()
// Baixa o arquivo para o storage/filesystem.
sshSCP.download("planilha.xlsx", _storage.filesystem("server", "planilha.xlsx").file())
// Baixa o arquivo para a raíz da aplicação.
sshSCP.download("documento.pdf", _app.file("documento.pdf"))
sshSCP.close()
SFTP
O SFTP é uma forma de transferência e manipulação de arquivos e pastas que suporta as mesmas funcionalidades que o FTP, mas utilizando o SSH.
Para iniciar uma nova sessão SFTP:
- JavaScript
- Python
- Ruby
- Kotlin
- Groovy
const sftp = ssh.initSFTP()
sftp = ssh.initSFTP()
sftp = ssh.initSFTP()
val sftp = ssh.initSFTP()
def sftp = ssh.initSFTP()
Inicia o objeto SSHSFTP que é o cliente da sessão.
Criar uma nova pasta remotamente:
- JavaScript
- Python
- Ruby
- Kotlin
- Groovy
sftp.createDirectory("caminho/nova-pasta")
sftp.createDirectory("caminho/nova-pasta")
sftp.createDirectory("caminho/nova-pasta")
sftp.createDirectory("caminho/nova-pasta")
sftp.createDirectory("caminho/nova-pasta")
Cria ou substituí o arquivo remoto com o conteúdo de texto passado:
- JavaScript
- Python
- Ruby
- Kotlin
- Groovy
sftp.uploadText("pasta/arquivo.txt", "Meu conteúdo!")
sftp.uploadText("pasta/arquivo.txt", "Meu conteúdo!")
sftp.uploadText("pasta/arquivo.txt", "Meu conteúdo!")
sftp.uploadText("pasta/arquivo.txt", "Meu conteúdo!")
sftp.uploadText("pasta/arquivo.txt", "Meu conteúdo!")
Obtém o conteúdo de texto de um arquivo remoto:
- JavaScript
- Python
- Ruby
- Kotlin
- Groovy
const conteudoArquivoRemoto = sftp.downloadText("pasta/arquivo.txt"))
_out.println(conteudoArquivoRemoto)
conteudoArquivoRemoto = sftp.downloadText("pasta/arquivo.txt"))
_out.println(conteudoArquivoRemoto)
conteudoArquivoRemoto = sftp.downloadText("pasta/arquivo.txt"))
_out.println(conteudoArquivoRemoto)
val conteudoArquivoRemoto = sftp.downloadText("pasta/arquivo.txt"))
_out.println(conteudoArquivoRemoto)
def conteudoArquivoRemoto = sftp.downloadText("pasta/arquivo.txt"))
_out.println(conteudoArquivoRemoto)
Apaga definitivamente um arquivo remoto:
- JavaScript
- Python
- Ruby
- Kotlin
- Groovy
sftp.deleteFile("pasta/arquivo.txt")
sftp.deleteFile("pasta/arquivo.txt")
sftp.deleteFile("pasta/arquivo.txt")
sftp.deleteFile("pasta/arquivo.txt")
sftp.deleteFile("pasta/arquivo.txt")
Apaga definitivamente a pasta remota:
- JavaScript
- Python
- Ruby
- Kotlin
- Groovy
sftp.deleteDirectory("pasta")
sftp.deleteDirectory("pasta")
sftp.deleteDirectory("pasta")
sftp.deleteDirectory("pasta")
sftp.deleteDirectory("pasta")
Lista todo o conteúdo de uma pasta:
- JavaScript
- Python
- Ruby
- Kotlin
- Groovy
for (const i of sftp.list("caminho/pasta")) {
if (i.directory) {
_out.print("Pasta: ")
} else if (i.regularFile) {
_out.print("Arquivo: ")
} else {
_out.print("Outro: ")
}
_out.println(i.name)
_out.println("<br/>")
}
for i in sftp.list("caminho/pasta":
if i.directory:
_out.print("Pasta: ")
elif i.regularFile:
_out.print("Arquivo: ")
else:
_out.print("Outro: ")
_out.println(i.name)
_out.println("<br/>")
}
sftp.list("caminho/pasta").each do |i|
if i.directory
_out.print("Pasta: ")
elsif i.regularFile
_out.print("Arquivo: ")
else
_out.print("Outro: ")
end
_out.println(i.name)
_out.println("<br/>")
end
sftp.list("caminho/pasta").forEach {
if (it.directory) {
_out.print("Pasta: ")
} else if (it.regularFile) {
_out.print("Arquivo: ")
} else {
_out.print("Outro: ")
}
_out.println(it.name)
_out.println("<br/>")
}
for (i in sftp.list("caminho/pasta")) {
if (i.directory) {
_out.print("Pasta: ")
} else if (i.regularFile) {
_out.print("Arquivo: ")
} else {
_out.print("Outro: ")
}
_out.println(i.name)
_out.println("<br/>")
}
Retorna uma lista de objetos do tipo SSHFile.
Para realizar o envio (upload) de arquivos existentes na aplicação:
- JavaScript
- Python
- Ruby
- Kotlin
- Groovy
// Envia um arquivo que está no storage/filesystem.
sftp.upload("planilha.xlsx", _storage.filesystem("server", "planilha.xlsx").file())
// Envia um arquivo que está na raíz da aplicação.
sftp.upload("documento.pdf", _app.file("documento.pdf"))
# Envia um arquivo que está no storage/filesystem.
sftp.upload("planilha.xlsx", _storage.filesystem("server", "planilha.xlsx").file())
# Envia um arquivo que está na raíz da aplicação.
sftp.upload("documento.pdf", _app.file("documento.pdf"))
# Envia um arquivo que está no storage/filesystem.
sftp.upload("planilha.xlsx", _storage.filesystem("server", "planilha.xlsx").file())
# Envia um arquivo que está na raíz da aplicação.
sftp.upload("documento.pdf", _app.file("documento.pdf"))
// Envia um arquivo que está no storage/filesystem.
sftp.upload("planilha.xlsx", _storage.filesystem("server", "planilha.xlsx").file())
// Envia um arquivo que está na raíz da aplicação.
sftp.upload("documento.pdf", _app.file("documento.pdf"))
// Envia um arquivo que está no storage/filesystem.
sftp.upload("planilha.xlsx", _storage.filesystem("server", "planilha.xlsx").file())
// Envia um arquivo que está na raíz da aplicação.
sftp.upload("documento.pdf", _app.file("documento.pdf"))
Para baixar (download) arquivos do servidor para a aplicação:
- JavaScript
- Python
- Ruby
- Kotlin
- Groovy
// Baixa o arquivo para o storage/filesystem.
sftp.download("planilha.xlsx", _storage.filesystem("server", "planilha.xlsx").file())
// Baixa o arquivo para a raíz da aplicação.
sftp.download("documento.pdf", _app.file("documento.pdf"))
# Baixa o arquivo para o storage/filesystem.
sftp.download("planilha.xlsx", _storage.filesystem("server", "planilha.xlsx").file())
# Baixa o arquivo para a raíz da aplicação.
sftp.download("documento.pdf", _app.file("documento.pdf"))
# Baixa o arquivo para o storage/filesystem.
sftp.download("planilha.xlsx", _storage.filesystem("server", "planilha.xlsx").file())
# Baixa o arquivo para a raíz da aplicação.
sftp.download("documento.pdf", _app.file("documento.pdf"))
// Baixa o arquivo para o storage/filesystem.
sftp.download("planilha.xlsx", _storage.filesystem("server", "planilha.xlsx").file())
// Baixa o arquivo para a raíz da aplicação.
sftp.download("documento.pdf", _app.file("documento.pdf"))
// Baixa o arquivo para o storage/filesystem.
sftp.download("planilha.xlsx", _storage.filesystem("server", "planilha.xlsx").file())
// Baixa o arquivo para a raíz da aplicação.
sftp.download("documento.pdf", _app.file("documento.pdf"))
Lembre de fechar sempre a sessão SFTP:
- JavaScript
- Python
- Ruby
- Kotlin
- Groovy
sftp.close()
sftp.close()
sftp.close()
sftp.close()
sftp.close()