instância do Amazon EC2 SSH RSA Fingerprint

5

Sempre que levanto uma VM no EC2 e você a vê pela primeira vez, sempre recebo esta mensagem:

The authenticity of host 'ec2-xxxxxx.compute-1.amazonaws.com (n.n.n.n)' can't be established.
RSA key fingerprint is xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx.

E como todo mundo, eu apenas digo sim

Are you sure you want to continue connecting (yes/no)? yes

Eu entendo o que é uma impressão digital, porque é boa e tudo mais. O que eu estou querendo saber é, anos atrás, já que era uma máquina física que eu estava configurando ... eu poderia verificar na máquina física e validar sim, esta é a impressão digital.

Existe alguma maneira no console do EC2 para verificar de forma independente "sim, esta é a impressão digital"? Se sim, como você acha isso?

    
por slf 11.03.2014 / 19:58

2 respostas

7

Você pode verificar a impressão digital usando o console da AWS para instâncias com o cloud-init.

O seguinte está em uma instância executando o Amazon Linux.

Existe um script init.d chamado cloud-init:

cloud-init is the distribution-agnostic package that handles early initialization of a cloud instance.

Some of the things it configures are:

  • setting a default locale
  • setting hostname
  • generate ssh private keys
  • adding ssh keys to user's .ssh/authorized_keys so they can log in
  • setting up ephemeral mount points
  • preparing package repositories and performs a variety of at-boot customization actions based on user-data

Depois de iniciar uma instância, você pode visualizar a saída do log do sistema por meio do console da AWS sem usar o SSH. (O que evita o seu catch-22 - você pode ver a impressão digital antes de acessar a instância).

Você pode fazer isso por

  1. acessando a página Console de gerenciamento do EC2 ,

  2. clique no link "Instâncias" na barra lateral,

  3. selecionando a instância na qual você deseja fazer login e

  4. navegando para Ações > Configurações da instância > Obtenha o log do sistema.

Sevocêpercorreressasaída,veráalgocomooseguinte:

Runningcloud-init...cloud-init:sshGeneratingpublic/privatersakeypair.Youridentificationhasbeensavedin/etc/ssh/ssh_host_rsa_key.Yourpublickeyhasbeensavedin/etc/ssh/ssh_host_rsa_key.pub.Thekeyfingerprintis:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:[email protected]'srandomartimageis:+--[RSA2048]----+|aa||aa||aaaa||aaaa||aaaaaa||aaaa||aaaaaaa||aaaaaaa||aaa|+-----------------+Generatingpublic/privatedsakeypair.Youridentificationhasbeensavedin/etc/ssh/ssh_host_dsa_key.Yourpublickeyhasbeensavedin/etc/ssh/ssh_host_dsa_key.pub.Thekeyfingerprintis:bb:bb:bb:bb:bb:bb:bb:bb:bb:bb:bb:bb:bb:bb:bb:[email protected]'srandomartimageis:+--[DSA1024]----+|||||||bb||bb||bbb||bbbbb||bbbbbbb||bbbbbbb|+-----------------+ec2:ec2:#############################################################ec2:-----BEGINSSHHOSTKEYFINGERPRINTS-----ec2:2048aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:[email protected](RSA)ec2:1024bb:bb:bb:bb:bb:bb:bb:bb:bb:bb:bb:bb:bb:bb:bb:[email protected](DSA)ec2:-----ENDSSHHOSTKEYFINGERPRINTS-----ec2:#############################################################[OK]

Acima de cada imagem "randomart" está o tipo de assinatura, como RSA ou DSA. Encontre o tipo que você recebeu (RSA no seu caso) e verifique a impressão digital acima dele.

Se você deseja verificar se a mesma chave é a da instância (como prova de conceito, depois de ter SSH), você pode executar:

ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub
2048 aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa  [email protected] (RSA)

Abordagem alternativa:

Para evitar o problema, você pode usar suas próprias chaves - desde que você gerou a chave, você conhece a impressão digital. O problema, então, é tornar a sua nova chave na instância sem usar o SSH.

