Como as chaves públicas e privadas são armazenadas e relacionadas no cliente e no servidor?

0

Eu tentei combinar as chaves públicas e privadas no meu cliente e servidor, bem como os arquivos de configuração, mas não consigo entender minhas diferenças. Eu posso conectar com sucesso ao servidor em ssh apesar de as incompatibilidades. Isso é um pouco preocupante.

Eu mostrarei exatamente o que está armazenado onde

Cliente: Mac Servidor: Ubuntu (hospedado na AWS)

Arquivos no meu diretório local mac /Users/sm/.ssh

ls -la 
Sanjays-iMac:.ssh sm$ ls -la
total 24
drwx------   5 sm  staff   160 26 Nov 21:29 .
drwxr-xr-x+ 59 sm  staff  1888 26 Nov 21:29 ..
-rw-------   1 sm  staff  1696 26 Nov 20:49 id_rsa
-rw-r--r--@  1 sm  staff   451 26 Nov 20:50 id_rsa.pub
-rw-r--r--   1 sm  staff  1151 26 Nov 21:08 known_hosts

Arquivos no meu servidor Ubuntu:

ubuntu@ip-172-31-30-19:~/.ssh$ ls -la
total 12
drwx------ 2 ubuntu ubuntu 4096 Nov 26 14:37 .
drwxr-xr-x 8 ubuntu ubuntu 4096 Oct 30 18:02 ..
-rw------- 1 ubuntu ubuntu  391 May 25  2018 authorized_keys

Apresentar o diretório de trabalho no Ubuntu:

ubuntu@ip-172-31-30-19:~/.ssh$ pwd
/home/ubuntu/.ssh

Conteúdo do arquivo authorized_keys no servidor:

ubuntu@ip-172-31-30-19:~/.ssh$ cat authorized_keys 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAA....0g1bMv+p11K8MDH sanjaydev

(os conteúdos são cortados por motivos de privacidade)

Da mesma forma, há um arquivo known_hosts no meu servidor local:

Sanjays-iMac:.ssh sm$ cat known_hosts
54.251.104.13 ecdsa-sha2-nistp256 AAAAE2VjZHNhLX..Xsb/RBY=
52.76.85.25 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTI....hAkfLOc5g=
ec2-13-127-241-121.ap-south-1.compute.amazonaws.com,13.127.241.121 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXN....fu5Co4vYB0=
ec2-13-232-81-251.ap-south-1.compute.amazonaws.com,13.232.81.251 ecdsa-sha2-nistp256 AAAAE2VjZHNhL....nhNcRyfu5Co4vYB0=
35.154.168.85 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNo....NcRyfu5Co4vYB0=
13.126.30.42 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTIt....NcRyfu5Co4vYB0=

(os conteúdos são cortados por motivos de privacidade)

Agora, minha pergunta é:

O que deve ser igual a quê?

Eu acho que a chave pública no cliente deve corresponder a uma das entradas dentro do arquivo authorised_keys no servidor e a chave pública do servidor deve corresponder a uma das entres no arquivo known_hosts em o cliente.

Infelizmente, quando eu tento combiná-los manualmente, eles não correspondem totalmente (somente os primeiros caracteres são iguais). É importante notar que a conexão ssh ainda passa sem dar o -i <pemfile> na linha de comando.

    
por user30994 27.11.2018 / 07:51

4 respostas

4

Existem dois tipos de chaves: Servidor ou host , que identificam o servidor para o usuário e as chaves usuário , que permitem fazer login.

A chave de host privada do servidor é armazenada em /etc/ssh/ . A chave pública correspondente é adicionada automaticamente (após um prompt) a known_hosts in ~/.ssh no cliente. O objetivo dessas chaves é detectar um ataque man-in-the-middle (MITM): Se a chave do host muda de repente quando você digita ssh ... como de costume, e você sabe que nada mudou no servidor, você deve ficar desconfiado.

Normalmente, você não precisa se preocupar com as chaves do host, elas são gerenciadas automaticamente.

