Introdução
O FTP, o Protocolo de Transferência de Arquivos, foi um método popular e não criptografado para transferir arquivos entre dois sistemas remotos. A partir de 2022, ele foi descontinuado pela maioria dos softwares modernos devido à falta de segurança e geralmente só pode ser usado em aplicativos legados.
O SFTP, que significa Protocolo de Transferência de Arquivos Seguro, é um protocolo separado incorporado ao SSH que pode implementar comandos FTP sobre uma conexão segura. Tipicamente, ele pode atuar como uma substituição direta em qualquer contexto onde um servidor FTP ainda é necessário.
Em quase todos os casos, o SFTP é preferível ao FTP devido às suas características de segurança subjacentes e à capacidade de se basear em uma conexão SSH. O FTP é um protocolo inseguro que deve ser usado apenas em casos limitados ou em redes confiáveis.
Embora o SFTP esteja integrado a muitas ferramentas gráficas, este guia demonstrará como usá-lo através de sua interface de linha de comando interativa.
Como Conectar com SFTP
Por padrão, o SFTP usa o protocolo SSH para autenticar e estabelecer uma conexão segura. Por causa disso, os mesmos métodos de autenticação estão disponíveis que estão presentes no SSH.
Embora você possa autenticar com senhas por padrão, recomendamos que você crie chaves SSH e transfira sua chave pública para qualquer sistema que precise acessar. Isso é muito mais seguro e pode economizar tempo a longo prazo.
Por favor, consulte este guia para configurar chaves SSH para acessar seu servidor se ainda não o fez.
Se você conseguir conectar-se à máquina usando SSH, então você concluiu todos os requisitos necessários para usar o SFTP para gerenciar arquivos. Teste o acesso SSH com o seguinte comando:
Se isso funcionar, saia digitando:
Agora podemos estabelecer uma sessão SFTP emitindo o seguinte comando:
Você se conectará ao sistema remoto e seu prompt mudará para um prompt SFTP.
Se estiver trabalhando em uma porta SSH personalizada (não a porta padrão 22), você pode abrir uma sessão SFTP da seguinte maneira:
Isso o conectará ao sistema remoto através da porta especificada por você.
Obtendo Ajuda no SFTP
O comando mais útil para aprender primeiro é o comando de ajuda. Isso lhe dá acesso a um resumo dos outros comandos SFTP. Você pode chamá-lo digitando qualquer um destes no prompt:
ou
Isso exibirá uma lista dos comandos disponíveis:
OutputAvailable commands:
bye Quit sftp
cd path Change remote directory to 'path'
chgrp grp path Change group of file 'path' to 'grp'
chmod mode path Change permissions of file 'path' to 'mode'
chown own path Change owner of file 'path' to 'own'
df [-hi] [path] Display statistics for current directory or
filesystem containing 'path'
exit Quit sftp
get [-Ppr] remote [local] Download file
help Display this help text
lcd path Change local directory to 'path'
. . .
Vamos explorar alguns dos comandos que você vê nas seguintes seções.
Navegando com SFTP
Podemos navegar pela hierarquia de arquivos do sistema remoto usando vários comandos que funcionam de forma semelhante aos seus equivalentes no shell.
Primeiro, vamos nos orientar descobrindo em qual diretório estamos atualmente no sistema remoto. Assim como em uma sessão de shell típica, podemos digitar o seguinte para obter o diretório atual:
OutputRemote working directory: /home/demouser
Podemos visualizar o conteúdo do diretório atual do sistema remoto com outro comando familiar:
OutputSummary.txt info.html temp.txt testDirectory
Observe que os comandos disponíveis na interface SFTP não correspondem diretamente à sintaxe do shell típico e não são tão ricos em recursos. No entanto, eles implementam algumas das opções de sinalização mais importantes, como adicionar -la
ao ls
para visualizar mais metadados e permissões de arquivos:
Outputdrwxr-xr-x 5 demouser demouser 4096 Aug 13 15:11 .
drwxr-xr-x 3 root root 4096 Aug 13 15:02 ..
-rw------- 1 demouser demouser 5 Aug 13 15:04 .bash_history
-rw-r--r-- 1 demouser demouser 220 Aug 13 15:02 .bash_logout
-rw-r--r-- 1 demouser demouser 3486 Aug 13 15:02 .bashrc
drwx------ 2 demouser demouser 4096 Aug 13 15:04 .cache
-rw-r--r-- 1 demouser demouser 675 Aug 13 15:02 .profile
. . .
Para acessar outro diretório, podemos emitir este comando:
Agora podemos percorrer o sistema de arquivos remoto, mas e se precisarmos acessar nosso sistema de arquivos local? Podemos direcionar comandos para o sistema de arquivos local precedendo-os com um l
para local.
Todos os comandos discutidos até agora têm equivalentes locais. Podemos imprimir o diretório de trabalho local:
OutputLocal working directory: /Users/demouser
Podemos listar o conteúdo do diretório atual na máquina local:
OutputDesktop local.txt test.html
Documents analysis.rtf zebra.html
Também podemos alterar o diretório com o qual queremos interagir no sistema local:
Transferindo Arquivos com SFTP
Se quisermos baixar arquivos do nosso host remoto, podemos fazer isso usando o comando get
:
OutputFetching /home/demouser/remoteFile to remoteFile
/home/demouser/remoteFile 100% 37KB 36.8KB/s 00:01
Como pode ver, por padrão, o comando get
baixa um arquivo remoto para um arquivo com o mesmo nome no sistema de arquivos local.
Podemos copiar o arquivo remoto para um nome diferente especificando o nome depois:
O comando get
também aceita algumas opções. Por exemplo, podemos copiar um diretório e todo o seu conteúdo especificando a opção recursiva:
Podemos instruir o SFTP a manter as permissões apropriadas e os tempos de acesso usando a opção -P
ou -p
:
Transferindo Arquivos Locais para o Sistema Remoto
Transferir arquivos para o sistema remoto funciona da mesma maneira, mas com um comando put
:
OutputUploading localFile to /home/demouser/localFile
localFile 100% 7607 7.4KB/s 00:00
As mesmas opções que funcionam com get
se aplicam a put
. Portanto, para copiar um diretório local inteiro, você pode executar put -r
:
Uma ferramenta familiar que é útil ao baixar e carregar arquivos é o comando df
, que funciona de forma semelhante à versão de linha de comando. Usando isso, você pode verificar se tem espaço suficiente para completar as transferências de seu interesse:
Output Size Used Avail (root) %Capacity
19.9GB 1016MB 17.9GB 18.9GB 4%
Observe que não há variação local deste comando, mas podemos contornar isso emitindo o comando !
.
O comando !
nos leva a um shell local, onde podemos executar qualquer comando disponível em nosso sistema local. Podemos verificar o uso do disco digitando:
e então
OutputFilesystem Size Used Avail Capacity Mounted on
/dev/disk0s2 595Gi 52Gi 544Gi 9% /
devfs 181Ki 181Ki 0Bi 100% /dev
map -hosts 0Bi 0Bi 0Bi 100% /net
map auto_home 0Bi 0Bi 0Bi 100% /home
Qualquer outro comando local funcionará como esperado. Para retornar à sua sessão SFTP, digite:
Agora você deve ver o prompt SFTP retornar.
Manipulações Simples de Arquivos com SFTP
O SFTP permite que você realize alguns tipos de manutenção do sistema de arquivos. Por exemplo, você pode alterar o proprietário de um arquivo no sistema remoto com:
Observe como, ao contrário do comando de sistema chmod
, o comando SFTP não aceita nomes de usuário, mas em vez disso usa UIDs. Infelizmente, não há uma maneira incorporada de saber o UID apropriado de dentro da interface SFTP.
Como solução alternativa, você pode ler do arquivo /etc/passwd
, que associa nomes de usuário com UIDs na maioria dos ambientes Linux:
Outputroot:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
. . .
Observe como, em vez de dar o comando !
sozinho, nós o usamos como um prefixo para um comando de shell local. Isso funciona para executar qualquer comando disponível em nossa máquina local e poderia ter sido usado com o comando local df
anteriormente.
O UID estará na terceira coluna do arquivo, como delimitado por caracteres de dois pontos.
Da mesma forma, podemos alterar o proprietário do grupo de um arquivo com:
Novamente, não há uma maneira integrada de obter uma listagem dos grupos do sistema remoto. Podemos contornar isso com o seguinte comando:
Outputroot:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
. . .
A terceira coluna contém o ID do grupo associado ao nome na primeira coluna. Isso é o que estamos procurando.
O comando chmod
SFTP funciona normalmente no sistema de arquivos remoto:
OutputChanging mode on /home/demouser/publicFile
Não há um comando equivalente para manipular permissões de arquivo locais, mas você pode definir o umask local, para que quaisquer arquivos copiados para o sistema local tenham suas permissões correspondentes.
Isso pode ser feito com o comando lumask
:
OutputLocal umask: 022
Agora, todos os arquivos regulares baixados (desde que a opção -p
não seja usada) terão permissões 644.
O SFTP também permite criar diretórios nos sistemas local e remoto com lmkdir
e mkdir
, respectivamente.
O restante dos comandos de arquivo visa apenas o sistema de arquivos remoto:
Esses comandos replicam o comportamento principal de seus equivalentes de shell. Se você precisar executar essas ações no sistema de arquivos local, lembre-se de que você pode entrar em um shell emitindo este comando:
Ou execute um único comando no sistema local prefixando o comando com !
assim:
Quando terminar a sua sessão SFTP, use exit
ou bye
para fechar a conexão.
Conclusão
Embora a sintaxe SFTP seja muito menos abrangente do que as ferramentas de shell modernas, pode ser útil para fornecer compatibilidade com a sintaxe FTP legada ou para limitar cuidadosamente a funcionalidade disponível para usuários remotos em alguns ambientes.
Por exemplo, você pode usar o SFTP para permitir que usuários específicos transfiram arquivos sem acesso SSH. Para obter mais informações sobre esse processo, confira nosso tutorial sobre Como Habilitar SFTP Sem Acesso ao Shell.
Se você está acostumado a usar FTP ou SCP para realizar suas transferências, o SFTP é uma boa maneira de aproveitar os pontos fortes de ambos. Embora não seja apropriado para todas as situações, é uma ferramenta flexível para se ter em seu repertório.