Como Transferir Arquivos com Segurança no Linux Usando SCP

Scp Transfer Linux 00 Featured Image

Ao transferir arquivos para um servidor remoto Linux, você tem algumas opções. Uma das melhores maneiras é usar um programa chamado Secure Copy, ou SCP, que funciona sobre o protocolo SSH para transferir arquivos rapidamente pela sua rede para um sistema remoto. Este tutorial mostra como transferir arquivos com segurança usando SCP no Linux.

Índice

  • Configurando o SSH
  • Conectando-se ao Seu Sistema via SSH
  • Usando SCP para Transferir Arquivos
  • Compactando a Transferência de Arquivo no SCP
  • Otimizando uma Transferência de Dados com SCP
  • Limitando o Uso de Largura de Banda no SCP
  • Transferência Remota para Remota com SCP
  • Usando um Proxy com SCP
  • Mudando a Porta Padrão no SCP
  • Usando o Modo Silencioso do SCP
  • Perguntas Frequentes

Configurando o SSH

No seu servidor remoto, você precisará instalar um servidor SSH. O mais comum no Linux é o OpenSSH. Para instalá-lo, execute um dos seguintes comandos:

# Servidor baseado em Debian/Ubuntu  
sudo apt install ssh  
  
# Fedora  
sudo dnf install openssh

Scp Transfer Linux 01 Installing Ssh

Dependendo da sua distribuição, pode ser necessário permitir SSH através de alguns firewalls de software. No Ubuntu, esse problema não existe, mas no Fedora, você também terá que executar os seguintes comandos:

sudo firewall-cmd --add-service=ssh --permanent  
sudo firewall-cmd --reload

Scp Transfer Linux 02 Fedora Enable Firewall

Conectando-se ao Seu Sistema via SSH

Antes que você possa se conectar via SSH, você precisa descobrir o endereço IP do servidor remoto. Em servidores gráficos, o endereço IP é mostrado no applet de Rede nas Configurações do Sistema. Na maioria dos servidores, você deve usar o comando ip no terminal.

ip addr

Scp Transfer Linux 04 Check Ip Address

Na saída, procure pela linha que começa com inet abaixo de ethX ou enpXsy, dependendo de como sua interface de rede está conectada ao sistema. No meu caso, é 192.168.68.108.

Para testar a conexão SSH, mova-se para uma máquina Linux diferente e digite:

Troque “usuario” pelo nome de usuário real no servidor.

Scp Transfer Linux 05 Connecting To Remote Server

Digite a senha da conta e você estará em funcionamento. Se você receber uma pergunta sobre a “autenticidade do host não pode ser estabelecida,” basta responder “sim.” É uma verificação de segurança projetada para garantir que você está se conectando ao seu servidor real e não a um impostor. Você deve ver o mesmo prompt que aparece no seu sistema cliente quando você faz login diretamente no servidor, o que significa que sua conexão foi bem-sucedida. Você também deve configurar suas conexões SSH para máxima segurança, ou até mesmo configurar a autenticação de dois fatores, antes de prosseguir para o próximo passo.

Usando SCP para Transferir Arquivos

Agora que você testou a conexão SSH, comece a copiar arquivos entre as duas máquinas. A cópia segura é realizada usando o comando scp. O formato básico do comando scp é:

scp/PATH/TO/FILE USUARIO@IP-ENDEREÇO:PATH/TO/DESTINO_DESEJADO

Por exemplo, para copiar o arquivo “backup.tar.gz” da máquina local para a pasta “backups” no diretório inicial do usuário “ramces” no servidor remoto com o endereço IP de 192.168.68.165, use:

scp backup.tar.gz [email protected]:~/backups/

Scp Transfer Linux 06 Basic Copying

Assim como quando você se conecta usando ssh, você será solicitado a inserir a senha. Você não será solicitado pelo nome de usuário, uma vez que foi especificado no comando.

Você também pode usar caracteres curinga como os seguintes:

scp *.tar.gz [email protected]:~/backups/

Scp Transfer Linux 07 Glob Matching Copy

Para copiar um arquivo do servidor remoto para a máquina local, basta inverter os parâmetros:

scp [email protected]:~/backups/backup.tar.gz ./