A maioria das instâncias usa o cloud-init e suporta dados do usuário. Isso se aplica a qualquer instância desse tipo. Como você precisa interromper uma instância para modificar os dados do usuário, essa abordagem exige que você: a inicie uma instância pela primeira vez (e esteja configurando-se para usar chaves conhecidas) ou b: possa parar a instância, modifique os dados do usuário e reinicie a instância.

  1. Gerar uma chave  Por exemplo, usando o PuttyGen no Windows:  

  2. Crieumscriptdedadosdousuário:

    Sevocêestiveriniciandoumanovainstância,bastaespecificaraschavesquedesejausar,seestiverreiniciandoumainstânciaquejáestáemexecução,énecessárioqueocloud-initreconfigureoSSHparainserirasnovaschaves.Porpadrão,omódulodeconfiguraçãoSSHdocloud-initéexecutadoumavezporinstância,entãovocêprecisaconfigurá-loparaserexecutadosempre(cadainicialização)(Issopodenãoseridealemalgumascircunstâncias,maspodesermodificadodepoisquevocêsouberachave,senecessário)

    Osdadosdousuárioteriamoseguinteformato:

    #cloud-configcloud_config_modules:#onlyneededifrestartinganinstance,omitiflaunchinganewinstance...listallexistingmodules-[ssh,always]#thisischangedtoalways(defaultisonceperinstance)ssh_keys:rsa_private:|-----BEGINRSAPRIVATEKEY----------ENDRSAPRIVATEKEY-----ssh-rsa#public_key
      Porexemplo:
    #cloud-configcloud_config_modules:-locale-[ssh,always]-set-passwords-mounts-yum-configure-yum-add-repo-package-update-upgrade-install-timezone-puppet-disable-ec2-metadata-runcmdssh_keys:#youcanspecifyrsa,dsa,andecdsakeysrsa_private:|-----BEGINRSAPRIVATEKEY-----MIIEoQIBAAKCAQEAopbE8beKaKajF/SFOtntO9xt5XVZW5rlQCW6PVY1jXCq5dbjnEQoBGBIp6jsqLcnwYQW/tU4zXi7T0kX6NlVywiMOtjnyoOkLCX2R5OjMap3hlyjAO/PCKW7pE4vAHd7HyYvGW/gPezGW0WeFshp7J7dTXZdSmDquZI15rEsz07QsKWy/SH/rjYVObAQJN78CuU7C41LRshEeTSBM0jBSnp3jL1Ocw66qe4sV6jbcQN6QzK377e+KzpUDmcxaB7plTWDSpjxVFWbY6PQcsz5d/h60wSKu90Ia9fNMHWs7cbyELhKVPBRs4JtWKndjtISCd5T34UnKmtTpq6g/ocrrwIBJQKCAQB7Ck/Zg/oKAZAtzcybPSI7I1oVbY+68cI+Yb1e2XSiYxmLVoK7cdkYEYMXGA0KDhA/auD4MqeGvDq4ildIbR5UdSvZgYzQmvjHdqyJMXSUSaaPMVjCcEmlrdobeW+tU3/Ei5lDrpvb1caKQoV5Bl3/LB0YBovJlXNb//FwTrogVhYFexcda+DxN5a2oNSCwMosdgCP4gz+hX9zTAl9k/VOkLaj2h7URfsuAmwwZ+m24Bpz1r7vEtec0PraoKkBpVxBeNDPwMdosTrpGS49V+YRRiM8yShuRPF9mAwo62kcD7K5bToppyb6CLdCi06CTcAmQ5Sb+UwHqC/rdZI0wmnNAoGBAPxj6ecjM0AwrPf2TPJOtdEUHvFnc6bB23C32Yr7IWjNhij0BGG/D8CvsmCXDwYDH7Ss4CN/mMzG43QhfyyAz0T0BjpFmZEYqYOJAB7cwpdx4zjHzoc7WKiIvXPml2hdd37iVRNq6raUgDLpKfVkpY8FKcJjzFuiCXDOU1+mNxPbAoGBAKTqD/+XoDGsf6hkV7vgPLIXc3/BZco0l9kNkemto9RVIsr3D40bfe4PuJg3fjwFYDTq9s79WFR5sG/eSpNJtSGTz6LN5TQoL5xLMCIysajc+JN64w4TYCDGSEk4Xgv0X0cCgJfFRCedv9qObGT9/KCI/9Y/5jlZsVphNsAk4Xm9AoGBAKO2bjUP6eRymbWY1/ceTGvxYC3iPS3lh2u1hjCi5T0PsPf4OjGQsEWiZd3JxI5HNykWMIW6jKCBAj19guxvOlY9a9LFXLEkwPtfyLoSp7wuMoWyCWx5hZ3AeuNlI/CrVG36mAyYYOUiDfeCfBTLqajgwSQlDu9UWSaTq7OqFeNdAoGAFkkkway0yHFBrvjNle3esEhbt1F8dUVgoMp7gHFpKogLnuMdxvXglcrF6w5rATEorTSCN6Wx/ZPnaRAzl1z8zS+mb/JPZ+nBPqJgc1L1adir+EEJ7SU2gPgzSCo2OPeCfzewgzZVUXYurtT55CJSkjwG5Znurc3ZskR9BTVqk+kCgYARZXWS0Wyy5piq7WX7w2Hc6bVEPMCU+yJcbJ8E+F8meoQ1kXIRqIB+cAsq/3z3JmU19yOGms557POXgEFseMMFai3i2wTQ4mGPOM3a7yEeeKl1Zg5eHVUdVd+nPDzs9D+9umc6mXrRiRwJPQWo8pIKXb7SqjIA73M7H+98CBtb5w==-----ENDRSAPRIVATEKEY-----ssh-rsaAAAAB3NzaC1yc2EAAAABJQAAAQEAopbE8beKaKajF/SFOtntO9xt5XVZW5rlQCW6PVY1jXCq5dbjnEQoBGBIp6jsqLcnwYQW/tU4zXi7T0kX6NlVywiMOtjnyoOkLCX2R5OjMap3hlyjAO/PCKW7pE4vAHd7HyYvGW/gPezGW0WeFshp7J7dTXZdSmDquZI15rEsz07QsKWy/SH/rjYVObAQJN78CuU7C41LRshEeTSBM0jBSnp3jL1Ocw66qe4sV6jbcQN6QzK377e+KzpUDmcxaB7plTWDSpjxVFWbY6PQcsz5d/h60wSKu90Ia9fNMHWs7cbyELhKVPBRs4JtWKndjtISCd5T34UnKmtTpq6g/ocrrw==rsa-key-20140716

  3. Paresuainstânciaemodifiqueosdadosdousuário:  

  4. Inicie a instância e conecte-se a ela:  

    Observe que a impressão digital mostrada aqui corresponde àquela exibida quando a chave foi gerada.

