# SFTP (SSH File Transfer Protocol)

## Introdução

SFTP, ou SSH File Transfer Protocol, é um protocolo de rede seguro que fornece transferência de arquivos e funcionalidades de manipulação de arquivos sobre um fluxo de dados confiável, tipicamente SSH (Secure Shell).

> [!NOTA] Segurança do SFTP 
> SFTP oferece um nível significativamente maior de segurança em comparação com o FTP tradicional, pois toda a comunicação é criptografada.

## Características Principais

- Criptografia de ponta a ponta
- Autenticação forte
- Integridade dos dados
- Compatibilidade com firewalls (usa apenas uma porta)

## Comparação com FTP e FTPS

|CARACTERÍSTICA|SFTP|FTP|FTPS|
|---|---|---|---|
|Porta Padrão|22|21|990|
|Criptografia|Sim|Não|Sim|
|Autenticação|Chave/Senha|Senha|Certificado/Senha|
|Complexidade|Média|Baixa|Alta|
|Firewall-friendly|Sim|Não|Parcial|

## Configuração Básica (Servidor OpenSSH)

1. Instalar OpenSSH Server (se ainda não estiver instalado):
    
```bash
sudo apt-get install openssh-server
```
    
2. Editar o arquivo de configuração SSH (`/etc/ssh/sshd_config`):
    
```bash
Subsystem sftp internal-sftp
```
    
3. Reiniciar o serviço SSH:
    
```bash    
sudo systemctl restart sshd
```
    

## Autenticação

### Baseada em Senha

- Mais simples de configurar
- Menos segura que a autenticação por chave

### Baseada em Chave

1. Gerar par de chaves no cliente:
    
```bash
ssh-keygen -t rsa
```
    
2. Copiar chave pública para o servidor:
    
```bash
ssh-copy-id usuario@servidor
```
    

## Comandos SFTP Básicos

| COMANDO | DESCRIÇÃO                                          |
| ------- | -------------------------------------------------- |
| `cd`    | Muda o diretório no servidor remoto.               |
| `lcd`   | Muda o diretório local (no computador do usuário). |
| `ls`    | Lista os arquivos e diretórios no servidor remoto. |
| `lls`   | Lista os arquivos e diretórios no diretório local. |
| `get`   | Baixa um arquivo do servidor remoto para o local.  |
| `put`   | Envia um arquivo do local para o servidor remoto.  |
| `mkdir` | Cria um diretório no servidor remoto.              |
| `rmdir` | Remove um diretório no servidor remoto.            |
| `rm`    | Remove um arquivo no servidor remoto.              |
| `exit`  | Fecha a sessão SFTP.                               |

## Casos de Uso

1. **Transferência Segura de Dados Sensíveis**
2. **Automação de Backups**
3. **Gerenciamento Remoto de Arquivos**
4. **Integração com Sistemas de CI/CD**

## Fluxo de Conexão SFTP

```mermaid
sequenceDiagram
    participant Cliente
    participant Servidor
    Cliente->>Servidor: Inicia conexão SSH (porta 22)
    Servidor-->>Cliente: Aceita conexão
    Cliente->>Servidor: Autentica (senha/chave)
    Servidor-->>Cliente: Autenticação bem-sucedida
    Cliente->>Servidor: Inicia sessão SFTP
    Servidor-->>Cliente: Confirma sessão SFTP
    Cliente->>Servidor: Comandos SFTP (get, put, etc.)
    Servidor-->>Cliente: Executa comandos
    Cliente->>Servidor: Encerra sessão
```

## Segurança Avançada

1. **Chroot**: Limitar usuários a diretórios específicos
    
```bash
Match User sftpuser
	ChrootDirectory /home/sftpuser
    ForceCommand internal-sftp
```
    
2. **Desabilitar Login Shell**: Permitir apenas SFTP
    
```bash
Match User sftpuser
	ForceCommand internal-sftp
    AllowTcpForwarding no
    X11Forwarding no
```
    
3. **Filtros de IP**: Restringir acesso por endereço IP
    

## Monitoramento e Logs

- Logs padrão do SSH (geralmente em `/var/log/auth.log`)
- Configurar logging adicional no `sshd_config`:
    
```bash
LogLevel VERBOSE
```
    

## Otimização de Desempenho

1. Ajustar tamanho do buffer de transmissão
2. Usar compressão para conexões lentas
3. Implementar multiplexação de conexões SSH

## Troubleshooting Comum

1. **Problemas de Permissão**: Verificar permissões de arquivos e diretórios
2. **Falhas de Autenticação**: Checar configurações de chave/senha
3. **Conexão Lenta**: Investigar problemas de rede ou configuração

## Ferramentas Populares de Cliente SFTP

1. **OpenSSH sftp** (linha de comando)
2. **FileZilla** (GUI multiplataforma)
3. **WinSCP** (GUI para Windows)
4. **Cyberduck** (GUI para macOS e Windows)

## Integração com Outros Sistemas

- **Scripts de Shell**: Automatizar transferências
- **Bibliotecas de Programação**: Implementar SFTP em aplicações (ex: Paramiko para Python)
- **Sistemas de Backup**: Usar SFTP como protocolo de transferência segura

## Considerações Finais

SFTP oferece uma solução robusta e segura para transferência de arquivos, sendo uma excelente alternativa ao FTP tradicional. Sua integração com SSH proporciona uma camada adicional de segurança, tornando-o ideal para ambientes que exigem proteção de dados sensíveis.

## Etiquetas

#SFTP #SSH  #SegurancaDeDados #Criptografia

## Leia Também

- [[ftp (file transfer protocol)|FTP (File Transfer Protocol)]]
- [[backup do sistema - tutorial|Backup do Sistema - Tutorial]]
- [[disco de backup no sistema|Disco de backup no sistema]]
- [[firewall nftables|Firewall nftables]]