Os administradores de Linux devem estar familiarizados com o ambiente de linha de comando. Uma vez que o modo GUI (Interface Gráfica do Usuário) nas
servidores Linux não é comum de ser instalado, SSH pode ser o protocolo mais popular para permitir que os administradores de Linux gerenciem os servidores de forma remota e segura. Integrado ao comando SSH, há o comando SCP, que é usado para copiar arquivo(s) entre servidores de maneira segura.
Sintaxe Básica do Comando SCP
O comando abaixo será lido como copiar “nome_do_arquivo_fonte” para “pasta_de_destino” no “host_de_destino” usando a conta “nome_de_usuario“.
scp source_file_name username@destination_host:destination_folder
Existem muitos parâmetros no comando SCP que você pode usar. Aqui estão os parâmetros que podem ser usados no uso diário.
Sumário
Transferência Segura de Arquivos no Linux
O comando básico SCP sem parâmetros copiará os arquivos em segundo plano. Os usuários não verão nada a menos que o processo seja concluído ou algum erro apareça.
Você pode usar o parâmetro “-v
” para imprimir informações de depuração na tela. Isso pode ajudá-lo a solucionar problemas de conexão, autenticação e configuração.
Copiar Arquivo do Host Local para Servidor Remoto
O seguinte comando copia um arquivo “scp-cheatsheet.pdf” de um local para um sistema Linux remoto sob o diretório /home/tecmint.
$ scp -v scp-cheatsheet.pdf [email protected]:/home/tecmint/.
Saída de Exemplo:
Executing: program /usr/bin/ssh host 192.168.0.183, user tecmint, command scp -v -t /home/tecmint/. OpenSSH_8.2p1 Ubuntu-4ubuntu0.5, OpenSSL 1.1.1f 31 Mar 2020 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.0.183 [192.168.0.183] port 22. debug1: Connection established. debug1: identity file /home/tecmint/.ssh/id_rsa type -1 debug1: identity file /home/tecmint/.ssh/id_rsa-cert type -1 debug1: identity file /home/tecmint/.ssh/id_dsa type -1 debug1: identity file /home/tecmint/.ssh/id_dsa-cert type -1 debug1: identity file /home/tecmint/.ssh/id_ecdsa type -1 debug1: identity file /home/tecmint/.ssh/id_ecdsa-cert type -1 debug1: identity file /home/tecmint/.ssh/id_ecdsa_sk type -1 debug1: identity file /home/tecmint/.ssh/id_ecdsa_sk-cert type -1 debug1: identity file /home/tecmint/.ssh/id_ed25519 type -1 debug1: identity file /home/tecmint/.ssh/id_ed25519-cert type -1 debug1: identity file /home/tecmint/.ssh/id_ed25519_sk type -1 debug1: identity file /home/tecmint/.ssh/id_ed25519_sk-cert type -1 debug1: identity file /home/tecmint/.ssh/id_xmss type -1 ...
Copiar Arquivo de Host Remoto para Host Local
O seguinte comando copia um arquivo “ssh-cheatsheet.pdf” de um host remoto para um sistema local sob o diretório /home/tecmint.
$ scp -v [email protected]:/home/ravi/ssh-cheatsheet.pdf /home/tecmint/.
Saída de Exemplo:
Executing: program /usr/bin/ssh host 192.168.0.183, user tecmint, command scp -v -f /home/ravi/ssh-cheatsheet.pdf OpenSSH_8.2p1 Ubuntu-4ubuntu0.5, OpenSSL 1.1.1f 31 Mar 2020 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.0.183 [192.168.0.183] port 22. debug1: Connection established. debug1: identity file /home/tecmint/.ssh/id_rsa type -1 debug1: identity file /home/tecmint/.ssh/id_rsa-cert type -1 debug1: identity file /home/tecmint/.ssh/id_dsa type -1 debug1: identity file /home/tecmint/.ssh/id_dsa-cert type -1 debug1: identity file /home/tecmint/.ssh/id_ecdsa type -1 debug1: identity file /home/tecmint/.ssh/id_ecdsa-cert type -1 debug1: identity file /home/tecmint/.ssh/id_ecdsa_sk type -1 debug1: identity file /home/tecmint/.ssh/id_ecdsa_sk-cert type -1 debug1: identity file /home/tecmint/.ssh/id_ed25519 type -1 debug1: identity file /home/tecmint/.ssh/id_ed25519-cert type -1 debug1: identity file /home/tecmint/.ssh/id_ed25519_sk type -1 ...
Copiar Arquivo de Host Remoto para Outro Host
O seguinte comando copia um arquivo “ssh-cheatsheet.pdf” de um host remoto para outro sistema remoto sob o diretório /home/tecmint.
$ scp -v [email protected]:/home/ravi/ssh-cheatsheet.pdf [email protected]:/home/anusha/.
Copiar Arquivos com Data e Hora de Criação Original
O parâmetro “-p
” preservará as datas de modificação e acesso originais dos arquivos ao copiar arquivos, juntamente com o tempo estimado e a velocidade da conexão que aparecerão na tela.
$ scp -p scp-cheatsheet.pdf [email protected]:/home/tecmint/.
Saída de Exemplo:
[email protected]'s password: scp-cheatsheet.pdf 100% 531 721.4KB/s 00:00
Compressão Scp Durante a Cópia de Arquivos
Um dos parâmetros que pode acelerar sua transferência de arquivos é o parâmetro “-C
“, que é usado para comprimir seus arquivos no momento. A peculiaridade é que a compressão ocorre apenas na rede. Quando o arquivo chega ao servidor de destino, ele retornará ao tamanho original antes da compressão.
Dê uma olhada nesses comandos. Está usando um único arquivo de 93 Mb.
$ scp -pv messages.log [email protected]:.
Resultado de Exemplo:
Executing: program /usr/bin/ssh host 202.x.x.x, user mrarianto, command scp -v -p -t. OpenSSH_6.0p1 Debian-3, OpenSSL 1.0.1c 10 May 2012 debug1: Reading configuration data /etc/ssh/ssh_config debug1: /etc/ssh/ssh_config line 19: Applying options for * debug1: Connecting to 202.x.x.x [202.x.x.x] port 22. debug1: Connection established. debug1: identity file /home/pungki/.ssh/id_rsa type -1 debug1: Found key in /home/pungki/.ssh/known_hosts:1 debug1: ssh_rsa_verify: signature correct debug1: Trying private key: /home/pungki/.ssh/id_rsa debug1: Next authentication method: password [email protected]'s password: debug1: Authentication succeeded (password). Authenticated to 202.x.x.x ([202.x.x.x]:22). debug1: Sending command: scp -v -p -t. File mtime 1323853868 atime 1380425711 Sending file timestamps: T1323853868 0 1380425711 0 messages.log 100% 93MB 58.6KB/s 27:05 Transferred: sent 97614832, received 25976 bytes, in 1661.3 seconds Bytes per second: sent 58758.4, received 15.6 debug1: Exit status 0
Copiar arquivos sem o parâmetro “-C
” resultará em 1661,3 segundos. Você pode comparar o resultado com o comando abaixo usando o parâmetro “-C
“.
$ scp -Cpv messages.log [email protected]:.
Resultado de Exemplo:
Executing: program /usr/bin/ssh host 202.x.x.x, user mrarianto, command scp -v -p -t. OpenSSH_6.0p1 Debian-3, OpenSSL 1.0.1c 10 May 2012 debug1: Reading configuration data /etc/ssh/ssh_config debug1: /etc/ssh/ssh_config line 19: Applying options for * debug1: Connecting to 202.x.x.x [202.x.x.x] port 22. debug1: Connection established. debug1: identity file /home/pungki/.ssh/id_rsa type -1 debug1: Host '202.x.x.x' is known and matches the RSA host key. debug1: Found key in /home/pungki/.ssh/known_hosts:1 debug1: ssh_rsa_verify: signature correct debug1: Next authentication method: publickey debug1: Trying private key: /home/pungki/.ssh/id_rsa debug1: Next authentication method: password [email protected]'s password: debug1: Enabling compression at level 6. debug1: Authentication succeeded (password). Authenticated to 202.x.x.x ([202.x.x.x]:22). debug1: channel 0: new [client-session] debug1: Sending command: scp -v -p -t . File mtime 1323853868 atime 1380428748 Sending file timestamps: T1323853868 0 1380428748 0 Sink: T1323853868 0 1380428748 0 Sending file modes: C0600 97517300 messages.log messages.log 100% 93MB 602.7KB/s 02:38 Transferred: sent 8905840, received 15768 bytes, in 162.5 seconds Bytes per second: sent 54813.9, received 97.0 debug1: Exit status 0 debug1: compress outgoing: raw data 97571111, compressed 8806191, factor 0.09 debug1: compress incoming: raw data 7885, compressed 3821, factor 0.48
Como você pode ver, ao usar a compressão, o processo de transferência é concluído em 162,5 segundos. É 10 vezes mais rápido do que não usar o parâmetro “-C
“. Se você estiver copiando muitos arquivos pela rede, o parâmetro “-C
” ajudaria você a diminuir o tempo total necessário.
O que devemos notar é que o método de compressão não funcionará em todos os arquivos. Quando o arquivo de origem já está comprimido, você não encontrará melhorias lá. Arquivos como .zip, .rar, fotos e .iso não serão afetados pelo parâmetro “-C
“.
Alterar o Cifra SCP para Criptografar Arquivos
Por padrão, SCP usa “AES-128” para criptografar arquivos. Se você deseja mudar para outro cifra para criptografar, pode usar o parâmetro “-c
“.
Dê uma olhada neste comando.
$ scp -c 3des Label.pdf [email protected]:. [email protected]'s password: Label.pdf 100% 3672KB 282.5KB/s 00:13
O comando acima informa ao SCP para usar o algoritmo 3des para criptografar o arquivo. Tenha cuidado de que este parâmetro usando “-c
” e não “-C
“.
Limitando o Uso de Largura de Banda com o Comando SCP
Outro parâmetro que pode ser útil é o parâmetro “-l
“. O parâmetro “-l” limitará a largura de banda a ser usada. Isso será útil se você estiver fazendo um script de automação para copiar muitos arquivos, mas não quer que a largura de banda seja drenada pelo processo SCP.
$ scp -l 400 Label.pdf [email protected]:. [email protected]'s password: Label.pdf 100% 3672KB 50.3KB/s 01:13
O valor 400 atrás do parâmetro “-l
” significa que limitamos a largura de banda para o processo SCP apenas para 50 KB/s.
Uma coisa a lembrar é que a largura de banda é especificada em Kilobits/s (kbps). Isso significa que 8 bits são iguais a 1 byte.
Enquanto SCP conta em Kilobyte/seg (KB/s). Então, se você deseja limitar sua largura de banda a um SCP máximo de apenas 50 KB/s, você precisa configurá-lo para 50 x 8 = 400.
SCP com uma Porta Diferente
Geralmente, SCP está usando a porta 22 como porta padrão, mas por razões de segurança, você pode alterar a porta para outra porta. Por exemplo, estamos usando a porta 2249.
Então, o comando deve ser assim.
$ scp -P 2249 Label.pdf [email protected]:. [email protected]'s password: Label.pdf 100% 3672KB 262.3KB/s 00:14
Certifique-se de que ele use uma “P
” maiúscula, não uma “p
”, já que “p
” já é usado para tempos preservados e modos.
SCP – Copiar Arquivos e Diretórios de Forma Recursiva
Às vezes, precisamos copiar o diretório e todos os arquivos/diretórios dentro dele. Seria melhor se pudéssemos fazer isso em um único comando usando o parâmetro “-r
”, que copia todo o diretório de forma recursiva.
$ scp -r documents [email protected]:. [email protected]'s password: Label.pdf 100% 3672KB 282.5KB/s 00:13 scp.txt 100% 10KB 9.8KB/s 00:00
Quando o processo de cópia for concluído, no servidor de destino você encontrará um diretório chamado “documentos” com todos os seus arquivos. A pasta “documentos” é criada automaticamente.
SCP – Desativar Mensagens de Progresso
Se você optar por não ver o medidor de progresso e avisos / mensagens de diagnóstico do SCP, pode desativá-lo usando o parâmetro “-q”. Aqui está um exemplo.
$ scp -q Label.pdf [email protected]:. [email protected]'s password: pungki@mint ~/Documents $
Como você pode ver, depois de inserir a senha, não há informações sobre o processo SCP. Após a conclusão do processo, você verá um prompt novamente.
SCP – Copiar Arquivos Usando Proxy
O servidor proxy geralmente é usado no ambiente de escritório. Nativamente, o SCP não é configurado com proxy. Quando seu ambiente usa um proxy, você precisa “informar” o SCP para se comunicar com o proxy.
Aqui está o cenário. O endereço do proxy é 10.0.96.6 e a porta do proxy é 8080. O proxy também implementa autenticação de usuário. Primeiro, você precisa criar o arquivo “~/.ssh/config”. Em segundo lugar, coloque este comando dentro dele.
ProxyCommand /usr/bin/corkscrew 10.0.96.6 8080 %h %p ~/.ssh/proxyauth
Então você precisa criar o arquivo “~/.ssh/proxyauth” que contém.
myusername:mypassword
Depois disso, você pode fazer o SCP transparentemente como de costume.
Observe que o corkscrew pode ainda não estar instalado no seu sistema. No meu Linux Mint, preciso instalá-lo primeiro, usando o procedimento padrão de instalação do Linux Mint.
$ apt-get install corkscrew
Para outros sistemas baseados em yum, os usuários podem instalar o corkscrew usando o seguinte comando yum.
# yum install corkscrew
Outra coisa é que, uma vez que o arquivo “~/.ssh/proxyauth” contém seu “nome de usuário” e “senha” em formato legível, por favor, certifique-se de que o arquivo possa ser acessado apenas por você.
Escolha um Arquivo ssh_config Diferente
Para usuários móveis que frequentemente alternam entre redes corporativas e redes públicas, será uma dor de cabeça sempre mudar configurações no SCP. Seria melhor se pudéssemos colocar um arquivo ssh_config diferente para atender às nossas necessidades.
O proxy é usado na rede da empresa, mas não na rede pública e você alterna regularmente entre redes.
$ scp -F /home/pungki/proxy_ssh_config Label.pdf [email protected]:. [email protected]'s password: Label.pdf 100% 3672KB 282.5KB/s 00:13
Por padrão, o arquivo “ssh_config” por usuário será colocado em “~/.ssh/config“. Criar um arquivo “ssh_config” específico com compatibilidade de proxy facilitará a alternância entre redes.
Quando você estiver na rede da empresa, poderá usar o parâmetro “-F
“. Quando você estiver em uma rede pública, poderá pular o parâmetro “-F
“.
Isso é tudo sobre SCP. Você pode ver as páginas do manual do SCP para obter mais detalhes. Fique à vontade para deixar comentários e sugestões.