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.