
Usamos o ssh para conectar com segurança com outra máquina(servidor, desktop…) que esteja remota. Funciona da seguinte forma, geramos duas chaves, que chamamos de par de chaves :), uma chave secreta e uma pública. A secreta não devemos repassar para ninguém, nem para seu patrão! A pública, bem, como a o nome diz, podemos entregar para qualquer pessoa. Nesse caso, enviamos a chave pública para o computador remoto que queremos acessar usando o protocolo ssh.
Vamos ver como gerar as chaves e enviá-las para o servidor nesse artigo.
Gerando Chaves com ssh-keygen
A maneira mais simples de gerar um par de chaves é executar o comando ssh-keygen sem argumentos. Nesse caso, ele solicitará o arquivo no qual armazenar as chaves. Sim, apenas executar ssh-keygen irá gerar duas chaves(um par 🙂 ). Aqui está um exemplo:
maria@debian11VM:~$ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/maria/.ssh/id_rsa): Created directory '/home/maria/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/maria/.ssh/id_rsa Your public key has been saved in /home/maria/.ssh/id_rsa.pub The key fingerprint is: SHA256:nu3JhNnUzaBIoiayH5qt8dQ3KB4erRE8AejoSG8vQrA maria@debian11VM The key's randomart image is: +---[RSA 3072]----+ |o | |.. | |o . . . . | |o+ . . o . o + | |*.* o S o . o | |E= X . . B | |+ O = o = + | | % O o . + . | |+.O . + | +----[SHA256]-----+
Se teclarmos Enter em todas as perguntas acima, serão criados as chaves dentro de sua pasta home em /home/maria/.ssh/
Somos perguntados também para criarmos uma senha para a chave secreta, isso é muiiiiito importante! Temos a opção de apenas teclarmos Enter, mas não façam isso! Criem uma senha!
Dentro de /home/maria/.ssh/ foram criados os arquivos
- id_rsa é a chave secreta
- id_rsa.pub é a chave pública
No entanto, em ambientes corporativos, o local costuma ser diferente. Se quiser poderia digitar o caminho para onde quer que as chaves sejam criadas. Também, quando deixamos o ssh-keygen dar um nome, o nome do arquivo depende do algoritmo, neste caso, id_rsa ao usar o algoritmo RSA padrão. Também pode ser, por exemplo, id_dsa ou id_ecdsa.
Veja: Algoritmos comuns de criptografia.
Vou criar uma pasta
maria@debian11VM:~$ mkdir ~/minhasChaves
Vou executar o comando ssh-keygen e apontar para /home/maria/minhasChaves/chaveSecreta onde “chaveSecreta” é o nome da chave secreta e a chave pública será o mesmo nome mais .pub adicionado
maria@debian11VM:~$ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/maria/.ssh/id_rsa): /home/maria/minhasChaves/chaveSecreta Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/maria/minhasChaves/chaveSecreta Your public key has been saved in /home/maria/minhasChaves/chaveSecreta.pub The key fingerprint is: SHA256:bXVRGkb0ATNWx/KYsGa58tE0V25jzss19orYfaAAKYo maria@debian11VM The key's randomart image is: +---[RSA 3072]----+ | BO=o| | o.+==| | . .+o*o| | . o. .=.=o=| | . . .S.oo +++.| | E . .o o o=.| | + oo.=| | ooo oo| | . o oo | +----[SHA256]-----+
Olhe só,
maria@debian11VM:~$ ls -l ~/minhasChaves/ total 8 -rw------- 1 maria maria 2602 mai 15 11:07 chaveSecreta -rw-r--r-- 1 maria maria 570 mai 15 11:07 chaveSecreta.pub
Como Ver Informações Sobre as Chaves Criptográficas?
Bom, vamos lá. Vamos usar -l para mostrar Mostre a impressão digital(fingerprint) do arquivo de chave e -f para apontar para o arquivo a ser consultado
#1 para ver informações:
maria@debian11VM:~$ ssh-keygen -l -f ./minhasChaves/chaveSecreta 3072 SHA256:bXVRGkb0ATNWx/KYsGa58tE0V25jzss19orYfaAAKYo maria@debian11VM (RSA)
#2 para vermos informações mais detalhadas usamos -v de verbose. Podemos ver abaixo um visual em formato ASCII do fingerprint
maria@debian11VM:~$ ssh-keygen -lv -f ./minhasChaves/chaveSecreta 3072 SHA256:bXVRGkb0ATNWx/KYsGa58tE0V25jzss19orYfaAAKYo maria@debian11VM (RSA) +---[RSA 3072]----+ | BO=o| | o.+==| | . .+o*o| | . o. .=.=o=| | . . .S.oo +++.| | E . .o o o=.| | + oo.=| | ooo oo| | . o oo | +----[SHA256]-----+
Escolhendo um Algoritmo e um Tamanho de Chave com ssh-keygen
Algoritmo: Também conhecido como cifra, os algoritmos são as regras ou instruções para o processo de criptografia. O comprimento da chave, a funcionalidade e os recursos do sistema de criptografia em uso determinam a eficácia da criptografia.
categoriaoutros
O SSH oferece suporte a vários algoritmos de chave pública para chaves de autenticação. Esses incluem:
- rsa é um algoritmo antigo baseado na dificuldade de fatorar números grandes. Um tamanho de chave de pelo menos 2048 bits é recomendado para RSA; 4096 bits é melhor. RSA está envelhecendo e avanços significativos estão sendo feitos. A escolha de um algoritmo diferente pode ser aconselhável. É bem possível que o algoritmo RSA se torne praticamente quebrável em um futuro próximo. Todos os clientes SSH suportam este algoritmo.
- dsa é um antigo algoritmo de assinatura digital do governo dos EUA. Baseia-se na dificuldade de calcular logaritmos discretos. Um tamanho de chave de 1024 normalmente seria usado com ele. O DSA em sua forma original não é mais recomendado.
- ecdsa é um novo Algoritmo de Assinatura Digital padronizado pelo governo dos EUA, usando curvas elípticas. Este é provavelmente um bom algoritmo para aplicações atuais. Apenas três tamanhos de chave são suportados: 256, 384 e 521 bits. Recomendamos sempre usá-lo com 521 bits, pois as chaves ainda são pequenas e provavelmente mais seguras do que as chaves menores(embora também devam ser seguras). A maioria dos clientes SSH agora oferece suporte a esse algoritmo.
- ed25519 este é um novo algoritmo adicionado no OpenSSH. O suporte para isso nos clientes ainda não é universal. Assim, seu uso em aplicações de uso geral pode ainda não ser aconselhável.
O algoritmo é selecionado usando a opção -t e o tamanho da chave usando a opção -b. Os seguintes comandos ilustram:
ssh-keygen -t rsa -b 4096 ssh-keygen -t dsa ssh-keygen -t ecdsa -b 521 ssh-keygen -t ed25519
Dando um nome à Nossa Chave Gerada pelo ssh-keygen
Podemos também usar -f para apontarmos o caminho e o nome do arquivo que será criado com nossa chave. Para isso executamos ssh-keygen -f ~/chave-secreta-ecdsa -t ecdsa -b 521
maria@debian11VM:~$ cd minhasChaves/ maria@debian11VM:~/minhasChaves$ ssh-keygen -f ./segredo -t ecdsa -b 521 Generating public/private ecdsa key pair. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in ./segredo Your public key has been saved in ./segredo.pub The key fingerprint is: SHA256:HCwHqHTj+ob8PYoNiBOyNPKWwtu4gB1/m1tC4XyZvl4 maria@debian11VM The key's randomart image is: +---[ECDSA 521]---+ | .. | | . + o | | . + .o + | | . .o = + | |+o.. + S | |B*o+ . o | |Oo*o. o o E | |.+*+oo.= o | | +o++.=+o | +----[SHA256]-----+
olha as chaves criadas agora com as que criamos anteriormente
maria@debian11VM:~/minhasChaves$ ls -l total 16 -rw------- 1 maria maria 2602 mai 15 11:07 chaveSecreta -rw-r--r-- 1 maria maria 570 mai 15 11:07 chaveSecreta.pub -rw------- 1 maria maria 736 mai 15 11:48 segredo -rw-r--r-- 1 maria maria 270 mai 15 11:48 segredo.pub
Veja informações da nova chave criada
maria@debian11VM:~/minhasChaves$ ssh-keygen -l -f ./segredo 521 SHA256:HCwHqHTj+ob8PYoNiBOyNPKWwtu4gB1/m1tC4XyZvl4 maria@debian11VM (ECDSA)
Como Enviar a Chave Pública do ssh para o Servidor?
Para usar a autenticação de chave pública, a chave pública deve ser copiada para um servidor e instalada em um arquivo author_keys. Podemos fazer isso manualmente, copiando e colando o conteúdo da chave pública ou usando, convenientemente 🙂 , a ferramenta ssh-copy-id. Assim: ssh-copy-id -i ~/.ssh/segredo maria@nome-ou-ip-servidor-remoto
Assim que a chave pública for configurada no servidor, o servidor permitirá que qualquer usuário conectado que tenha a chave privada faça login. Durante o processo de login, o cliente prova a posse da chave privada assinando digitalmente a troca de chaves.
Como dito antes, a criação da chave secreta com senha é imprescindível, muito importante. Mas aqui temos um probleminha se nosso intuito é usar a chave para envio de backup automático, teríamos que todo dia, colocara senha ao rodar o script ou programa de backup. Isso seria chato, mas o ssh tem uma solução para isso que está nesse nosso artigo: SSH: Usando ssh-agent e ssh-add Guardar Senha das Chaves
Vamos fazer na prática a inserção da chave pública no servidor remoto. Esse server remoto tem as seguintes informações:
- Nome(ou hostname): oracle86
- Endereço IP: 192.168.50.3
Podemos usar tanto o hostname quanto o IP para enviar a chave usando ssh-copy-id. Execute o comando, conforme abaixo, e veja:
maria@debian11VM:~/minhasChaves$ ssh-copy-id -i segredo.pub maria@192.168.50.3 /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "segredo.pub" The authenticity of host '192.168.50.3 (192.168.50.3)' can't be established. ECDSA key fingerprint is SHA256:mvXJTZt0O3RTMlNkysMVAN/4BDXQcyyjEE3aDJ4XJuU. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys maria@192.168.50.3's password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'maria@192.168.50.3'" and check to make sure that only the key(s) you wanted were added.
Bom, por aqui é só. Outros artigos se seguirão dando continuidade a esse tema.
Comment on “SSH: Criando Par de Chaves para Autenticação”