Pular para conteúdo

SFTP_DOWNLOAD - Baixar Arquivo via SSH File Transfer Protocol

O que é este Node?

O SFTP_DOWNLOAD é o node responsável por baixar arquivos de forma segura de servidor SFTP usando protocolo SSH. Equivalente ao FTP_DOWNLOAD, mas com criptografia garantida.

Por que este Node existe?

Receber dados confidenciais requer proteção durante transferência. O SFTP_DOWNLOAD existe para:

  1. Proteção de Dados: Download criptografado end-to-end via SSH
  2. Compliance Regulatório: Atende exigências de segurança (LGPD, HIPAA, PCI-DSS)
  3. Verificação de Integridade: SSH valida checksum do arquivo automaticamente
  4. Auditoria: Logs de acesso SSH rastreiam todos os downloads

Como funciona internamente?

Quando o SFTP_DOWNLOAD é executado, o sistema:

  1. Conecta via SSH: Estabelece túnel criptografado
  2. Valida Arquivo Remoto: Verifica existência no servidor
  3. Cria Diretório Local: Prepara destino do arquivo
  4. Transfere Criptografado: Baixa via canal SSH seguro
  5. Valida Integridade: Confirma checksum
  6. Se falhar: Retorna erro detalhado
  7. Se sucesso: Arquivo baixado e validado

Código interno (sftp-executor.service.ts - não implementado ainda):

private async downloadFile(sftp: SFTP, remotePath: string, localPath: string): Promise<any> {
  const localDir = path.dirname(localPath);
  if (!fs.existsSync(localDir)) {
    fs.mkdirSync(localDir, { recursive: true });
  }

  await sftp.get(remotePath, localPath);

  return {
    success: true,
    remotePath,
    localPath,
    size: fs.statSync(localPath).size,
    downloadedAt: new Date().toISOString(),
    encrypted: true,
    protocol: 'sftp'
  };
}

Quando você DEVE usar este Node?

Use SFTP_DOWNLOAD sempre que precisar de baixar dados sensíveis com segurança:

Casos de uso

  1. Extratos Bancários: "Baixar extratos do banco via SFTP criptografado"
  2. Notas Fiscais: "Download de XMLs de NF-e de servidor contábil via SFTP"
  3. Dados Médicos: "Baixar resultados de exames em formato DICOM via SFTP"

Quando NÃO usar SFTP_DOWNLOAD

  • Servidor FTP-only: Se servidor não tem SSH, use FTP_DOWNLOAD
  • Arquivos Públicos: Para downloads públicos, HTTP/API pode ser mais adequado

Parâmetros

Campo Tipo Obrigatório Descrição
host string Sim Endereço servidor SFTP
port number Não Porta SSH (padrão: 22)
username string Sim Usuário SSH
password string Condicional Senha (ou privateKey)
privateKey string Condicional Chave SSH
operation string Sim Deve ser "download"
remoteFilePathDownload string Sim Arquivo remoto
localFilePathDownload string Sim Destino local
outputVariable string Não Variável resultado

Exemplo 1: Download Seguro de Extrato Bancário

Objetivo: Baixar extrato diário do banco via SFTP

JSON para Importar

{
  "name": "Download SFTP Extrato",
  "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": "Baixar Extrato",
        "parameters": {
          "host": "sftp.itau.com.br",
          "port": 22,
          "username": "empresa_conta",
          "password": "SecureP@ss",
          "operation": "download",
          "remoteFilePathDownload": "/extratos/extrato_2025-01-15.ofx",
          "localFilePathDownload": "/tmp/extrato_itau.ofx",
          "outputVariable": "extrato_info"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Confirmar",
        "parameters": {
          "message": "🔒✅ Extrato baixado com segurança!\nTamanho: {{extrato_info.size}} bytes\nArquivo: {{extrato_info.localPath}}"
        }
      }
    },
    {
      "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: 🔒✅ Extrato baixado com segurança!
Tamanho: 327680 bytes
Arquivo: /tmp/extrato_itau.ofx

Resposta do Node

{
  "success": true,
  "data": {
    "sftp_result": {
      "success": true,
      "remotePath": "/extratos/extrato_2025-01-15.ofx",
      "localPath": "/tmp/extrato_itau.ofx",
      "size": 327680,
      "downloadedAt": "2025-01-15T09:00:00.000Z",
      "encrypted": true,
      "protocol": "sftp"
    }
  }
}

Boas Práticas

SIM:

  • Use SFTP para dados financeiros/médicos
  • Valide integridade após download
  • Apague arquivo remoto após baixar (se aplicável)

NÃO:

  • Não use FTP para dados sensíveis
  • Não ignore verificação de checksum

Dicas

💡 Dica 1: SFTP garante que arquivo não foi interceptado ou alterado durante download (integridade criptográfica).

💡 Dica 2: Para processar múltiplos arquivos: SFTP_LIST + LOOP + SFTP_DOWNLOAD.

Próximos Nodes

SFTP_UPLOAD - Enviar via SFTP → SFTP_LIST - Listar antes de baixar → SFTP_DELETE - Apagar após baixar