comandoscp – Secure copy

Scp (Secure Copy) é uma ferramenta de linha de comando para copiar ou transferir arquivos através de hosts. Ele usa o mesmo tipo de mecanismo de segurança como o programa ssh.

Neste rápido tutorial vamos ver alguns exemplos do comando scp e como ele pode ser usado para transferir arquivos com segurança.

Como instalar o scp

Scp é geralmente instalado por padrão na maioria das distribuições linux como parte dos pacotes openssh. No ubuntu/debian por exemplo, o pacote openssh-client fornece o programa scp.

$ dpkg -L openssh-client | grep scp/usr/bin/scp/usr/share/man/man1/scp.1.gz

Its o pacote OpenSSH que fornece os programas ssh, scp, sftp juntamente com muitas outras ferramentas. Então não temos que fazer nada extra aqui, exceto usar e aprender o programa.

Utilizar o scp – sintaxe básica

A sintaxe básica do scp é muito simples de memorizar. Parece assim

$ scp source_file_path destination_file_path

Dependente do host, o caminho do arquivo deve incluir o endereço completo do host, número da porta, nome de usuário e senha junto com o caminho do diretório.

Então se você estiver “enviando” arquivo de sua máquina local para uma máquina remota (uploading) a sintaxe seria assim

$ scp ~/my_local_file.txt _host.com:/some/remote/directory

Quando copiando arquivo de máquina remota para máquina local (download), sua aparência é apenas a inversa

$ scp _host.com:/some/remote/directory ~/my_local_file.txt# just download the file$ scp :/some/path/file.txt .

Isso é basicamente sobre usar o scp para tarefas regulares. Além disso, existem algumas opções e funções extras que o scp suporta. Vamos ter uma rápida visão geral dessas.

E sim, por padrão o scp sempre sobrescreve os arquivos no destino. Se você precisa evitar isso, use uma ferramenta mais poderosa chamada rsync.

exemplos de comandosscp

1. Saída verbosa

Com saída verbosa, o programa scp emitiria muitas informações sobre o que faz em segundo plano. Isto é frequentemente útil quando o programa falha ou é incapaz de completar o pedido. A saída verbose indicaria então o ponto exato onde o programa encontrou problemas.

$ scp -v ~/test.txt :/root/help2356.txtExecuting: program /usr/bin/ssh host 192.168.1.3, user root, command scp -v -t /root/help2356.txtOpenSSH_6.2p2 Ubuntu-6ubuntu0.1, OpenSSL 1.0.1e 11 Feb 2013debug1: Reading configuration data /home/enlightened/.ssh/configdebug1: Reading configuration data /etc/ssh/ssh_configdebug1: /etc/ssh/ssh_config line 19: Applying options for *debug1: Connecting to 192.168.1.3 port 22.debug1: Connection established...... OUTPUT TRUNCATED

A saída seria grande e conteria informações detalhadas sobre como a conexão é feita, que configuração e arquivos de identidade estão sendo usados e assim por diante.

2. Transferir múltiplos ficheiros

Múltiplos ficheiros podem ser especificados separados por um espaço como este

$ scp foo.txt bar.txt :/path/directory/

Para copiar múltiplos ficheiros do anfitrião remoto para o directório local actual

$ scp :/path/directory/\{foo.txt,bar.txt\} .$ scp :~/\{abc.log,cde.txt\} .

3. Copiar todo o directório (recursivamente)

Para copiar um directório inteiro de uma máquina para outra utilize a opção r e especifique o directório

$ scp -v -r ~/Downloads :/root/Downloads

4. Copiar ficheiros através de 2 máquinas remotas

Scp também pode copiar ficheiros de uma máquina remota para outra máquina remota.

$ scp :/some/remote/dir/foobar.txt :/some/remote/dir/

5. Acelere a transferência com compressão

Uma opção super legal para acelerar a transferência para poupar tempo e largura de banda. Tudo o que você precisa fazer é usar a opção C para habilitar a compressão. Os arquivos são comprimidos na hora e descomprimidos no destino.

$ scp -vrC ~/Downloads :/root/Downloads

No exemplo acima movemos todo o diretório com a compressão ativada. O ganho de velocidade dependeria de quanto os arquivos poderiam ser comprimidos.

6. Limite o uso da largura de banda

Se você não quiser que o scp tome toda a largura de banda disponível, então use a opção l para limitar a velocidade máxima em Kbit/s.

$ scp -vrC -l 400 ~/Downloads :/root/Downloads

7. Conecte a um número de porta diferente no host remoto

Se o servidor remoto tiver daemon ssh rodando em uma porta diferente (o padrão é 22), então você precisa dizer ao scp para usar esse número de porta em particular usando a opção ‘-P’.

$ scp -vC -P 2200 ~/test.txt :/some/path/test.txt

8. Preserve os atributos do arquivo

A opção ‘-p’ (pequena), preservaria os tempos de modificação, tempos de acesso e modos do arquivo original.

$ scp -C -p ~/test.txt :/some/path/test.txt

9. Modo silencioso

No modo silencioso (opção ‘-q’), a saída scp seria suprimida, e desabilitaria o medidor de progresso assim como as mensagens de aviso e diagnóstico.

$ scp -vCq ~/test.txt :/some/path/test.txt

10. Especifique o ficheiro de identidade

Quando utilizar autenticação baseada em chave (sem palavra-passe), teria de especificar o ficheiro de identidade que contém a chave privada. Esta opção é passada directamente para o comando ssh e funciona da mesma forma.

$ scp -vCq -i private_key.pem ~/test.txt :/some/path/test.txt

11. Utilize um ficheiro ssh_config diferente

Utilize a opção ‘-F’ para especificar um ficheiro ssh_config diferente.

$ scp -vC -F /home/user/my_ssh_config ~/test.txt :/some/path/test.txt

12. Use cifra diferente

Scp por padrão usa a cifra AES/encryption. Algumas vezes você pode querer usar uma cifra diferente. Usando uma cifra diferente pode acelerar o processo de transferência. Por exemplo, blowfish e arcfour são conhecidos por serem mais rápidos que AES (mas menos seguros).

$ scp -c blowfish -C ~/local_file.txt :/remote/path/file.txt

No exemplo acima usamos a cifra do blowfish juntamente com a compressão. Isso pode aumentar significativamente a velocidade dependendo da largura de banda disponível.

Resumo

Embora o scp seja muito eficiente na transferência de arquivos com segurança, ele não possui os recursos necessários de uma ferramenta de sincronização de arquivos. Tudo que ele pode fazer é copiar colar todos os arquivos mencionados de um local para outro.

Uma ferramenta mais poderosa é o Rsync que não só tem todas as funções do scp, mas adiciona mais recursos para sincronizar inteligentemente os arquivos em 2 hosts. Por exemplo, ele pode verificar e carregar apenas os arquivos modificados, ignorar arquivos existentes e assim por diante.