Linux / Comando sftp: baixar, enviar e automatizar arquivos por SSH
sftp transfere e gerencia arquivos remotos por uma conexão criptografada SSH (Secure Shell). SFTP significa SSH File Transfer Protocol; para conectar, use sftp user@host, com verificação da chave do servidor e autenticação compatível com SSH.
sftp user@example.com
Instale o cliente OpenSSH se sftp não estiver disponível. As linhas marcadas como Bash são digitadas no terminal local; as linhas de texto com get, put e outros comandos são digitadas depois da conexão, no prompt SFTP. Digite bye para sair.
SFTP é diferente de FTP e de FTPS, a variante de FTP protegida por TLS (Transport Layer Security). O servidor precisa oferecer o subsistema SFTP, normalmente na mesma porta TCP usada pelo SSH. Nos exemplos, user, example.com e outros nomes de servidor são ilustrativos: substitua-os pela conta e pelo servidor autorizado que você utiliza.
Recursos do SFTP e preparação da conexão
O sftp do OpenSSH realiza transferências de arquivos por uma conexão SSH criptografada e pode usar recursos do SSH, como autenticação por chave pública, arquivos de configuração SSH e hosts de salto. As opções completas e comandos interativos podem ser encontrados no manual oficial do sftp do OpenSSH.
- Endereço do servidor e porta SSH
- Conta de usuário para login
- Senha ou chave privada SSH
- Canal confiável para confirmar a impressão digital da chave do servidor
- Permissões de leitura e escrita no diretório remoto
Compare a impressão digital da chave do host exibida ao conectar-se pela primeira vez com o valor recebido do administrador do servidor ou de uma interface de gerenciamento confiável. A impressão digital identifica a chave pública do servidor. Aprová-la sem conferir pode permitir uma conexão com o servidor errado ou uma interceptação por um intermediário.
Como conectar ao servidor
Conexão básica
sftp user@example.com
Uma vez conectado, o prompt sftp> aparecerá, permitindo que você insira comandos interativos. Este prompt é apenas para fins ilustrativos, e apenas os próprios comandos são exibidos nos exemplos de código abaixo.
Usar outra porta SSH
sftp -P 2222 user@example.com
A porta é definida com -P maiúsculo. A opção -p, minúscula, solicita a preservação dos horários de modificação e acesso e das permissões dos arquivos transferidos.
Especificar uma chave privada
sftp -i ~/.ssh/id_ed25519 user@example.com
Restrinja a leitura do arquivo de chave privada à sua conta. Proteja a chave com uma frase secreta (passphrase), distinta da senha da conta remota, e use um agente SSH quando apropriado. Não copie sua chave privada para servidores ou diretórios compartilhados.
Como distinguir caminhos locais e remotos
No modo interativo do SFTP, alguns comandos consultam ou alteram caminhos no servidor remoto; outros operam no computador local. Isso não significa que exista um shell remoto disponível para executar qualquer programa.
| Comando | Destino | Descrição |
|---|---|---|
pwd |
Remoto | Exibe o diretório atual do servidor remoto. |
lpwd |
Local | Exibe o diretório atual do computador no qual o SFTP está sendo executado. |
cd caminho |
Remoto | Altera o diretório remoto. |
lcd caminho |
Local | Altera o diretório local. |
ls |
Remoto | Exibe a lista de arquivos remotos. |
lls |
Local | Exibe a lista de arquivos locais. |
mkdir |
Remoto | Cria um diretório remoto. |
lmkdir |
Local | Cria um diretório local. |
É um bom hábito verificar pwd e lpwd antes de começar o trabalho para evitar enviar arquivos para o local errado.
Como baixar arquivos
Os caminhos remotos são relativos ao diretório mostrado por pwd; os locais, ao mostrado por lpwd. Os exemplos pressupõem que reports/daily.csv existe no servidor e que a conta tem permissão para lê-lo. Confira também se o nome local já existe, pois uma transferência pode sobrescrevê-lo.
Baixar um arquivo
get reports/daily.csv
Sem um segundo caminho, o arquivo é salvo como daily.csv no diretório local atual. Antes do exemplo seguinte, prepare a pasta local download, por exemplo com lmkdir download se ela não existir. Ao terminar, confira o resultado com lls -l download/daily.csv.
Você pode especificar o caminho local de salvamento como o segundo argumento.
get reports/daily.csv ./download/daily.csv
Baixar vários arquivos e diretórios
get reports/*.csv
get -R reports
Curingas podem corresponder a nomes de arquivos remotos. Ao baixar diretórios de forma recursiva, o SFTP não segue links simbólicos dentro da árvore, e as opções disponíveis podem variar dependendo das versões do servidor e do cliente.
Retomar um download interrompido
reget archive.tar.zst
Ou você pode retomar transferências parciais com get -a. Isso pressupõe que o arquivo local parcial corresponda exatamente ao início do arquivo remoto, então se o arquivo remoto foi alterado, o resultado pode ficar corrompido. Para arquivos importantes, compare as somas de verificação (checksums) após a transferência.
Como enviar arquivos
Confirme com lls que os arquivos de origem existem no diretório local. Os exemplos usam o diretório remoto uploads, que precisa existir e permitir escrita; crie-o com mkdir uploads somente se isso fizer parte da sua tarefa e ele ainda não existir.
Enviar um arquivo
put ./release.tar.zst
Você pode especificar o caminho ou nome remoto como o segundo argumento.
put ./release.tar.zst uploads/release.tar.zst
Depois do envio, consulte ls -l uploads/release.tar.zst no SFTP e compare o tamanho com o arquivo local. O tamanho igual é uma verificação inicial, mas não substitui uma comparação de hash quando a integridade é importante.
Enviar um diretório recursivamente
put -R ./assets uploads/assets
Como arquivos existentes podem ser sobrescritos, verifique o caminho remoto primeiro. Se várias pessoas ou tarefas publicam no mesmo diretório, use um nome temporário exclusivo por execução e uma etapa de renomeação compatível com o servidor. Isso evita compartilhar o mesmo arquivo parcial entre transferências concorrentes.
Retomar um upload interrompido
reput ./large-image.img
put -a também tenta retomar uploads parciais. Se o arquivo parcial remoto não corresponder ao início do arquivo local, um arquivo corrompido pode ser criado, então confira se o arquivo mudou e confirme o hash após a conclusão.
Caminhos com espaços e caracteres especiais
Coloque caminhos com espaços entre aspas.
get "Monthly Reports/September Report.csv"
put "./Release Files/app package.tar.zst" uploads/
A interpretação de comandos interativos no SFTP não é exatamente a mesma que em um shell comum. Para nomes de arquivos que contenham curingas ou barras invertidas, primeiro verifique o nome exato na lista e, para automação, é mais seguro usar nomes de arquivos simples e previsíveis.
Como organizar conexões no arquivo SSH
Agrupar opções em uma entrada Host
Defina um apelido, usuário, porta e caminho da chave em ~/.ssh/config. O manual oficial de ssh_config descreve essas diretivas; o guia de SSH, em inglês, apresenta o uso geral da conexão.
Host fileserver
HostName sftp.example.com
User deploy
Port 2222
IdentityFile ~/.ssh/id_ed25519
IdentitiesOnly yes
sftp fileserver
Substitua sftp.example.com, deploy, a porta e a chave pelos seus valores. Não coloque senhas nem o conteúdo da chave privada nesse arquivo. Segundo as regras de SSH, as opções da linha de comando precedem a configuração do usuário, que precede a configuração do sistema; em geral, o primeiro valor obtido é usado. Coloque entradas específicas antes de padrões gerais, como Host *.
Conectar por um host de salto
sftp -J bastion.example.com user@internal.example.com
-J usa ProxyJump: um servidor intermediário encaminha a conexão até o destino. Verifique as chaves do host tanto do host de salto quanto do servidor alvo separadamente, e use o encaminhamento de agente apenas quando necessário.
Envio automático em modo de lote
Criar o arquivo de lote
Por exemplo, salve os seguintes comandos SFTP em upload.sftp.
Prepare o diretório remoto incoming com permissão de escrita e, no computador local, ./exports/report.csv. Execute a partir da pasta que contém exports e upload.sftp. No exemplo abaixo, os nomes report.tmp e report.csv devem estar livres no destino; em produção, use nomes temporários exclusivos e trate explicitamente um destino já existente.
cd incoming
lcd ./exports
put report.csv report.tmp
rename report.tmp report.csv
bye
Fazer upload com um nome temporário primeiro e depois renomeá-lo pode reduzir o risco de outros processos lerem um arquivo em andamento como se fosse um arquivo concluído. A renomeação atômica, que apresenta o nome final de uma só vez, depende do suporte do servidor e do sistema de arquivos; não é uma garantia de durabilidade nem de coordenação entre várias publicações.
Executar o arquivo de lote
sftp -b upload.sftp fileserver
O resultado esperado é report.csv em incoming, com o mesmo conteúdo do arquivo local, após a transferência e a renomeação concluírem. Se a execução falhar, examine o erro antes de repetir: o lote não é uma transação e operações anteriores podem ter sido aplicadas. Uma tentativa interrompida pode deixar report.tmp.
O modo em lote não deve depender da interação do usuário pedindo uma senha. Use uma conta dedicada restrita e autenticação por chave pública, e limite privilégios da chave, origens de acesso e caminhos permitidos de acordo com a política do servidor. Não coloque senhas em scripts ou linhas de comando.
Tratar falhas
No modo em lote, se comandos como get, put ou rename falharem, a operação geralmente para. Você pode ignorar falhas colocando um - antes do comando, mas use isso seletivamente, pois pode fazer a operação parecer bem-sucedida mesmo que arquivos necessários estejam ausentes.
Na automação, você deve verificar o status de saída do processo SFTP, o tamanho dos arquivos transferidos e os checksums, se possível, e estabelecer políticas de notificação e nova tentativa em caso de falha.
Verificações de segurança e operação
- Chave do servidor: Verifique a impressão digital através de um canal confiável durante conexões pela primeira vez e alterações de chave.
- Autenticação: Para automação, use uma chave pública de escopo limitado e uma conta dedicada em vez de senhas.
- Chave privada: Limite as permissões de leitura e não publique a chave em repositórios, pastas compartilhadas de backup ou servidores de destino.
- Permissões de caminho: Restrinja o acesso para que a conta de upload só possa alcançar os diretórios necessários.
- Sobrescrita: Verifique o caminho de destino e os arquivos existentes, e use nomes temporários e uma política de retenção de versões.
- Integridade: Para transferências importantes, gere e compare checksums confiáveis em ambos os lados.
- Registro: Registre o resultado e o destino das transferências sem registrar senhas, chaves privadas ou o conteúdo de arquivos sensíveis.
Comparação entre sftp, scp e rsync
A interface e o protocolo são aspectos diferentes: desde OpenSSH 9.0, scp usa SFTP por padrão. Mesmo assim, a interface de cópia de scp continua diferente do gerenciamento interativo de sftp.
| Ferramentas | Situações adequadas | Recursos |
|---|---|---|
sftp |
Gerenciamento interativo de arquivos e transferência por SSH | Oferece listagem remota, navegação em diretórios, retomada e comandos em lote. |
scp |
Cópia simples de arquivos | Copia com uma linha de comando, com recursos limitados de gerenciamento remoto interativo. |
rsync |
Sincronização repetida e grandes diretórios | Oferece transferência de alterações, filtros de arquivos e opções para propagar exclusões; exige suporte correspondente no servidor. |
Usar apenas o SSH não torna automaticamente seguras as permissões de conta e os procedimentos de implantação. Escolha com base no propósito da transmissão e no método de recuperação de falhas.
Perguntas frequentes
O SFTP é FTP com TLS aplicado?
Não. SFTP é o Protocolo de Transferência de Arquivos SSH e opera sobre uma conexão SSH. FTPS é um método separado que aplica TLS ao FTP, com diferentes configurações de servidor e estruturas de portas.
Por que aparece Connection refused (conexão recusada)?
O endereço ou a porta podem estar incorretos, o serviço SSH pode não estar em escuta ou um firewall pode rejeitar a conexão. Confira o endereço do servidor, a opção de porta -P em maiúscula, o estado do serviço SSH e as políticas de rede.
O que fazer se aparecer Permission denied (permissão negada)?
Distinga uma falha de autenticação de uma falta de permissão sobre arquivos após o login. Use sftp -v para consultar o diagnóstico da conexão, mas não exponha nomes de usuário, caminhos ou detalhes do servidor em logs públicos.
Como verifico se o upload está completo?
Verifique o status de saída e o tamanho dos arquivos remotos, e calcule e compare os checksums, como SHA-256, para arquivos importantes tanto nos sistemas locais quanto remotos. Se o servidor SFTP usar uma conta restrita que não permita a execução arbitrária de comandos, pode ser necessário um procedimento separado de verificação por API ou processamento no lado do servidor.
Uma soma de verificação é um resumo calculado do conteúdo. Em um terminal local com GNU Coreutils, sha256sum release.tar.zst calcula SHA-256; no servidor, a comparação exige um shell autorizado ou outro mecanismo fornecido pelo administrador. Não digite sha256sum como se fosse um comando SFTP padrão.
Resumo
Após conectar com sftp user@host, use get para download e put para upload. Distinguir pwd e lpwd, assim como cd e lcd, pode ajudar a reduzir erros com caminhos remotos e locais.
Na automação operacional, os pontos-chave são a autenticação por chave pública, a verificação da chave do host e a checagem do status de saída de lotes e da integridade dos arquivos. Não armazene senhas em scripts; limite o alcance da transferência com uma conta dedicada e privilégios mínimos.




