Pesquisa de site

Comando SCP Linux – Transferir arquivos com segurança no Linux


Os administradores Linux devem estar familiarizados com o ambiente de linha de comando. Já que o modo GUI (Graphical User Interface) em servidores Linux não é comum de ser instalado.

SSH pode ser o protocolo mais popular para permitir que administradores Linux gerenciem os servidores de forma remota e segura. Integrado ao comando SSH existe o comando SCP, que é usado para copiar arquivo(s) entre servidores de forma segura.

Sintaxe Básica do Comando SCP

O comando abaixo será lido como uma cópia de “source_file_name” em “destination_folder” em “destination_host” usando o “nome de usuário " conta.

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.

Transferir arquivos com segurança no Linux

O comando SCP básico 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 apareça algum erro.

Você pode usar o parâmetro “-v” para imprimir informações de depuração na tela. Ele pode ajudá-lo a depurar problemas de conexão, autenticação e configuração.

Copiar arquivo do host local para o servidor remoto

O comando a seguir copia um arquivo “scp-cheatsheet.pdf” de um sistema Linux local para um remoto no diretório /home/tecmint.

scp -v scp-cheatsheet.pdf [email :/home/tecmint/.

Exemplo de saída:

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 do host remoto para o host local

O comando a seguir copia um arquivo “ssh-cheatsheet.pdf” de um host remoto para um sistema local no diretório /home/tecmint.

scp -v [email :/home/ravi/ssh-cheatsheet.pdf /home/tecmint/.

Exemplo de saída:

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 comando a seguir copia um arquivo “ssh-cheatsheet.pdf” de um host remoto para outro sistema host remoto no diretório /home/tecmint.

scp -v [email :/home/ravi/ssh-cheatsheet.pdf [email :/home/anusha/.

Copiar arquivos com data e hora de criação original

O parâmetro “-p” preservará a modificação original dos arquivos e os tempos de acesso durante a cópia dos arquivos junto com o tempo estimado e a velocidade da conexão aparecerá na tela.

scp -p scp-cheatsheet.pdf [email :/home/tecmint/.

Exemplo de saída:

[email 's password: 
scp-cheatsheet.pdf                                                                                                                                                                 100%  531   721.4KB/s   00:00    

Compressão Scp ao copiar arquivos

Um dos parâmetros que podem acelerar a transferência de arquivos é o parâmetro “-C”, que é usado para compactar seus arquivos em trânsito. O único é que a compactação só acontece na rede. Quando o arquivo chegar ao servidor de destino, ele retornará ao tamanho original de antes da compactação.

Dê uma olhada nesses comandos. Está usando um único arquivo de 93 Mb.

scp -pv messages.log [email :.

Exemplo de saída:

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 '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 :.

Exemplo de saída:

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 '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, quando você usa compactação, o processo de transferência é feito 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 a diminuir o tempo total necessário.

O que devemos observar é que o método de compactação não funcionará em nenhum arquivo. Quando o arquivo fonte já estiver compactado, você não encontrará nenhuma melhoria nele. Arquivos como .zip, .rar, pictures e .iso não serão afetados pela mensagem “ Parâmetro -C”.

Alterar a cifra SCP para criptografar arquivos

Por padrão, o SCP usa “AES-128” para criptografar arquivos. Se você quiser mudar para outra cifra para criptografá-la, você pode usar o parâmetro “-c”.

Dê uma olhada neste comando.

scp -c 3des Label.pdf [email :.

[email 's password:
Label.pdf 100% 3672KB 282.5KB/s 00:13

O comando acima diz ao SCP para usar o algoritmo 3des para criptografar o arquivo. Tenha cuidado para que este parâmetro use “-c” e não “-C“.

Limitando o uso de largura de banda com 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. Será útil se você fizer um script de automação para copiar muitos arquivos, mas não quiser que a largura de banda seja esgotada pelo processo SCP.

scp -l 400 Label.pdf [email :.

[email 's password:
Label.pdf 100% 3672KB 50.3KB/s 01:13

O valor 400 por trás do parâmetro “-l” significa que limitamos a largura de banda do processo SCP a apenas 50 KB/ seg.

Uma coisa a lembrar é que a largura de banda é especificada em Kilobits/seg (kbps). Isso significa que 8 bits são iguais a 1 byte.

Enquanto SCP conta em Kilobyte/seg (KB/s). Portanto, se você quiser limitar sua largura de banda a um máximo de SCP de apenas 50 KB/s, será necessário configurá-la para 50 x 8=400.

SCP com uma porta diferente

Normalmente, o SCP usa a porta 22 como porta padrão, mas por motivos 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 :.

[email 's password:
Label.pdf 100% 3672KB 262.3KB/s 00:14

Certifique-se de usar “P” maiúsculo e não “p”, pois “p” já é usado para tempos e modos preservados.

SCP – Copiar arquivos e diretórios recursivamente

Às vezes, precisamos copiar o diretório e todos os arquivos/diretórios dentro dele. Será melhor se pudermos fazer isso em um único comando usando o parâmetro “-r”, que copia todo o diretório recursivamente.

scp -r documents [email :.

[email 's password:
Label.pdf 100% 3672KB 282.5KB/s 00:13
scp.txt 100% 10KB 9.8KB/s 00:00

Terminado o processo de cópia, 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 as mensagens de aviso/diagnóstico do SCP, você pode desativá-lo usando o parâmetro “-q”. Aqui está um exemplo.

scp -q Label.pdf [email :.

[email 's password:
pungki@mint ~/Documents $

Como você pode ver, após 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, SCP não é um proxy configurado. Quando seu ambiente usa um proxy, você deve “dizer” ao 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 implementou a autenticação do usuário. Primeiro, você precisa criar o arquivo “~/.ssh/config”. Segundo, você coloca 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 de forma transparente, como de costume.

Observe que o saca-rolhas pode ainda não estar instalado em seu sistema. No meu Linux Mint, preciso instalá-lo primeiro, usando o procedimento de instalação padrão do Linux Mint.

apt-get install corkscrew

Para outros sistemas baseados em yum, os usuários podem instalar o saca-rolhas usando o seguinte comando yum.

yum install corkscrew

Outra coisa é que como o arquivo “~/.ssh/proxyauth” contém seu “nome de usuário” e “senha” em formato de texto não criptografado , certifique-se de que o arquivo possa ser acessado somente por você.

Escolha um arquivo ssh_config diferente

Para usuários móveis que alternam frequentemente entre as redes corporativas e as redes públicas, será difícil alterar sempre as configurações no SCP. É melhor 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ê troca de rede regularmente.

scp -F /home/pungki/proxy_ssh_config Label.pdf

[email :.
[email '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“. A criação de um arquivo “ssh_config” específico com compatibilidade de proxy facilitará a alternância entre redes.

Quando você estiver na rede da empresa, você pode usar o parâmetro “-F”. Quando você estiver em uma rede pública, você pode pular o parâmetro “-F”.

Isso é tudo sobre SCP. Você pode ver as páginas de manual do SCP para obter mais detalhes. Fique à vontade para deixar comentários e sugestões.