16 comandos SCP comuns com exemplos para copiar arquivos e pastas

O SCP está intimamente relacionado ao protocolo SSH e nasceu da mesma ideia.

O SCP garante que os dados permaneçam confidenciais e inalterados durante o trânsito como uma extensão do protocolo SSH.

Primeiramente, vamos entender como funciona este SCP, para depois veremos os comandos scp.

O que é SCP?

SCP significa Secure Copy Protocol.

É um método seguro e eficiente para copiar arquivos e diretórios entre hosts locais e remotos ou entre dois hosts remotos.

É amplamente usado para transferir dados com segurança em uma rede. O SCP depende do SSH (Secure Shell) para estabelecer uma conexão segura e criptografar os dados durante o trânsito.

Se você precisa mover um único arquivo ou um diretório inteiro, o SCP fornece uma solução confiável para transferências remotas de arquivos.

Como funciona o SCP?

O SCP é construído sobre o protocolo SSH – que é um protocolo de rede criptográfica para login remoto seguro e execução de comandos. Ele usa os mesmos mecanismos de segurança do SSH, incluindo criptografia e autenticação, para proteger os dados durante a transmissão.

Ao usar o SCP, um usuário inicia um comando de cópia em sua máquina local que especifica o arquivo de origem e o local de destino em uma máquina remota. O SCP estabelece uma conexão SSH com o sistema remoto e copia com segurança os arquivos da origem para o destino.

Quando usar o SCP?

O SCP é particularmente útil nos seguintes cenários.

Backup de Servidor Remoto

O SCP permite que você faça backup de arquivos de um servidor remoto para sua máquina local ou vice-versa, o que garante redundância de dados e recuperação de desastres.

Implantação de Aplicativos

Ele também simplifica o processo copiando com segurança os arquivos necessários para cada sistema de destino ao implantar aplicativos em vários servidores,

Transferindo Arquivos Grandes

O SCP oferece um método alternativo confiável e seguro de transmissão de dados para arquivos grandes que podem ser muito grandes para serem enviados como anexos de e-mail.

Compartilhamento seguro de arquivos

O SCP garante que os dados sejam mantidos criptografados durante o trânsito enquanto envia arquivos confidenciais para outras pessoas.

  11 melhores provedores de hospedagem de servidor Valheim em 2022 [Updated]

Colaboração Remota

O SCP pode ser usado para compartilhar arquivos com segurança com colaboradores ou membros da equipe em diferentes locais.

Sintaxe de Comando SCP

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

A sintaxe do comando SCP se parece com isto:

scp [options] [source] [destination]

Explicação da sintaxe

Opções

Esses são sinalizadores opcionais que modificam o comportamento do comando SCP. Você pode usar várias opções para personalizar o processo de transferência. Aqui estão algumas opções comuns:

-r: Copia recursivamente diretórios e seus conteúdos.
-p: preserva as permissões, carimbos de data/hora e modos do arquivo original.
-P: especifica o número da porta para a conexão SSH.
-i: Especifica o arquivo de chave privada para autenticação SSH.
-C: Use compactação para acelerar a transferência de dados.
-l: Limita a largura de banda usada para a transferência (em Kbit/s).
-v: Modo verboso – exibe mensagens de depuração durante a transferência.
-o: Passa uma opção para o cliente SSH. Ele pode ser usado para desabilitar a verificação estrita da chave do host.

Fonte

A fonte especifica o arquivo ou diretório que você deseja copiar. Pode ser um caminho local ou remoto – dependendo do contexto.

Destino

O destino especifica onde você deseja copiar a origem. Como a origem, também pode ser um caminho local ou remoto.

Exemplos de Comando

#1. Copie um arquivo do servidor local para o remoto

scp /path/to/local/file.txt user@remotehost:/path/to/destination/

/caminho/para/local/arquivo.txt: Este é o arquivo de origem que você deseja copiar de sua máquina local.

user@remotehost: Substitua o usuário pelo nome do usuário remoto e o host remoto pelo nome do host ou endereço IP do servidor remoto.

/caminho/para/destino/: Este é o caminho de destino no servidor remoto onde o arquivo será copiado.

Exemplo

No meu caso, escolhi um servidor remoto para transferir o arquivo.

