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 rsaGenerating 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.pubssh-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_destinoThe 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/testeteste.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 -p2891' 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.