Se você estiver parando a instância e tiver acesso a outra instância, também poderá montar o volume raiz e modificar as chaves diretamente, sem usar os dados do usuário (as chaves não serão sobrescritas, pois o cloud-init só executa a configuração SSH uma vez por instância por padrão). Uma abordagem alternativa, se você estiver planejando antecipadamente, é configurar o cloud-init (ou um script de inicialização) para registrar as chaves SSH em cada inicialização, o que aumenta a probabilidade de encontrá-las no log do console após uma reinicialização.

    
por 12.03.2014 / 03:44
-1

I could check on the physical machine and validate yes, this is the fingerprint.

Sim. No servidor cat /etc/ssh/ssh_host_rsa_key.pub . Você pode até copiar isso em seu arquivo ~/.ssh/known_hosts em seu cliente para evitar ver a mensagem "erro".

Is there some way in the EC2 console to independently verify "yes, this is the fingerprint"?

Sim, manualmente como acima, ou você pode publicar a chave para o DNS e fazer com que o cliente ssh a verifique dessa maneira (note: você só quer confiar no DNS se tiver o DNSSEC configurado adequadamente para o seu domínio).

Você pode configurar o cliente para fazer a pesquisa de DNS automaticamente através da opção de arquivo de configuração VerifyHostKeyDNS ou na linha de comando com algo como ssh -o "VerifyHostKeyDNS Yes" [email protected] . Veja man ssh_config para mais informações.

Como observação, você pode configurar chaves públicas no DNS para uma variedade desses serviços - o HTTPS e o GPG vêm à mente, embora o grampeamento de certificados HTTPS não esteja habilitado por padrão em nenhum navegador da Web importante.

    
por 11.03.2014 / 20:05