SFTP_UPLOAD - Enviar Arquivo via SSH File Transfer Protocol
O que é este Node?
O SFTP_UPLOAD é o node responsável por enviar arquivos de forma segura para servidor SFTP usando protocolo SSH. Equivalente ao FTP_UPLOAD, mas com criptografia end-to-end obrigatória.
Por que este Node existe?
Transferir dados sensíveis requer criptografia. O SFTP_UPLOAD existe para:
- Segurança de Dados: Todo upload é criptografado via SSH (256-bit AES)
- Compliance: Atende normas PCI-DSS, HIPAA, LGPD que exigem criptografia
- Integridade: SSH garante que arquivo não foi alterado durante transfer
- Autenticação Forte: Suporta chaves SSH além de senha
Como funciona internamente?
Quando o SFTP_UPLOAD é executado, o sistema:
- Conecta via SSH: Estabelece túnel SSH criptografado (porta 22)
- Valida Arquivo Local: Verifica existência do arquivo a enviar
- Inicia Transfer: Envia bytes criptografados via canal SSH
- Verifica Integridade: SSH confirma checksum do arquivo transferido
- Finaliza: Fecha transfer mantendo sessão SSH ativa
- Se falhar: Retorna erro detalhado
- Se sucesso: Confirma upload com tamanho e timestamp
Código interno (sftp-executor.service.ts - não implementado ainda):
// NOTA: Implementação necessária usando ssh2-sftp-client
private async uploadFile(sftp: SFTP, localPath: string, remotePath: string): Promise<any> {
if (!fs.existsSync(localPath)) {
throw new Error(`Local file not found: ${localPath}`);
}
await sftp.put(localPath, remotePath);
return {
success: true,
localPath,
remotePath,
size: fs.statSync(localPath).size,
uploadedAt: new Date().toISOString(),
encrypted: true,
protocol: 'sftp'
};
}
Quando você DEVE usar este Node?
Use SFTP_UPLOAD sempre que precisar de enviar dados sensíveis com segurança:
Casos de uso
- Dados Financeiros: "Enviar arquivo de pagamentos para banco via SFTP (exigido)"
- Informações Médicas: "Upload de prontuários criptografados para servidor hospitalar"
- Compliance: "Enviar relatórios PCI-DSS para auditoria via SFTP seguro"
Quando NÃO usar SFTP_UPLOAD
- Servidor Não Suporta SSH: Use FTP_UPLOAD se servidor só tem FTP
- Dados Públicos: Para arquivos públicos, FTP pode ser mais simples
- Performance Crítica: SFTP tem pequeno overhead de criptografia
Parâmetros
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| host | string | Sim | Endereço do servidor SFTP |
| port | number | Não | Porta SSH (padrão: 22) |
| username | string | Sim | Usuário SSH |
| password | string | Condicional | Senha (ou use privateKey) |
| privateKey | string | Condicional | Chave SSH privada |
| operation | string | Sim | Deve ser "upload" |
| localFilePath | string | Sim | Arquivo local a enviar |
| remoteFilePath | string | Sim | Destino no servidor remoto |
| outputVariable | string | Não | Variável de resultado (padrão: sftp_result) |
Exemplo 1: Upload Seguro de Arquivo Financeiro
Objetivo: Enviar arquivo de pagamentos para banco com criptografia SSH
JSON para Importar
{
"name": "Upload SFTP Pagamentos",
"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": "Upload Seguro",
"parameters": {
"host": "sftp.bancodobrasil.com.br",
"port": 22,
"username": "empresa_cnpj",
"password": "SecurePass@2025",
"operation": "upload",
"localFilePath": "/tmp/pagamentos_lote.txt",
"remoteFilePath": "/incoming/pag_2025-01-15.txt",
"outputVariable": "upload_resultado"
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Confirmar",
"parameters": {
"message": "🔒✅ Arquivo enviado com segurança!\nTamanho: {{upload_resultado.size}} bytes\nCriptografia: SSH 256-bit"
}
}
},
{
"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: 🔒✅ Arquivo enviado com segurança!
Tamanho: 2048576 bytes
Criptografia: SSH 256-bit
Resposta do Node
{
"success": true,
"data": {
"sftp_result": {
"success": true,
"localPath": "/tmp/pagamentos_lote.txt",
"remotePath": "/incoming/pag_2025-01-15.txt",
"size": 2048576,
"uploadedAt": "2025-01-15T14:30:00.000Z",
"encrypted": true,
"protocol": "sftp"
},
"operation": "upload",
"host": "sftp.bancodobrasil.com.br",
"timestamp": "2025-01-15T14:30:00.000Z"
},
"executionTime": 2345
}
Boas Práticas
✅ SIM:
- Use SFTP para dados financeiros, médicos ou pessoais
- Prefira chave SSH ao invés de senha
- Verifique tamanho do arquivo após upload
- Use SFTP_UPLOAD + SFTP_LIST para confirmar
❌ NÃO:
- Não use FTP para dados sensíveis (use SFTP)
- Não exponha senhas em logs
- Não ignore erros de upload
Dicas
💡 Dica 1: SFTP_UPLOAD é 100% criptografado. Dados nunca trafegam em texto puro.
💡 Dica 2: Bancos brasileiros geralmente exigem SFTP (não aceitam FTP).
💡 Dica 3: Para upload de múltiplos arquivos, combine LOOP + SFTP_UPLOAD.
Próximos Nodes
→ SFTP_DOWNLOAD - Baixar via SFTP → SFTP_LIST - Listar após upload → SFTP_DELETE - Apagar arquivo remoto → FTP_UPLOAD - Upload FTP (menos seguro)