Como usar o comando SCP no Linux

Um tutorial fácil para ajudá-lo a transferir arquivos para um sistema remoto de seu sistema Linux usando o comando scp.

SCP significa "Cópia Segura". scp é um utilitário de linha de comando oferecido pelo Linux que permite a transferência de arquivos e diretórios de uma máquina para outra em uma rede insegura.

Se você deseja copiar arquivos de um sistema para outro, então scp pode ser uma opção muito boa para fazer uma transferência segura de arquivos e diretórios. Quando as duas máquinas em comunicação estão conectadas na mesma rede, então usando scp torna-se possível.

Você pode confiar fortemente no scp comando para confidencialidade e integridade, pois o arquivo que está sendo transferido e a senha usada para a transferência são criptografados. Nenhuma informação sensível será revelada, mesmo se alguém tentar espionar o tráfego enquanto a transferência estiver em andamento.

Neste tutorial, veremos diferentes exemplos de scp comando. Também veremos algumas das opções usadas com frequência com o scp comando.

Introdução ao comando scp

Usando o scp comando você pode transferir arquivos / diretórios:

  • De sua máquina local para uma máquina remota.
  • Entre duas máquinas remotas.
  • De uma máquina remota para sua máquina local.

Sintaxe geral:

scp [Option] [source_file_name] [user @ destination_Host]: destination_folder

Vamos entender os atributos básicos deste comando, um por um.

  • [source_file_name] Este é o arquivo de origem que você deseja copiar.
  • [usuário @ destination_Host] Este é o nome de usuário do sistema remoto onde você deseja copiar o arquivo. O endereço IP da máquina remota também é usado neste atributo após o '@‘Símbolo.
  • [pasta de destino] Este é o diretório onde você deseja salvar o arquivo copiado.

Observação: Os dois pontos (:) O símbolo é usado na sintaxe, pois diferencia entre os locais locais e remotos. Usamos os dois pontos (:) com o sistema remoto para especificar o diretório para o qual os arquivos devem ser copiados. Caso não especifiquemos o diretório de destino, os arquivos serão copiados para o diretório inicial do usuário do sistema remoto.

Opções usadas com scp

Algumas das opções mais populares usadas com o scp comando estão listados abaixo.

OpçãoDescrição
-Cpermitir a compressão do arquivo a ser transferido
-vdê a saída detalhada
-rcopiar arquivos e diretórios recursivamente
-ppreservar permissões, modos e tempos de acesso de arquivos
-Palterar a porta padrão usada por scp comando

Veremos exemplos dessas opções mais adiante no tutorial.

Copiando o arquivo de um sistema local para um remoto

scp permite que você transfira arquivos de seu sistema local para um sistema remoto usando a seguinte sintaxe. Isso permite que você transfira ou carregue seus arquivos para um servidor localizado remotamente.

Sintaxe geral:

scp [file_name] remote_user @ host: [destination_folder]

Exemplo:

scp apache-tomcat-9.0.8.tar.gz [email protected]: gaurav

Neste exemplo, estamos copiando um arquivo ‘apache-tomcat-9.0.8.tar.gz’ do sistema local para o sistema remoto cujo endereço IP é ‘143.110.178.221’.

No sistema remoto, o arquivo agora será copiado no diretório denominado ‘gaurav’.

Saída:

gaurav @ ubuntu: ~ $ scp apache-tomcat-9.0.8.tar.gz [email protected]: gaurav [email protected]'s password: apache-tomcat-9.0.8.tar.gz 100% 9589KB 79,8 KB / s 02:00 gaurav @ ubuntu: ~ $ 

Vamos verificar a saída do sistema remoto para o arquivo.

root @ ubuntu-s-1vcpu-1gb-blr1-01: ~ / gaurav # ls apache-tomcat-9.0.8.tar.gz root @ ubuntu-s-1vcpu-1gb-blr1-01: ~ / gaurav #

Assim, o arquivo é copiado com sucesso para o sistema remoto usando o scp comando.

Copiar vários arquivos para um sistema remoto

No exemplo anterior, aprendemos a transferir um arquivo para o sistema remoto usando o scp comando. Veremos agora o método para transferir vários arquivos de seu sistema local para um sistema remoto usando este comando.

Sintaxe geral:

scp [arquivo 1] [arquivo 2] [arquivo n] remote_username @ remote_host: [diretório específico]

