Domine o SCP: 16 Comandos Essenciais com Exemplos!

O protocolo SCP, intrinsecamente ligado ao SSH, compartilha a mesma essência.

Como uma extensão do SSH, o SCP assegura a confidencialidade e a integridade dos dados durante a transmissão.

Antes de nos aprofundarmos nos comandos `scp`, é crucial entender o funcionamento do SCP.

O que é SCP?

SCP, sigla para Secure Copy Protocol (Protocolo de Cópia Segura), representa um método eficaz e seguro para a movimentação de arquivos e diretórios entre máquinas, sejam elas locais ou remotas, ou entre dois servidores remotos.

É uma ferramenta amplamente utilizada para transferir dados com segurança através de redes. O SCP se apoia no SSH (Secure Shell) para estabelecer uma conexão segura e cifrar os dados em trânsito.

Seja para mover um único arquivo ou toda uma hierarquia de diretórios, o SCP oferece uma solução robusta para transferências remotas de arquivos.

Como o SCP Funciona?

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

Ao empregar o SCP, um usuário inicia um comando de cópia em sua máquina local, especificando o arquivo de origem e o local de destino em uma máquina remota. O SCP então estabelece uma conexão SSH com o sistema remoto e copia os arquivos da origem para o destino de forma segura.

Quando Utilizar o SCP?

O SCP se destaca em várias situações, como:

Backup de Servidores Remotos

O SCP viabiliza o backup de arquivos de um servidor remoto para a sua máquina local, ou vice-versa, promovendo redundância de dados e recuperação de desastres.

Implantação de Aplicações

O protocolo simplifica a implantação de aplicações em múltiplos servidores, transferindo de forma segura os arquivos necessários para cada sistema de destino.

Transferência de Arquivos Grandes

O SCP apresenta um método seguro e confiável para o envio de arquivos grandes, que podem ser impraticáveis para envio como anexos de e-mail.

Compartilhamento Seguro de Arquivos

Ao enviar arquivos confidenciais, o SCP garante que os dados permaneçam criptografados durante o trânsito.

Colaboração Remota

O SCP facilita o compartilhamento seguro de arquivos entre colaboradores e membros de equipes em diferentes locais.

Sintaxe do Comando SCP

Antes de utilizar o comando SCP, é fundamental compreender sua sintaxe básica.

A estrutura do comando SCP é:

scp [opções] [origem] [destino]

Desvendando a sintaxe:

Opções

As opções são parâmetros opcionais que modificam o comportamento do comando SCP. Elas permitem personalizar o processo de transferência. Algumas opções comuns são:

-r: Cópia recursiva de diretórios e seus conteúdos.
-p: Preserva permissões, timestamps e modos do arquivo original.
-P: Especifica o número da porta para a conexão SSH.
-i: Indica o arquivo de chave privada para autenticação SSH.
-C: Utiliza compressã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. Pode ser usado para desabilitar a verificação estrita da chave do host.

Origem

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

Destino

O destino indica onde você deseja copiar a origem. Similarmente à origem, pode ser um caminho local ou remoto.

Exemplos de Comando

#1. Cópia de arquivo do servidor local para o remoto

scp /caminho/para/arquivo_local.txt usuário@host_remoto:/caminho/para/destino/

/caminho/para/arquivo_local.txt: O arquivo de origem a ser copiado da sua máquina local.

usuário@host_remoto: Substitua o “usuário” pelo nome de usuário remoto e “host_remoto” pelo endereço IP ou nome do host do servidor remoto.

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

Exemplo:

Para ilustrar, utilizarei um servidor remoto para a transferência.

Nome de usuário do host remoto: abhishekvarma

Endereço do host remoto: 192.168.29.70

scp /home/vboxuser/Desktop/sample.zip abhishekvarma@192.168.29.70:/Users/abhishekvarma/Desktop

Ao conectar-se a uma máquina remota, a senha será solicitada. Neste exemplo, um arquivo zip será copiado.

Saída:

A saída, em caso de conexão bem-sucedida com o servidor remoto, será semelhante a:

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

#2. Cópia de arquivo da máquina remota para a local

scp usuário@host_remoto:/caminho/para/arquivo_remoto.txt /caminho/para/destino_local/

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

Exemplo:

scp abhishekvarma@192.168.29.70:/Users/abhishekvarma/Desktop/sample.zip /home/vboxuser/Desktop

Saída:

Este é um exemplo de saída. O tempo de transferência pode variar dependendo da velocidade da conexão.

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

#3. Cópia recursiva de um diretório

scp -r usuário@host_remoto:/caminho/para/diretorio_remoto /caminho/para/destino_local/

Nesse caso, o sinalizador ‘-r’ instrui o SCP a copiar diretórios recursivamente (incluindo subdiretórios e seus conteúdos).

Exemplo:

scp -r /home/vboxuser/Desktop abhishekvarma@192.168.29.70:/Users/abhishekvarma/Desktop

O comando acima copia todo o diretório, incluindo arquivos e subdiretórios.

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. Cópia de arquivos correspondentes a um padrão

scp /caminho/para/local/*.txt usuário@host_remoto:/caminho/para/destino/

*.txt: Este padrão curinga corresponde a todos os arquivos com a extensão .txt no diretório local especificado. Os caminhos de origem e destino são os mesmos dos exemplos anteriores.

Exemplo:

scp /home/vboxuser/Desktop/locfolder/*.png abhishekvarma@192.168.29.70:/Users/abhishekvarma/Desktop

Saída:

O exemplo acima utiliza a 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. Preservação dos atributos do arquivo

scp -p /caminho/para/arquivo_local.txt usuário@host_remoto:/caminho/para/destino/

Aqui, o sinalizador ‘-p’ preserva os tempos de modificação, acesso e modos do arquivo de origem durante a cópia.

Exemplo:

scp -p /home/vboxuser/Desktop/sample.zip abhishekvarma@192.168.29.70:/Users/abhishekvarma/Desktop

Saída:

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

#6. Especificação de uma porta SSH diferente

scp -P 22 /caminho/para/arquivo_local.txt usuário@host_remoto:/caminho/para/destino/

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

Exemplo:

scp -P 22 /home/vboxuser/Desktop/sample.zip abhishekvarma@192.168.29.70:/Users/abhishekvarma/Desktop

Saída:

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

#7. Cópia com compressão

scp -C /caminho/para/arquivo_local.txt usuário@host_remoto:/caminho/para/destino/

O sinalizador ‘-C’ habilita a compressão durante a transferência, reduzindo o tamanho dos dados transferidos. Os endereços de origem e destino são os mesmos já explicados.

Exemplo:

scp -C /home/vboxuser/Desktop/sample.zip abhishekvarma@192.168.29.70:/Users/abhishekvarma/Desktop

Saída:

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

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

scp -v /caminho/para/arquivo_local.txt usuário@host_remoto:/caminho/para/destino/

A opção ‘-v’ ativa a saída verbosa, fornecendo informações detalhadas durante o processo de transferência.

Exemplo:

scp -v /home/vboxuser/Desktop/sample.zip abhishekvarma@192.168.29.70:/Users/abhishekvarma/Desktop

Saída:

A saída de exemplo:

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. Cópia de remoto para local com saída verbosa

scp -v usuário@host_remoto:/caminho/para/arquivo_remoto.txt /caminho/para/destino_local/

As mesmas explicações do exemplo verboso anterior, mas com as funções dos locais local e remoto invertidas.

Exemplo:

scp -v abhishekvarma@192.168.29.70:/Users/abhishekvarma/Desktop/sample.zip /home/vboxuser/Desktop

Saída:

A saída será semelhante a:

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. Cópia utilizando uma chave SSH diferente

scp -i /caminho/para/chave_privada.pem /caminho/para/arquivo_local.txt usuário@host_remoto:/caminho/para/destino/

O sinalizador “-i /caminho/para/chave_privada.pem” especifica uma chave privada SSH para autenticação.

Exemplo:

scp -i /caminho/para/chave_privada.pem /home/vboxuser/Desktop/sample.zip abhishekvarma@192.168.29.70:/Users/abhishekvarma/Desktop

Saída:

Caso possua uma chave privada, você poderá utilizá-la ou usar a chave padrão.

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

#11. Cópia de múltiplos arquivos para o servidor remoto

scp arquivo1.txt arquivo2.txt usuário@host_remoto:/caminho/para/destino/

Este comando copia `arquivo1.txt` e `arquivo2.txt` do diretório local para o destino especificado no servidor remoto.

Exemplo:

scp  /home/vboxuser/Desktop/image.png  /home/vboxuser/Desktop/sample.zip  abhishekvarma@192.168.29.70:/Users/abhishekvarma/Desktop 

Saída:

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

#12. Cópia de arquivo remoto com nome diferente

scp usuário@host_remoto:/caminho/para/arquivo_remoto.txt /caminho/para/local/novonome_arquivo.txt

Este comando copia o `arquivo.txt` do servidor remoto para o diretório local, renomeando-o como `novonome_arquivo.txt` durante o processo.

Exemplo:

scp abhishekvarma@192.168.29.70:/Users/abhishekvarma/Desktop/sample.zip /home/vboxuser/Desktop/newfile.zip

Saída:

As extensões de arquivo antiga e nova devem ser as mesmas durante a execução do comando.

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

#13. Cópia com limite de largura de banda específico

scp -l 1000 /caminho/para/arquivo_local.txt usuário@host_remoto:/caminho/para/destino/

O 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 abhishekvarma@192.168.29.70:/Users/abhishekvarma/Desktop

Saída:

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

#14. Cópia de arquivos e preservação de links simbólicos

scp -rp /caminho/para/origem_local/ usuário@host_remoto:/caminho/para/destino/

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

Exemplo:

scp -rp /home/vboxuser/Desktop/image.png abhishekvarma@192.168.29.70:/Users/abhishekvarma/Desktop

Saída:

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

#15. Cópia de arquivos de forma verbosa com compressão

scp -vC /caminho/para/arquivo_local.txt usuário@host_remoto:/caminho/para/destino/

Este comando combina a saída detalhada (-v) e compressão (-C) durante a transferência do arquivo.

Exemplo:

scp -vC /home/vboxuser/Desktop/image.png abhishekvarma@192.168.29.70:/Users/abhishekvarma/Desktop

Saída:

A saída será semelhante a:

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. Cópia entre dois servidores remotos

Caso deseje transferir arquivos de um servidor remoto para outro, use este comando:

scp usuário1@host_remoto1:/caminho/para/arquivo_remoto.txt usuário2@host_remoto2:/caminho/para/destino/

Este comando transfere diretamente `arquivo.txt` de `host_remoto1` para `host_remoto2`.

Exemplo:

scp usuário1@host_remoto1:/caminho/para/arquivo_remoto.txt abhishekvarma@192.168.29.70:/Users/abhishekvarma/Desktop

Saída:

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

Se ocorrer algum erro durante a transferência, a saída exibirá mensagens informando sobre o problema:

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

Neste caso, a mensagem de erro sugere que a conexão SSH com o servidor de origem foi recusada, o que pode ser devido a um nome de host, endereço IP ou porta incorretos, ou a problemas de configuração do SSH.

Perguntas Frequentes sobre SCP

A seguir, algumas perguntas frequentes sobre o protocolo SCP:

Qual a diferença entre SCP e FTP ou SFTP?

FTP significa Protocolo de Transferência de Arquivos. SFTP significa Protocolo de Transferência de Arquivos Segura. Ambos são utilizados para transferências de arquivos. O SCP, por operar sob SSH, oferece criptografia e autenticação em um único protocolo, o que o torna mais seguro e eficiente.

Quando devo usar SCP?

O SCP é ideal para cenários que exigem transferências seguras e confiáveis de arquivos, como backups remotos, implantação de software, distribuição de arquivos de configuração e colaboração entre equipes.

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

Sim, o SCP suporta endereços IPv4 e IPv6, permitindo a transferência de arquivos em redes que utilizam qualquer esquema de endereçamento.

Conclusão✍️

Espero que este artigo tenha sido útil para o aprendizado sobre o SCP e seu funcionamento.

Talvez você também se interesse em aprender sobre os Comandos do Linux para Administrador do Sistema