SSH - Cliente
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, que é o que permite ao Netuno fornecer estas funcionalidadas 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 ambiente de desenvolvimento localizado em:
config/_development.json
Verifique se já não existe configurações para o SSH, se não existir ainda então no fim do arquivo de configuração (em formato JSON) adicione os parâmetros de configuração do SSH:
{
...
"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 indica o nome default
.
Pode adicionar mais configurações de conexão SSH, mas apenas uma poderá ser definida como padrão.
Para adicionar mais configurações de conexão SSH basta repetir o bloco de configuração padrão e trocar o nome default
por um outro nome à sua escolha, como 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"
}
},
...
}
Uma configuração semelhante ao exemplo acima vai permitir utilizar a conta default quando for chamada da seguinte forma no código:
const ssh = _ssh.init()
E para utilizar a configuração outror
basta adicionar o nome da configuração como parâmetro à 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 sempre a conta default.
Conexão
Antes de fazer qualquer coisa é preciso iniciar a conexão SSH:
ssh.connect();
Comandos
Para executar comandos é prciso iniciar uma sessão de comandos:
const sshSessao = ssh.initSession();
Ao executar um comando é fornecido um objeto que contém o estado e a saída de dados.
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
const sshSCP = ssh.initSCP();
sshSCP.uploadText("test-scp-js.txt", "Hi world!");
_out.println(sshSCP.downloadText("test-scp-js.txt"));
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 de cliente da sessão sendo do tipo SSHSFTP.
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.isDirectory()) {
_out.print('Pasta: ');
} else if (i.isRegularFile()) {
_out.print('Arquivo: ');
} else {
_out.print('Outro: ');
}
_out.printlsn(i.getName());
_out.println('<br/>');
}
Retorna uma lista de objetos do tipo SSHFile.
Lembre de fechar sempre a sessão SFTP:
sftp.close();