Pular para o conteúdo principal

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:

const 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:

const 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:

ssh.connect()

Comandos

Para executar comandos é preciso iniciar uma sessão de comandos:

const 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:

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())
}

O objeto retornado pelo comando é o SSHExecResult.

Lembre de fechar sempre a sessão:

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:

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()

Para realizar o envio (upload) de arquivos existentes na aplicação:

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()

Para baixar (download) arquivos do servidor para a aplicação:

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()

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:

const sftp = ssh.initSFTP()

Inicia o objeto SSHSFTP que é o cliente da sessão.

Criar uma nova pasta remotamente:

sftp.createDirectory("caminho/nova-pasta")

Cria ou substituí o arquivo remoto com o conteúdo de texto passado:

sftp.uploadText("pasta/arquivo.txt", "Meu conteúdo!")

Obtém o conteúdo de texto de um arquivo remoto:

const conteudoArquivoRemoto = sftp.downloadText("pasta/arquivo.txt"))
_out.println(conteudoArquivoRemoto)

Apaga definitivamente um arquivo remoto:

sftp.deleteFile("pasta/arquivo.txt")

Apaga definitivamente a pasta remota:

sftp.deleteDirectory("pasta")

Lista todo o conteúdo de uma pasta:

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/>")
}

Retorna uma lista de objetos do tipo SSHFile.

Para realizar o envio (upload) de arquivos existentes na aplicação:

// 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:

// 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:

sftp.close()