Nome de usuário do host remoto – abhishekvarma

Endereço do host remoto – 192.168.29.70

scp /home/vboxuser/Desktop/sample.zip [email protected]:/Users/abhishekvarma/Desktop

Ao conectar-se a uma máquina remota, ele solicita a senha. Aqui eu selecionei um arquivo zip para copiar.

Saída

E a saída ficará assim se não houver erro na conexão com um servidor remoto.

sample.zip                                    100%   20KB  717.9KB/s   00:00

#2. Copie um arquivo da máquina remota para a máquina local

scp user@remotehost:/path/to/remote/file.txt /path/to/local/destination/

Igual ao anterior, substitua o usuário e o endereço do host remoto.

Exemplo

scp [email protected]:/Users/abhishekvarma/Desktop/sample.zip /home/vboxuser/Desktop

Saída

Este é apenas o exemplo de saída no meu caso. O timestamp varia de acordo com a velocidade da conexão.

sample.zip                                    100%   20KB  51.2KB/s   00:00

#3. Copiar um diretório recursivamente

scp user@remotehost:/path/to/remote/file.txt /path/to/local/destination/

Aqui, o sinalizador ‘-r’ diz ao SCP para copiar diretórios recursivamente (incluindo subdiretórios e seus conteúdos).

Exemplo

scp -r /home/vboxuser/Desktop [email protected]:/Users/abhishekvarma/Desktop

Aqui, mencionei todo o diretório para copiar os arquivos.

Saída

sample.zip                                         100%   20KB    1.0MB/s   00:00
Screenshot from 2023-08-13 21-45-23.png            100%   27KB    1.5MB/s   00:00
.swp                                               100%   12KB  894.2KB/s   00:00
.help.swp                                          100%   12KB  780.4KB/s   00:00

#4. Copiar arquivos que correspondem a um padrão

