SFTP_CONNECT - Conectar via SSH File Transfer Protocol
O que é este Node?
O SFTP_CONNECT é o node responsável por estabelecer conexão segura com servidores SFTP usando protocolo SSH. SFTP é completamente diferente de FTP/FTPS - usa SSH (porta 22) ao invés de FTP (porta 21).
Por que este Node existe?
SFTP é o padrão moderno para transferência segura de arquivos. O SFTP_CONNECT existe para:
- Segurança Máxima: Todas as conexões e dados são criptografados via SSH
- Autenticação Forte: Suporta chaves SSH além de senha
- Conformidade: Muitas empresas e órgãos governamentais exigem SFTP
- Firewall-Friendly: Usa apenas porta 22 (SSH), mais fácil de configurar em firewalls
Diferença: FTP vs FTPS vs SFTP
| Protocolo | Porta Padrão | Segurança | Tecnologia Base |
|---|---|---|---|
| FTP | 21 | ❌ Nenhuma (texto puro) | File Transfer Protocol |
| FTPS | 990 ou 21 | ⚠️ SSL/TLS opcional | FTP + SSL/TLS |
| SFTP | 22 | ✅ Sempre criptografado | SSH File Transfer |
IMPORTANTE: SFTP ≠ FTPS! São protocolos completamente diferentes: - FTPS = FTP com camada SSL/TLS (extensão do FTP) - SFTP = Subsistema do SSH (nada a ver com FTP)
Como funciona internamente?
Quando o SFTP_CONNECT é executado, o sistema:
- Inicia Handshake SSH: Conecta na porta 22 e negocia criptografia
- Autentica via SSH: Usa senha ou chave privada SSH
- Estabelece Túnel Seguro: Todo tráfego é criptografado end-to-end
- Inicia Subsistema SFTP: Ativa protocolo de transferência dentro do SSH
- Mantém Conexão: Sessão SSH permanece aberta para operações
- Se falhar: Retorna erro (credenciais inválidas, porta bloqueada, host não alcançável)
- Se sucesso: Conexão SFTP segura estabelecida
Código interno (sftp-executor.service.ts - não implementado ainda):
// NOTA: Este executor ainda não existe no código.
// Seria necessário criar sftp-executor.service.ts usando biblioteca 'ssh2-sftp-client'
import * as SFTP from 'ssh2-sftp-client';
private async connectSFTP(config: SFTPConfig): Promise<SFTP> {
const sftp = new SFTP();
await sftp.connect({
host: config.host,
port: config.port || 22,
username: config.username,
password: config.password,
// ou privateKey: fs.readFileSync('/path/to/key')
});
return sftp;
}
Quando você DEVE usar este Node?
Use SFTP_CONNECT sempre que precisar de transferência segura de arquivos via SSH:
Casos de uso
- Dados Bancários: "Enviar arquivos de pagamento para banco via SFTP (exigido por regulação)"
- Dados Médicos: "Transferir prontuários eletrônicos com criptografia obrigatória"
- Compliance PCI-DSS: "Enviar relatórios de transações de cartão via SFTP seguro"
Quando NÃO usar SFTP_CONNECT
- Servidor Não Suporta SSH: Alguns servidores antigos só têm FTP. Use FTP_CONNECT
- Desenvolvimento Local: Para testes rápidos, FTP pode ser mais simples de configurar
- Performance Crítica: FTP pode ser ligeiramente mais rápido (sem overhead de criptografia)
Parâmetros Detalhados
host (string, obrigatório)
O que é: Endereço do servidor SFTP (SSH).
Padrão: Nenhum (obrigatório)
Flow completo para testar:
{
"name": "Teste SFTP Connect - Host",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "sftp_1",
"type": "sftp",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Conectar SFTP",
"parameters": {
"host": "sftp.example.com",
"port": 22,
"username": "sftpuser",
"password": "securepass",
"operation": "list",
"remotePath": "/",
"outputVariable": "sftp_connection"
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Confirmar Conexão",
"parameters": {
"message": "🔒 Conectado via SSH ao servidor: {{sftp_connection.host}}"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 700, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "sftp_1" },
{ "source": "sftp_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Teste: Inicie o flow. Sistema deve conectar via SSH na porta 22.
port (number, opcional)
O que é: Porta TCP do servidor SSH.
Padrão: 22 (porta padrão SSH/SFTP)
username (string, obrigatório)
O que é: Nome de usuário SSH para autenticação.
Padrão: Nenhum (obrigatório)
password (string, obrigatório)
O que é: Senha SSH ou passphrase da chave privada.
Padrão: Nenhum (obrigatório se não usar chave SSH)
privateKey (string, opcional)
O que é: Caminho para arquivo de chave privada SSH (autenticação por chave).
Padrão: Nenhum (use password OU privateKey)
Flow completo para testar:
{
"name": "SFTP com Chave SSH",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "sftp_1",
"type": "sftp",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Conectar com Chave SSH",
"parameters": {
"host": "sftp.secure.com",
"port": 22,
"username": "deploy",
"privateKey": "/home/user/.ssh/id_rsa",
"operation": "list",
"remotePath": "/"
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Confirmar",
"parameters": {
"message": "🔐 Autenticado via chave SSH!"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 700, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "sftp_1" },
{ "source": "sftp_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Teste: Usa chave SSH ao invés de senha (mais seguro).
Parâmetros
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| host | string | Sim | Endereço do servidor SFTP/SSH |
| port | number | Não | Porta TCP (padrão: 22) |
| username | string | Sim | Nome de usuário SSH |
| password | string | Condicional | Senha (obrigatório se não usar privateKey) |
| privateKey | string | Condicional | Caminho da chave SSH (obrigatório se não usar password) |
| operation | string | Sim | Operação: list (para testar conexão) |
| remotePath | string | Não | Caminho remoto (padrão: /) |
| outputVariable | string | Não | Variável de resultado (padrão: sftp_result) |
Exemplo 1: Conexão SFTP Segura com Senha
Objetivo: Conectar a servidor SFTP e listar arquivos usando autenticação por senha
JSON para Importar
{
"name": "Conexão SFTP com Senha",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "sftp_1",
"type": "sftp",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Conectar SFTP",
"parameters": {
"host": "sftp.banco.com.br",
"port": 22,
"username": "empresa_cliente",
"password": "SecureP@ss123",
"operation": "list",
"remotePath": "/",
"outputVariable": "file_list"
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Mostrar Resultado",
"parameters": {
"message": "🔒 Conexão SSH segura estabelecida!\nEncontrados {{file_list.count}} arquivos."
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 700, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "sftp_1" },
{ "source": "sftp_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Saída esperada:
Sistema: 🔒 Conexão SSH segura estabelecida!
Encontrados 8 arquivos.
Exemplo 2: Autenticação via Chave SSH (Mais Seguro)
Objetivo: Conectar usando chave privada SSH ao invés de senha
JSON para Importar
{
"name": "SFTP com Chave SSH",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "variable_1",
"type": "variable",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Configurar Chave",
"parameters": {
"variableName": "ssh_key_path",
"value": "/home/deploy/.ssh/id_ed25519"
}
}
},
{
"id": "sftp_1",
"type": "sftp",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Conectar com Chave",
"parameters": {
"host": "sftp.producao.com",
"port": 22,
"username": "deploy_bot",
"privateKey": "{{ssh_key_path}}",
"operation": "list",
"remotePath": "/app/uploads/",
"outputVariable": "connection"
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Confirmar",
"parameters": {
"message": "✅ Autenticação por chave SSH bem-sucedida!\nSem senha transmitida pela rede."
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 900, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "variable_1" },
{ "source": "variable_1", "target": "sftp_1" },
{ "source": "sftp_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Saída esperada:
Sistema: ✅ Autenticação por chave SSH bem-sucedida!
Sem senha transmitida pela rede.
Resposta do Node
{
"success": true,
"data": {
"sftp_result": {
"success": true,
"path": "/",
"files": [],
"count": 0,
"protocol": "sftp",
"sshVersion": "OpenSSH_8.2"
},
"operation": "list",
"host": "sftp.example.com",
"timestamp": "2025-01-15T10:30:00.000Z"
},
"executionTime": 987
}
Boas Práticas
✅ SIM:
- Use SFTP ao invés de FTP sempre que possível (segurança)
- Prefira autenticação por chave SSH ao invés de senha
- Use porta 22 padrão (ou customize se necessário)
- Verifique fingerprint SSH na primeira conexão
- Armazene chaves SSH com permissões restritas (chmod 600)
❌ NÃO:
- Não confunda SFTP com FTPS (são protocolos diferentes)
- Não use senhas fracas em conexões SFTP
- Não compartilhe chaves privadas SSH
- Não desabilite verificação de host key (risco de man-in-the-middle)
Dicas
💡 Dica 1: SFTP = SSH File Transfer Protocol (porta 22). FTPS = FTP + SSL (porta 990). São protocolos completamente diferentes!
💡 Dica 2: Para gerar chave SSH: ssh-keygen -t ed25519 -C "seu@email.com". Depois adicione chave pública no servidor.
💡 Dica 3: SFTP é sempre criptografado (100% seguro). FTP é sempre texto puro (0% seguro). FTPS é FTP com SSL (seguro se configurado).
💡 Dica 4: Maioria dos bancos e instituições financeiras exige SFTP por segurança e compliance.
Próximos Nodes
→ SFTP_UPLOAD - Enviar arquivo via SFTP seguro → SFTP_DOWNLOAD - Baixar arquivo via SFTP → SFTP_LIST - Listar arquivos no servidor SFTP → FTP_CONNECT - Conexão FTP padrão (menos seguro)