Vamos entender este processo simples com um exemplo.

Exemplo:

scp ath.html abc.txt ppa-purge_0.2.8 + bzr56_all.deb [email protected]: gaurav

Aqui, vários arquivos são mencionados no comando a serem copiados no sistema remoto.

Saída:

gaurav @ ubuntu: ~ $ scp ath.html abc.txt ppa-purge_0.2.8 + bzr56_all.deb [email protected]: gaurav [email protected]'s password: ath.html 100% 199KB 94,7KB / s 00: 02 abc.txt 100% 0 0,0 KB / s 00:00 ppa-purge_0.2.8 + bzr56_all.deb 100% 4360 42,2 KB / s 00:00 gaurav @ ubuntu: ~ $

No sistema remoto:

root @ ubuntu-s-1vcpu-1gb-blr1-01: ~ / gaurav # ls -l total 9800 -rw-r - r-- 1 root 0 Out 5 08:58 abc.txt -rw-r-- r-- 1 root root 9818695 out 5 08:35 apache-tomcat-9.0.8.tar.gz -rw-r - r-- 1 root root 204057 out 5 08:58 ath.html -rw-r-- r-- 1 root root 4360 Oct 5 08:58 ppa-purge_0.2.8 + bzr56_all.deb root @ ubuntu-s-1vcpu-1gb-blr1-01: ~ / gaurav #

Todos os três arquivos agora são copiados no sistema remoto.

Copiando um diretório para o sistema remoto

Você pode usar scp comando para copiar um diretório de seu sistema local para o sistema remoto. O processo é semelhante ao de copiar um arquivo. Para copiar o conteúdo do diretório também, você pode usar o -r opção com o scp comando.

O -r opção é usada para copiar um diretório recursivamente. Isso significa que todas as subpastas e arquivos dentro do diretório também serão copiados.

Sintaxe geral:

scp -r [caminho do diretório] remote_username @ remote_host: [target_directory]

Exemplo:

scp -r PycharmProjects [email protected]: gaurav

Saída:

gaurav @ ubuntu: ~ $ scp -r PycharmProjects [email protected]: gaurav [email protected]'s password: __main__.py 100% 623 7,8 KB / s 00:00 __init__.py 100% 23 0,4 KB / s 00 : 00 complete.py 100% 2929 28,1 KB / s 00:00 search.py ​​100% 4728 38,7 KB / s 00:00 uninstall.py 100% 2963 32,5 KB / s 00:00 hash.py 100% 1681 21,3 KB / s 00:00 check.py 100% 1430 16,8 KB / s 00:00 configuration.py 100% 7125 50,4 KB / s 00:00 show.py 100% 6289 49,8 KB / s 00:00 download.py 100% 6623 48,2 KB / s 00:00 gaurav @ ubuntu: ~ $ 

Usando o -r opção com o scp O comando copia todas as subpastas e arquivos do diretório da máquina local para o sistema remoto.

Exibindo informações detalhadas sobre o processo scp

Você pode usar o -v (minúsculas v) para exibir as informações sobre os arquivos que estão sendo copiados em um sistema remoto ou local. Esse tipo de saída também é chamado de saída detalhada.

Quando esta opção é usada, as informações completas de depuração sobre o arquivo são exibidas na tela.

Sintaxe geral:

scp -v [file_name] user_name @ user_host:

Exemplo:

scp -v apache-tomcat-9.0.8.tar.gz [email protected]: equipe

Saída:

gaurav @ ubuntu: ~ $ scp -v apache-tomcat-9.0.8.tar.gz [email protected]: equipe Executando: programa / usr / bin / ssh host 159.89.170.11, usuário root, comando scp -v -t equipe OpenSSH_7.6p1 Ubuntu-4ubuntu0.3, OpenSSL 1.0.2n 7 de dezembro de 2017 debug1: Lendo dados de configuração /home/gaurav/.ssh/config debug1: Lendo dados de configuração / etc / ssh / ssh_config debug1: / etc / ssh / ssh_config linha 19: Aplicando opções para * debug1: Conectando a 159.89.170.11 [159.89.170.11] porta 22. debug1: Conexão estabelecida. debug1: key_load_public: Nenhum arquivo ou diretório debug1: arquivo de identidade /home/gaurav/.ssh/id_rsa type -1 apache-tomcat-9.0.8.tar.gz 100% 9589KB 99,8 KB / s 01:36 debug1: client_input_channel_req: canal 0 rtype exit-status reply 0 debug1: canal 0: free: client-session, nchannels 1 debug1: fd 0 clearing O_NONBLOCK debug1: fd 1 clearing O_NONBLOCK Transferido: enviado 9826736, recebido 4016 bytes, em 97,2 segundos Bytes por segundo: enviado 101133.9, recebeu 41.3 debug1: Status de saída 0 gaurav @ ubuntu: ~ $ 