scp /path/to/local/*.txt user@remotehost:/path/to/destination/

*.txt – Este é um padrão curinga que corresponde a todos os arquivos com uma extensão .txt no diretório local especificado. Os caminhos de origem e destino são os mesmos de antes.

  Como a Internet matou o dia da mentira (e por que ela precisa parar)

Exemplo

scp /home/vboxuser/Desktop/locfolder/*.png [email protected]:/Users/abhishekvarma/Desktop

Saída

Aqui, tentei com uma extensão .png.

Screenshot from 2023-08-13 21-45-23.png            100%   27KB    1.4MB/s   00:00
Screenshot from 2023-08-13 21-55-28.png            100%   24KB    1.7MB/s   00:00
Screenshot from 2023-08-13 22-04-03.png            100%   38KB    2.1MB/s   00:00

#5. Preservar atributos de arquivo

scp -p /path/to/local/file.txt user@remotehost:/path/to/destination/

Aqui, o sinalizador ‘-p’ preserva os tempos de modificação, tempos de acesso e modos do arquivo de origem ao copiar.

Exemplo

scp -p /home/vboxuser/Desktop/sample.zip [email protected]:/Users/abhishekvarma/Desktop

Saída

sample.zip                                         100%   20KB    420.0KB/s   00:00

#6. Especifique uma porta SSH diferente

scp -P 22 /path/to/local/file.txt user@remotehost:/path/to/destination/

O sinalizador ‘-P’ especifica uma porta SSH diferente (22 neste caso) para a conexão SCP. Você pode usar qualquer porta que desejar.

Exemplo

scp -P 22 /home/vboxuser/Desktop/sample.zip [email protected]:/Users/abhishekvarma/Desktop

Saída

sample.zip                                         100%   20KB    1.2MB/s   00:00

#7. Copiar com compressão

scp -C /path/to/local/file.txt user@remotehost:/path/to/destination/

Esse sinalizador ‘-C’ permite a compactação durante a transferência, reduzindo potencialmente o tamanho dos dados transferidos. Os endereços de origem e destino são os mesmos explicados anteriormente.

Exemplo

scp -C /home/vboxuser/Desktop/sample.zip [email protected]:/Users/abhishekvarma/Desktop

Saída

sample.zip                                         100%   20KB    985.8KB/s   00:00

#8. Saída detalhada para depuração

scp -v /path/to/local/file.txt user@remotehost:/path/to/destination/

Esta opção ‘-v’ ativa a saída detalhada, que fornece informações mais detalhadas durante o processo de transferência.

Exemplo

scp -v /home/vboxuser/Desktop/sample.zip [email protected]:/Users/abhishekvarma/Desktop

Saída

A saída de amostra ficará assim.

Executing: program /usr/bin/ssh host 192.168.29.70, user abhishekvarma, command scp -v -t /Users/abhishekvarma/Desktop OpenSSH_8.9p1 Ubuntu-3ubuntu0.3, OpenSSL 3.0.2 15 Mar 2022
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: include /etc/ssh/ssh_config.d/*.conf matched no files
debug1: /etc/ssh/ssh_config line 21: Applying options for *
debug1: Connecting to 192.168.29.70 [192.168.29.70] port 22. debug1: Connection established.
debug1: identity file /root/.ssh/id_rsa type -1
debug1: identity file /root/.ssh/id_rsa-cert type -1 debug1: identity file /root/.ssh/id_ecdsa type -1 debug1: identity file /root/.ssh/id_ecdsa-cert type -1 debug1: identity file /root/.ssh/id_ecdsa_sk type -1 debug1: identity file /root/.ssh/id_ecdsa_sk-cert type -1

#9. Copie de remoto para local com saída detalhada

scp -v user@remotehost:/path/to/remote/file.txt /path/to/local/destination/

As mesmas explicações do exemplo detalhado anterior, com as funções dos locais locais e remotos invertidas.

Exemplo

scp -v [email protected]:/Users/abhishekvarma/Desktop/sample.zip /home/vboxuser/Desktop

Saída

A saída ficará assim.

Executing: program /usr/bin/ssh host 192.168.29.70, user abhishekvarma, command scp -v -f /Users/abhishekvarma/Desktop/sample.zip OpenSSH_8.9p1 Ubuntu-3ubuntu0.3, OpenSSL 3.0.2 15 Mar 2022
debug1: /etc/ssh/ssh_config line 19: include /etc/ssh/ssh_config.d/*.conf matched no files
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 21: Applying options for *
debug1: Connecting to 192.168.29.70 [192.168.29.70] port 22. debug1: Connection established.
debug1: identity file /root/.ssh/id_rsa type -1
debug1: identity file /root/.ssh/id_rsa-cert type -1 debug1: identity file /root/.ssh/id_ecdsa type -1 debug1: identity file /root/.ssh/id_ecdsa-cert type -1 debug1: identity file /root/.ssh/id_ecdsa_sk type -1 debug1: identity file /root/.ssh/id_ecdsa_sk-cert type -1

#10. Copiar usando uma chave SSH diferente

scp -i /path/to/private_key.pem /path/to/local/file.txt user@remotehost:/path/to/destination/

Este sinalizador “-i /path/to/private_key.pem” especifica uma chave privada SSH diferente para autenticação.

  Como sacar para uma conta bancária da Binance

Exemplo

scp -i /path/to/private_key.pem /home/vboxuser/Desktop/sample.zip [email protected]:/Users/abhishekvarma/Desktop

Saída

Se você tiver uma chave privada, poderá usá-la ou usar a chave padrão.

sample.zip                                         100%   20KB    1.1MB/s   00:00

#11. Copie vários arquivos para o servidor remoto

scp file1.txt file2.txt user@remotehost:/path/to/destination/

Este comando copia file1.txt e file2.txt do diretório local para o destino especificado no servidor remoto.

Exemplo

scp  /home/vboxuser/Desktop/image.png  /home/vboxuser/Desktop/sample.zip  [email protected]:/Users/abhishekvarma/Desktop 

Saída

image.png                                          100%   39KB    1.4MB/s   00:00
sample.zip                                         100%   20KB    1.5MB/s   00:00

#12. Copiar um arquivo remoto com um nome diferente

scp user@remotehost:/path/to/remote/file.txt /path/to/local/newfilename.txt

Este comando copia file.txt do servidor remoto para o diretório local, renomeando-o como newfilename.txt no processo.

Exemplo

scp [email protected]:/Users/abhishekvarma/Desktop/sample.zip /home/vboxuser/Desktop/newfile.zip

Saída

As extensões de arquivo antigas e novas devem ser as mesmas durante a execução deste comando.

sample.zip                                         100%   20KB    28.7KB/s   00:00

#13. Copiando com Limite de Largura de Banda Específico

scp -l 1000 /path/to/local/file.txt user@remotehost:/path/to/destination/

Este sinalizador ‘-l’ especifica um limite de largura de banda em Kbps (1000 Kbps neste caso) para a transferência.

Exemplo

scp -l 300 /home/vboxuser/Desktop/sample.zip [email protected]:/Users/abhishekvarma/Desktop

Saída

sample.zip                                         100%   20KB    31.3KB/s   00:00
scp -rp /path/to/local/source/ user@remotehost:/path/to/destination/

O sinalizador ‘-p’ preserva os atributos do arquivo e o sinalizador -r copia recursivamente os diretórios. Este comando também preserva links simbólicos durante a cópia.

Exemplo

scp -rp /home/vboxuser/Desktop/image.png [email protected]:/Users/abhishekvarma/Desktop

Saída

image.png                                        100%   39KB    1.8MB/s   00:00

#15. Copiando arquivos detalhadamente com compactação

scp -vC /path/to/local/file.txt user@remotehost:/path/to/destination/

Esse comando combina saída detalhada (-v) e compactação (-C) durante a transferência de arquivo.

Exemplo

scp -vC /home/vboxuser/Desktop/image.png [email protected]:/Users/abhishekvarma/Desktop

Saída

A saída ficará assim.

scp: debug1: fd 3 clearing O_NONBLOCK
Sending file modes: C0664 40050 image.png
Sink: C0664 40050 image.png
image.png
d 6 clearing O_NONBLOCK
scp: debug1: fd • clearing O_NONBLOCK
image.png
debug1: client_input_channel_req: channel ✪ type exit-status reply debug1: channel 0: free: client-session, channels 1
Transferred: sent 40220, received 2576 bytes, in 0.1 seconds
Bytes per second: sent 352570.0, received 22581.3
root@ubuntu: ~
debug1: Exit status 0
debug1: compress outgoing: raw data 40287, compressed 38198, factor 0.95 debug1: compress incoming: raw data 792, compressed 757, factor 0.96 

#16. Copiando entre dois servidores remotos

Se você deseja transferir arquivos de um servidor remoto para outro, pode usar este comando.

scp user1@remotehost1:/path/to/remote/file.txt user2@remotehost2:/path/to/destination/

Este comando transfere diretamente file.txt de remotehost1 para remotehost2.

Exemplo

scp user1@remotehost1:/path/to/remote/file.txt [email protected]:/Users/abhishekvarma/Desktop

Saída

file.txt                100%  512KB 512.0KB/s   00:00

Se houver algum erro ou problema durante a transferência, a saída pode exibir mensagens de erro que fornecem informações sobre o que deu errado.

ssh: connect to host source.example.com port 22: Connection refused
lost connection

Nesse caso, a mensagem de erro sugere que a conexão SSH com o servidor de origem foi recusada. Pode ser devido a vários motivos, como nome de host incorreto, endereço IP, porta ou problemas com a configuração SSH.

Perguntas frequentes sobre SCP

Aqui estão algumas perguntas frequentes relacionadas ao protocolo SCP, juntamente com suas respostas.

Como o SCP difere do FTP ou SFTP?

FTP significa Protocolo de Transferência de Arquivos.

SFTP significa Protocolo de Transferência de Arquivos. Ambos são usados ​​para transferências de arquivos.

O SCP opera sobre SSH e oferece criptografia e autenticação em um único protocolo, o que o torna mais seguro e eficiente.

Quando devo usar o SCP?

O SCP é mais adequado para cenários em que são necessárias transferências de arquivos seguras e confiáveis, como backups remotos, implantação de software, distribuição de arquivos de configuração e colaboração entre os membros da equipe.

O SCP é compatível com endereços IPv6?

Sim, o SCP oferece suporte a endereços IPv4 e IPv6, o que permite transferir arquivos por redes que usam qualquer esquema de endereçamento.

Conclusão✍️

Espero que você tenha achado este artigo útil para aprender sobre o SCP e como ele funciona.

Você também pode estar interessado em aprender sobre os Comandos do Linux para Administrador do Sistema