Scp Transfer Linux 08 Inverse Copying

Note o ponto no final do comando? Ele significa “o diretório atual,” assim como ocorre com os comandos padrão cp ou mv. Você poderia facilmente especificar outro diretório se quisesse.

scp -r [email protected]:~/backups/ backups-do-servidor/

E o mesmo com caracteres curinga:

scp [email protected]:~/backups/*.txz ./

Para copiar recursivamente um diretório para um servidor remoto, use a opção -r:

scp -r backups/ [email protected]:~/backups/

Scp Transfer Linux 09 Recursive Copying

Para copiar uma cópia recursiva de um diretório do servidor remoto para a máquina local, use:

scp -r [email protected]:~/backups/ ./

Scp Transfer Linux 10 Reverse Recursive Copying

Compactando a Transferência de Arquivo no SCP

Além da cópia básica, também é possível modificar como o SCP se comporta durante essas transferências de arquivos. Por exemplo, você pode usar a opção -C para comprimir os dados que o SCP envia para os clientes remotos:

scp -C backup.tar.gz [email protected]:/home/ramces/

Esta opção funciona comprimindo cada pacote de dados enquanto é enviado através do programa SCP. Assim, isso pode ser incrivelmente útil se você estiver em uma conexão com largura de banda limitada e quiser enviar um arquivo para um servidor remoto de forma confiável.

Scp Transfer Linux 11 Data Compression Copy

Assim como as opções acima, você também pode usar -C junto com a opção -r para comprimir e transferir arquivos recursivamente para uma máquina remota. Por exemplo, o seguinte comando comprime e recupera o arquivo “backup.tar.gz” do meu servidor remoto:

scp -Cr [email protected]:/home/ramces/backups /home/ramces/

Scp Transfer Linux 12 Reverse Data Compression Copy

Otimizando uma Transferência de Dados com SCP

Por padrão, o SCP tenta usar o algoritmo de criptografia AES-128 para todas as suas transferências de arquivos. No entanto, há casos em que esse algoritmo específico não será adequado para os arquivos que você deseja transferir.

Sabendo disso, é possível otimizar ainda mais e proteger o SCP alterando diretamente o algoritmo de cifra para uma transferência específica. Para isso, você precisa usar a opção -c seguida da cifra que deseja usar.

Por exemplo, o seguinte comando transfere o arquivo “backup.tar.gz” para meu servidor remoto usando AES-256:

scp -c aes256-ctr ./backup.tar.gz [email protected]:/home/ramces/

Scp Transfer Linux 13 Change Default Cipher

Além disso, a opção -c também permite que você forneça uma lista de cifras que deseja usar para uma transferência de arquivo específica. Por exemplo, o seguinte comando utiliza tanto AES-192 quanto AES-256 ao transferir o arquivo “backup.tar.gz” para meu servidor remoto:

scp -c aes192-ctr,aes256-ctr ./backup.tar.gz [email protected]:/home/ramces/

Scp Transfer Linux 14 Create Cipher Preference List

Limitando o Uso de Largura de Banda no SCP

Embora a compressão de pacotes de arquivos possa ajudar você a usar o SCP em condições de rede ruins, também é possível limitar a largura de banda que o programa utiliza durante uma transferência. Isso é útil em casos onde você está usando uma conexão metropolitana e não quer que o SCP domine a largura de banda da sua rede.

Para limitar a largura de banda efetiva do programa, você precisa usar a opção -l seguida do limite máximo que você deseja em quilobits por segundo (Kb/s). Por exemplo, executando o seguinte comando transferirá o arquivo “backup.tar.gz” para meu servidor remoto a uma largura de banda efetiva de 1.600 Kb/s:

scp -l 1600 ./backup.tar.gz [email protected]:/home/ramces/

Scp Transfer Linux 15 Limit Bandwidth During Copy

Transferência Remota para Remota com SCP

Além de copiar arquivos locais para o seu servidor remoto e vice-versa, você também pode usar o SCP para gerenciar vários servidores remotos a partir da sua máquina local, uma vez que o SCP apenas lida com a transferência de arquivos e não discrimina entre uma máquina local e remota.

Para transferir entre dois servidores remotos, você precisa declarar explicitamente o nome de usuário e o endereço de cada uma dessas máquinas. Por exemplo, executando o seguinte comando transferirá meu arquivo “remote-backup.tar.gz” entre meus dois servidores remotos:

scp [email protected]:/home/ramces/remote-backup.tar.gz [email protected]:/home/ramces/

Scp Transfer Linux 16 Remote To Remote Copy

Usando um Proxy com SCP

Por padrão, o SCP usa o endereço IP da sua máquina local sempre que transfere arquivos entre diferentes hosts. Embora isso seja perfeitamente aceitável em situações normais, pode ser um problema se sua rede local restringir qualquer atividade SCP. Uma maneira rápida de lidar com esse problema é passar sua conexão local através de um proxy SSH.

Para fazer isso, você precisa usar a opção -o seguida da opção ProxyCommand. Isso permite que você crie uma conexão SSH básica com uma nova máquina que, por sua vez, executará seu comando SCP. Por exemplo, executando o seguinte criará um novo proxy SSH com uma máquina remota e transferirá o arquivo “backup.tar.gz” usando-o:

scp -o "ProxyCommand ssh [email protected] nc %h %p" ./backup.tar.gz [email protected]:/home/ramces/

Scp Transfer Linux 17 Ssh Proxy Bypass

Mudando a Porta Padrão no SCP

Além de criar um proxy SSH básico, você também pode mudar a porta padrão para o SCP. Isso é especialmente útil se você estiver reforçando a segurança do seu servidor Linux e não quiser expor nenhuma porta padrão.

Para usar o SCP com uma porta diferente, você precisa usar a opção -P seguida do número da porta que deseja usar. Por exemplo, o seguinte comando copiará recursivamente meu diretório “backup” e se conectará ao meu servidor remoto usando a porta 2222:

scp -r -P 2222 ./backup [email protected]:/home/ramces/

Scp Transfer Linux 18 Using Custom Port

Usando o Modo Silencioso do SCP

Por fim, também é possível remover completamente qualquer saída de terminal de um comando SCP. Isso é especialmente útil se você quiser criar um script não interativo que será executado na sua máquina. Além disso, você pode também automatizar completamente esse processo criando um cronjob e transferindo uma chave SSH privada para seu servidor.

Para criar uma transferência SCP silenciosa, você precisa usar a opção -q. Por exemplo, o seguinte comando transferirá meu arquivo “backup.tar.gz” silenciosamente para meu servidor remoto:

scp -q ./backup.tar.gz [email protected]:/home/ramces/

Scp Transfer Linux 19 Quiet Mode

Perguntas Frequentes

Minha transferência remota para remota em SCP não funciona. Como posso resolver isso?

Esse problema é mais provável devido a uma porta bloqueada em um dos arquivos de configuração das suas máquinas remotas. Para corrigir isso, certifique-se de que a porta padrão para SSH está aberta em ambas as suas máquinas.

Esse problema também pode ocorrer devido a uma das suas máquinas remotas estar atrás de uma conexão CG-NAT, então qualquer conexão externa à sua máquina remota não será resolvida corretamente. Para resolver isso, você precisa usar um programa de LAN Virtual, como o Yggdrasil, que permitirá que você atravesse o CG-NAT.

Eu rodei um proxy SCP e o host remoto fechou a conexão. O que posso fazer?

Esse problema é mais provável devido a um problema com sua máquina proxy. Para iniciar corretamente um proxy SSH, certifique-se de que a máquina que você deseja usar possui o servidor OpenSSH e o netcat. Para instalar esses programas no Ubuntu, execute o seguinte comando: sudo apt install ssh netcat.

É possível conhecer todas as cifras disponíveis para o SCP?

Por padrão, o programa SCP depende fortemente do protocolo SSH para suas funções criptográficas. Por causa disso, você pode usar o programa SSH para imprimir uma lista das cifras que pode usar juntamente com o SCP. Por exemplo, você pode executar ssh -Q ciphers para imprimir uma lista breve de todas as cifras disponíveis na sua máquina.

Créditos da imagem: Unsplash. Todas as alterações e capturas de tela por Ramces Red.