Aqui, na saída, você pode ver que as informações de depuração do arquivo estão sendo exibidas em seu terminal quando o scp comando é usado com o -v opção.

Transferência de arquivos entre dois hosts remotos

O Linux permite que você se conecte a vários hosts remotos. Você pode transferir arquivos e diretórios entre dois hosts remotos usando o scp comando.

Sintaxe geral:

scp remote_user_1 @ host_1: / [file_name] remote_user_2 @ host_2: [folder_to_save]

A sintaxe pode parecer um pouco mais ampla, mas é bastante simples. Aqui, a primeira parte do comando fornece a entrada sobre o usuário remoto de onde o arquivo deve ser copiado. dois pontos (:) e / é usado para especificar o nome do arquivo ou o nome do diretório que deve ser transferido entre as duas máquinas remotas.

A segunda parte fornece informações sobre o sistema remoto de destino onde o arquivo deve ser copiado.

Exemplo:

scp -r [email protected]: gaurav [email protected]: / equipe

Aqui, estaremos copiando um diretório chamado ‘gaurav’ recursivamente do sistema local para um sistema remoto. O arquivo será copiado para uma pasta ‘equipe’ no sistema remoto.

Saída:

gaurav @ ubuntu: ~ $ scp -r [email protected]: / gaurav [email protected]: / team [email protected]'s password: 1.py 100% 134 261,3 KB / s 00:00 variables.py 100% 377 949,2 KB / s 00:00 abc.txt 100% 0 0,0 KB / s 00:00 ath.html 100% 199 KB 41,8 MB / s 00:00 gaurav @ ubuntu: ~ $

Aqui, usamos o scp comando no sistema local para transferir um diretório chamado ‘gaurav’ de um servidor remoto para outro.

Transfira arquivos do sistema remoto para o seu sistema local

Você pode transferir facilmente os arquivos ou diretórios do sistema remoto para o seu sistema local usando o scp comando. Em palavras mais simples, você pode baixar vários arquivos ou diretórios do servidor remoto para o seu sistema local usando o scp comando.

Sintaxe geral:

scp remote_username @ user_host: /files/file.txt / [folder_of_local_system]

Saída:

gaurav @ ubuntu: ~ $ scp [email protected]: how.txt. senha de [email protected]: how.txt 100% 11 0.1KB / s 00:00 gaurav @ ubuntu: ~ $

Aqui, baixei (copiei) o arquivo do servidor remoto para meu diretório inicial. Portanto, usei o ponto (.) para especificar no comando para copiar o arquivo para meu diretório inicial.

Saída de amostra:

gaurav @ ubuntu: ~ $ ls -l how.txt -rw-r - r-- 1 gaurav gaurav 11 Out 6 09:49 how.txt gaurav @ ubuntu: ~ $ 

Aqui, o arquivo agora é copiado para meu diretório inicial do servidor remoto.

Da mesma forma, você pode baixar vários arquivos ou diretórios do servidor remoto usando o scp comando com as opções apropriadas.

Compactar arquivos para fazer transferências mais rápidas

Às vezes, a transferência de arquivos grandes pode ser demorada. Este problema pode ser resolvido ao usar o scp comando com o -C (maiúsculas C) opção.

Usando o -C opção, compacta os arquivos de tamanho maior, o que facilita uma transferência mais rápida e, portanto, economiza tempo.

Um fato interessante sobre esta opção é que, o arquivo é copiado com seu tamanho original no sistema de destino, mas durante o processo de transferência, o tamanho é compactado para permitir uma transferência mais rápida. Assim, a compressão só é feita na rede.

Sintaxe geral:

scp -C [file_name] user_name @ user_host: [target_folder]

Vejamos um exemplo comparativo para entender a diferença.

Transferência sem opção -C:

