terça-feira, 26 de maio de 2015

Manipulação de arquivos via SCP, Rsync e Scripts por Chave Pública

Introdução

Nos posts anteriores [1, 2] eu ensinei a criar um par de chaves publica/privada através de utilitários no Windows e no Linux, e como acessar os servidores utilizando essas chaves.

Nesse post eu vou demonstrar como criar chaves sem senha que serão utilizadas para realizar cópias de arquivos via scp e rsync, e em servidores onde existe a necessidade de realizar cópias automatizadas (via scripts), dispensando assim a necessidade de digitação e/ou armazenamento de senhas.

O servidor que recebe o arquivo será tratado neste documento como Servidor Destino e o servidor que envia o arquivo como Servidor Origem.
Lembrando que se existir a necessidade dos servidores trocarem arquivos entre si, será necessário realizar os dois procedimentos (origem e destino) em ambos os servidores.

Procedimentos Servidor Origem

Gerar o par de chaves Pública/Privada

# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/teste/.ssh/id_rsa): <ENTER>
Created directory '/home/teste/.ssh'.
Enter passphrase (empty for no passphrase): <ENTER>
Enter same passphrase again: <ENTER>
Your identification has been saved in /home/teste/.ssh/id_rsa.
Your public key has been saved in /home/teste/.ssh/id_rsa.pub.
The key fingerprint is:
79:2d:88:c4:35:1e:be:8f:f2:c1:df:dc:ae:27:b0:39 teste@private.localhost
The key's randomart image is:
+--[ RSA 2048]----+
|        +        |
|     . + o       |
|      o o        |
|     . . + .     |
|      . S o .    |
|       . +..     |
|      . + .+     |
|       o oEo...  |
|        . ..+=o  |
+-----------------+


Observações
Created directory '/home/teste/.ssh'. - Aparece apenas na primeira vez que a chave é criada;
Enter passphrase (empty for no passphrase): - É a senha para sua chave privada, nesse caso vamos criar uma chave sem senha, portanto basta pressionar Enter.

Copiar a Chave Pública

# cat /home/teste/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAxka6+ntfEcwUMCXYRpCS9im8yJrlyp/+LhFh3K/X0Ad5QPUlUTTklZ2bDps4CdKNbQf/6T4j1nu/ylJwUHBBJyK6y8uZDXCjCtjCcZfLsO8pSLjsmYJfKqXeD50y+zSYqC9GB+HeQf+It09unQt5gTvGtfgWdKzq2hchfpkEEgWQD0mKyQZAl5cU2SbmLMJV8YxfBpwAONyj7ARKtUrkW3XcVa+QKFdYFTfHshMdcBCAsGuO6tDFmWSRjcEkYHgyNaaeIufOwHPvLzs4TVk3/NmOC1Pd1bYUcmEQslL0U6UPun9X8A6aNs3eu6JgOWWifze6bxgshp9dKVJHlgAxbQ== teste@private.localhost


Copie esta chave para um txt temporário, pois ela será necessária no Procedimento Servidor Destino. Obs.: As informações da chave acima estão em uma única linha.

Procedimentos Servidor Destino

Criar o usuário e configurar o acesso via chave

Crie o usuário no Linux
# adduser teste

Entre no diretório do usuário
# cd /home/teste/

Crie o diretório.ssh
# mkdir .ssh

Acesse o diretório
# cd .ssh/

Crie o arquivo authorized_keys
# vi authorized_keys

Dentro desse arquivo você vai colocar o conteúdo da chave pública, aquela que você colou em um arquivo temporário. Tenha certeza de que não houve quebra de linha.

Uma boa prática é colocar uma linha com a identificação do servidor:
# Servidor 01
<CHAVE>

# Servidor 02
<CHAVE>

Dica do grande amigo Andreyev

Altere as permissões do diretório
# chmod 700 .

E do arquivo
# chmod 600 authorized_keys

E por último de todo o diretório .ssh
# chown -R teste:teste /home/teste/.ssh

Testar a conexão - Partindo do Servidor Origem

# ssh teste@servidor_destino

The authenticity of host '[servidor_destino]:1922 ([192.168.100.2]:22)' can't be established.
RSA key fingerprint is 3e:99:b4:aa:c6:8a:e2:e0:e0:55:d4:f8:01:76:2a:8b.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[servidor_destino]:22,[192.168.100.2]:22' (RSA) to the list of known hosts.
[teste@servidor_destino ~]$
[teste@servidor_destino ~]$ logout
Connection to servidor_destino closed.


Observações:
Essas mensagens informando que a conexão não foi possível e que vai adicionar o host ao arquivo know hosts só aparece na primeira conexão.

Copiar um arquivo do Servidor Origem para o Servidor de Destino usando scp

# scp teste.txt teste@servidor_destino:/home/teste
teste.txt                                     100%    0     0.0KB/s   00:00


Copiar um arquivo do Servidor Origem para o Servidor de Destino usando rsync

# rsync -Cravzp teste teste@servidor_destino:/home/teste/
sending incremental file list
teste/
teste/teste.txt
teste/teste01.txt
teste/teste02.txt
teste/teste03.txt

sent 270 bytes  received 92 bytes  724.00 bytes/sec
total size is 0  speedup is 0.00


Observações:
Se você mudar a porta do SSH nos Servidores a sintaxe dos comandos passam a ser:
# scp -P 2891 teste.txt teste@servidor_destino:/home/teste

# rsync -Cravzp --rsh='ssh -p
2891' teste teste@servidor_destino:/home/teste/

Os mesmos procedimentos podem ser usados em scripts, sem a necessidade de senhas.

Observação:
Todas as recomendações de segurança dos posts anteriores devem ser implementadas.

Nenhum comentário: