Pular para conteúdo

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:

  1. Segurança de Dados: Todo upload é criptografado via SSH (256-bit AES)
  2. Compliance: Atende normas PCI-DSS, HIPAA, LGPD que exigem criptografia
  3. Integridade: SSH garante que arquivo não foi alterado durante transfer
  4. Autenticação Forte: Suporta chaves SSH além de senha

Como funciona internamente?

Quando o SFTP_UPLOAD é executado, o sistema:

  1. Conecta via SSH: Estabelece túnel SSH criptografado (porta 22)
  2. Valida Arquivo Local: Verifica existência do arquivo a enviar
  3. Inicia Transfer: Envia bytes criptografados via canal SSH
  4. Verifica Integridade: SSH confirma checksum do arquivo transferido
  5. Finaliza: Fecha transfer mantendo sessão SSH ativa
  6. Se falhar: Retorna erro detalhado
  7. 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

  1. Dados Financeiros: "Enviar arquivo de pagamentos para banco via SFTP (exigido)"
  2. Informações Médicas: "Upload de prontuários criptografados para servidor hospitalar"
  3. 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)