gaurav @ ubuntu: ~ $ scp -rv dlink [email protected]: equipe Executando: programa / usr / bin / ssh host 68.183.82.183, usuário root, comando scp -v -r -t team OpenSSH_7.6p1 Ubuntu-4ubuntu0. 3, OpenSSL 1.0.2n 7 de dezembro de 2017 debug1: Lendo dados de configuração /home/trinity/.ssh/config debug1: Lendo dados de configuração / etc / ssh / ssh_config debug1: / etc / ssh / ssh_config linha 19: Aplicando opções para * debug1 : Conectando-se a 68.183.82.183 [68.183.82.183] porta 22. debug1: Conexão estabelecida. debug1: client_input_channel_req: canal 0 rtype exit-status reply 0 debug1: canal 0: free: client-session, nchannels 1 debug1: fd 0 limpando O_NONBLOCK debug1: fd 1 limpando O_NONBLOCK Transferido: enviado 7516504, recebido 4008 bytes, em 74,6 segundos Bytes por segundo: enviado 100693,7, recebido 53,7 debug1: Status de saída 0 gaurav @ ubuntu: ~ $ 

Do exposto acima, podemos ver que o tempo necessário para a transferência é de 74,6 segundos. Tentaremos transferir o mesmo arquivo usando a opção -C e observar a diferença.

Transferir com a opção -C:

gaurav @ ubuntu: ~ $ scp -Crv dlink [email protected]: equipe Executando: programa / usr / bin / ssh host 68.183.82.183, usuário root, comando scp -v -r -t team OpenSSH_7.6p1 Ubuntu-4ubuntu0. 3, OpenSSL 1.0.2n 7 de dezembro de 2017 debug1: Lendo dados de configuração /home/trinity/.ssh/config debug1: Lendo dados de configuração / etc / ssh / ssh_config debug1: / etc / ssh / ssh_config linha 19: Aplicando opções para * debug1 : Conectando-se a 68.183.82.183 [68.183.82.183] porta 22. debug1: Conexão estabelecida. . . webupload.img 100% 1834 KB 98,7 KB / s 00:18 Modos de envio de arquivo: C0664 1877552 roteador.img Coletor: C0664 1877552 roteador.img roteador.img 100% 1834 KB 100,3 KB / s 00:18 Coletor: E Modos de envio de arquivo: C0664 3754103 DSL-2750U-Release-IN-T-01.00.07.zip Coletor: C0664 3754103 DSL-2750U-Release-IN-T-01.00.07.zip DSL-2750U-Release-IN-T-01.00.07.zip 100% 3666KB 218,5 KB / s 00:16 Coletor: E debug1: client_input_channel_req: canal 0 rtype exit-status reply 0 debug1: canal 0: free: client-session, nchannels 1 debug1: fd 0 limpando O_NONBLOCK debug1: fd 1 limpando O_NONBLOCK Transferido: enviado 7518864, recebido 3828 bytes, em 51,0 segundos Bytes por segundo: enviado 100245,4, recebido 51,0 debug1: Status de saída 0 debug1: compactar saída: dados brutos 7511925, compactado 7513136, fator 1,00 debug1: compactar entrada: dados brutos 1467, compactado 999, fator 0,68 gaurav @ ubuntu: ~ $

Aqui, podemos facilmente observar que usando o -C opção com o scp comando nos permitiu compactar o arquivo pela rede, provando ser uma opção que economiza tempo.

Usando uma porta ssh diferente para transferência de arquivos

Ao usar o scp comando a porta padrão que é implantada é o porta 22. O usuário tem a liberdade de personalizar sua escolha de porta. Você pode usar o -P (opção P maiúscula) com o scp comando para usar a porta de sua escolha.

Sintaxe geral:

cp -P [new_port_number] [file_name / directory_name] remote_user @ host: [destination_folder]

Exemplo:

scp -P 4248 dlink [email protected]: equipe

Usando o comando acima, o arquivo será transferido para o servidor remoto. Mas desta vez, a porta usada será porta 4248 em vez do padrão porta 22.

Conclusão

Depois de passar por este tutorial, aprendemos sobre a natureza dinâmica do scp comando usado para transferir ou copiar arquivos de um sistema para outro. Esta opção também pode ser usada para baixar arquivos ou diretórios do servidor remoto. Assim, podemos concluir que scp O comando se mostra muito útil para transferências de arquivos quando você precisa lidar com mais de um sistema e também com servidores remotos simultaneamente.