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