Como usar o comando SCP para transferir arquivos com segurança

Linux Abr 16, 2020

O scp copia arquivos entre hosts em uma rede. Ele usa ssh para transferência de dados e usa a mesma autenticação e fornece a mesma segurança que o ssh

SCP (Securely Transfer Files) é um utilitário de linha de comando que permite copiar com segurança arquivos.

Diferente do rcp , o scp solicitará senhas ou frases secretas se elas forem necessárias para autenticação.

Os nomes de arquivos podem conter uma especificação de usuário e host para indicar que o arquivo deve ser copiado para um /outrohost. Os nomes de arquivos locais podem ser explicitados usando nomes de caminho absolutos ou relativos para evitar que o scp trate nomes de arquivos contendo ':' como especificadores de host. Cópias entre dois hosts remotos também são permitidas.

Ao copiar um arquivo de origem para um arquivo de destino que já existe, o scp substituirá o conteúdo do arquivo de destino (mantendo o inode).

Se o arquivo de destino ainda não existir, um arquivo vazio com o nome do arquivo de destino será criado e preenchido com o conteúdo do arquivo de origem. Nenhuma tentativa é feita na transferência "quase atômica" usando arquivos temporários

Com scp você pode copiar um arquivo ou diretório:

  • Do seu sistema local para um sistema remoto.
  • De um sistema remoto para o seu sistema local.
  • Entre dois sistemas remotos do seu sistema local.

Ao transferir dados com scp, os arquivos e a senha são criptografados, para que qualquer pessoa que bisbilhote o tráfego não receba nada sensível.

Neste tutorial, mostraremos como usar o comando scp através de exemplos práticos e explicações detalhadas das opções mais comuns do scp.

Sintaxe de comando do SCP

Antes de começar a usar o comando scp, vamos começar revendo a sintaxe básica.

A sintaxe do comando scp assume o seguinte formato:

scp [OPTION] [user@]SRC_HOST:]arquivo1 [user@]DEST_HOST:] arquivo2

  • As OPTION do scp como cifrado, configuração ssh, porta ssh, limite, cópia recursiva ... etc.
  • [user@]SRC_HOST:] arquivo1 Arquivo fonte de onde queremos enviar
  • [user@]DEST_HOST:]arquivo2 Endereço para onde vamos enviar

Os arquivos locais devem ser especificados usando um caminho absoluto ou relativo, enquanto os nomes de arquivos remotos devem incluir uma especificação de usuário e host.

O scp fornece várias opções que controlam todos os aspectos de seu comportamento. As opções mais usadas são:

-P Especifica a porta ssh do host remoto.

-p Preserva a modificação de arquivos e os tempos de acesso.

-q Suprime o medidor de progresso e as mensagens de erro.

-C Esta opção forçará o scp a compactar os dados conforme eles são enviados para a máquina de destino.

-r Esta opção diz ao scp para copiar diretórios recursivamente.

Antes de você começar

O comando scp depende do ssh para transferência de dados, portanto, requer uma chave ou senha ssh para autenticar nos sistemas remotos.

Os dois pontos (:) é como o scp distingue entre locais locais e remotos.

Para poder copiar arquivos, você deve ter pelo menos permissões de leitura no arquivo de origem e permissão de gravação no sistema de destino.

Tenha cuidado ao copiar arquivos que compartilham o mesmo nome e local nos dois sistemas, o scp substituirá os arquivos sem aviso.

Ao transferir arquivos grandes, é recomendável executar o comando scp dentro de uma tela ou sessão do tmux.

Copie arquivos e diretórios entre dois host

Copiar um arquivo local para um sistema remoto com o comando scp

Para copiar um arquivo de um sistema local para um sistema remoto, execute o seguinte comando:

scp meuarquivo.txt usuario_remoto@20.20.0.1:/diretorio/remoto

Onde meuarquivo.txt é o nome do arquivo que queremos copiar, usuario_remoto é o usuário no servidor remoto, 20.20.0.1 é o endereço IP do servidor. O diretorio/remote é o caminho para o diretório para o qual você deseja copiar o arquivo. Se você não especificar um diretório remoto, o arquivo será copiado para o diretório inicial do usuário remoto.

O diretorio remoto solicitara os dados de acesso e ao digitar a senha do usuário o processo de transferência será iniciado.

imagem do output

Cuando omitimos o nome do arquivo do endereço remoto scp copia o arquivo com o nome original. Se você deseja salvar o arquivo com um nome diferente, é necessário especificar o novo nome do arquivo:

scp arquivo.txt usr_remoto@20.20.0.2:/dir/remoto/novoarquivo.txt

Se o SSH no host remoto estiver escutando em uma porta diferente da padrão 22, você poderá especificar a porta usando o argumento -P:

O comando para copiar um diretório é muito parecido com o de copiar arquivos. A única diferença é que você precisa usar o sinalizador -r para recursivo.

scp -r /diretorio/local usurio_remoto@20.20.0.2:/diretorio/remoto

Copiar um arquivo remoto para um sistema local usando o comando scp

Para copiar um arquivo de um sistema remoto para um sistema local, use o local remoto como fonte e o local como destino.

Por exemplo, para copiar um arquivo chamado arquivoremoto.txt de um servidor remoto com IP 20.20.0.2, execute o seguinte comando:

scp usuario_remoto@20.20.0.2: /remoto/arquivo.txt  /diretorio/local

Se você não definiu um login SSH na máquina remota, será solicitado a inserir a senha do usuário.

Copiar um arquivo entre dois sistemas remotos usando o comando scp

Ao contrário do rsync, ao usar o scp, você não precisa fazer login em um dos servidores para transferir arquivos de um para outro computador remoto.

O comando a seguir copiará o arquivo /diretorio/arquivo.txt do host remoto hostum.com para o diretorio /minhapasta no host remoto hostdois.com.

scp user@hostum.com:/diretorio/arquivo.txt user@hostdois.com:/minhapasta

Precisará inserir as senhas das duas contas remotas. Os dados serão transferidos diretamente de um host remoto para outro.

Para rotear o tráfego através da máquina na qual o comando foi emitido, use a opção -3:

scp -3 user1@host1.com:/diretorio/aquivo.txt user2@host2.com:/diretorio

Para visite este blog onde tem mais opçoes

Conclução

A internet é muito grande e os conteúdos variados. Resolvi fazer este blog para me ajudar a organizar os conteúdos que eu preciso e gosto para o português sem ficar presso a politicas de blogs de terceiros.  O post foi criado pegando um apanhado de conteúdos de vários sites para me ajudar no meu dia a dia como programador front-end e aprender mais sobre o ecosistema GNU/Linux. Caso seja útil o conteúdo está sobre Licença MIT.

Tags

Gustavo Armoa

Estudante de Engenharia de Software, apaixonado por Data Science e E-commerce. Atualmente trabalhando como Front-end Developer na da agência digital proideas e gamer na horas vagas.

Great! You've successfully subscribed.
Great! Next, complete checkout for full access.
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.