As teclas do usuário permitem a autenticação sem inserir senhas. As chaves de usuário são gerenciadas no cliente: você criou um par de chaves que consiste em sua chave pública id_rsa.pub e sua chave privada id_rsa . Eles são armazenados no cliente em ~/.ssh . A chave pública não é usada, é apenas armazenada lá para estar disponível quando necessário. Você deve adicionar manualmente a chave pública ao ~/.ssh/authorized_keys para o usuário correspondente no servidor. Uma chave por linha; Se o arquivo authorized_keys estiver vazio, uma cópia (por exemplo, scp e senha) de id_rsa.pub será suficiente.

Então, no seu caso, o

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAA....0g1bMv+p11K8MDH sanjaydev

no arquivo authorized_keys no servidor Ubuntu deve ser igual à sua chave id_rsa.pub no Mac.

Se for igual e você ainda não conseguir fazer login, algo está errado.

    
por 27.11.2018 / 08:29
1

O known_hosts é da chave sshd do servidor - em /etc/ssh/*pub

    
por 27.11.2018 / 08:13
1

Diversão em formato de chave

A partir de seus comentários listados em outras respostas, parece que você pode ter um problema de formato de chave.

É verdade que uma chave criptográfica criada com um programa padronizado é o mesmo matematicamente como uma chave gerada em outro. No entanto, um determinado protocolo criptográfico espera chaves em um determinado formato.

Como converter chaves

  • openssl para chaves ssh

As chaves geradas em openssl e produzidas no formato PEM podem ser convertidas para o formato ssh usando o programa ssh-keygen .

ssh-keygen -i -m pem -f key.pem

  • chaves ssh para PEM

As chaves geradas usando ssh-keygen podem ser convertidas para o formato PEM:

ssh-keygen -e -m pem -f id_rsa.pub

  • PGP para chaves ssh

As chaves PGP geradas no GPG podem ser convertidas para o formato ssh usando a opção --export-ssh-key :

gpg --export-ssh-key <keyid>

Localização das chaves

Conforme listado em outras respostas, o sistema remoto requer a chave pública armazenada no formato ssh no arquivo ~/.ssh/authorized_keys . E o sistema local exige que a chave privada seja:

  • Armazenado como id_rsa em ~/.ssh

ou

  • Fornecido usando a opção ssh -i

ou

  • Adicionado ao agente ssh usando ssh-add

ou

  • Adicionado ao agente ssh usando o arquivo sshcontrol do GPG

Comparando chaves públicas

Para comparar chaves públicas, essas chaves devem estar no mesmo formato. Caso contrário, as chaves não terão a mesma aparência, mesmo que sejam os mesmos objetos matematicamente. Então, desde que você indicou que você gerou sua chave pública ssh usando openssl no formato PEM, a chave pública provavelmente não terá a mesma aparência que a armazenada no arquivo ~/.ssh/authorized_keys do servidor.

As chaves de formato PEM são assim:

-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEAr/CvdghgkYT1Z38d
...
NlBcCYnrjvfFAj5HQydWc9CfP02rdtCIewIDAQAB
-----END RSA PUBLIC KEY-----

As chaves públicas SSH são assim:

ssh-rsa AAAAB3N...voZypjC/Y2UFwJie...t20Ih7

As Chaves Públicas do PGP são assim:

-----BEGIN PGP PUBLIC KEY BLOCK-----

mQENBFN/ZjIBCADad3mv...
...
nE42ZvKt632ZAQ==
=EKbR
-----END PGP PUBLIC KEY BLOCK-----

Portanto, verifique se você está comparando as chaves no mesmo formato.

    
por 28.11.2018 / 05:03
0

O arquivo authorized_keys deve ter uma linha contendo o conteúdo de id_rsa.pub , e o arquivo known_hosts deve ter uma linha contendo a chave do host do servidor. (O servidor geralmente armazena suas chaves de host em um arquivo em /etc/ssh/ .)

Além disso, id_rsa deve corresponder a id_rsa.pub no sentido de que eles precisam ser um par de chaves, mas, a menos que você o manuseie manualmente, é assim que o ssh-keygen sempre os coloca.

    
por 27.11.2018 / 09:09

Tags