2012-12-09 10 views
24

Quando creo un nuovo server Amazon EC2, mi collego ad esso usando come al solito ssh.Verifica dell'impronta digitale SSH per Amazon AWS EC2 server con ECDSA?

vedo il tipico avvertimento:

$ ssh myserver 
The authenticity of host 'ec2-12-34-567-890.compute-1.amazonaws.com (12.34.567.890)'  can't be established. 
ECDSA key fingerprint is 31:66:15:d2:19:41:2b:09:8a:8f:9f:bd:de:c6:ff:07. 
Are you sure you want to continue connecting (yes/no)? 

Come faccio a verificare l'impronta digitale prima di firmare in?

Idealmente una risposta è basata su qualcosa di diverso dal log della console di creazione originale, perché il log può essere svuotato dopo un riavvio del sistema o durante uno script di installazione di sistema di grandi dimensioni che genera molto output o la connessione è un vecchio sistema con chiavi che non erano tracciate al momento della creazione.

+0

Un modo è utilizzare le proprie chiavi con un'impronta digitale nota (vedere: http://serverfault.com/a/581458/86472). Se controlli l'istanza (e pianifichi lo scenario, ad es. Installa l'istanza), ottenere le impronte digitali all'avvio è facile: ciò che vuoi fare è solo a te (es. Pubblica su S3, Route53, Cloudwatch, invia loro un'email , eccetera.). Una delle cose più semplici sarebbe avere un cron job eseguito ogni ora che aggiorna un tag sulla tua istanza (visualizzabile dalla console) – cyberx86

risposta

24

Come @ di joelparkerhenderson risposta copre, è possibile raccogliere ospite impronta digitale della chiave dal registro avvio iniziale del server, quando le chiavi di host sono generate (dallo script cloud-init):

enter image description here

Se non si riesce a raccogliere le chiavi in questo modo, puoi ottenerli collegandoti all'istanza di destinazione da un'altra istanza fidata all'interno della rete privata di Amazon, proteggendoti così dagli attacchi man-in-the-middle.

Quando l'istanza di fiducia (quella si sa impronte digitali per) terminale, è possibile utilizzare i seguenti comandi per raccogliere le impronte digitali (172.33.31.199 è l'IP privato):

$ ssh-keyscan 172.33.31.199 > ec2key 
$ ssh-keygen -l -f ec2key 
2048 02:fc:a5:ff:97:dd:41:63:bb:88:8b:29:4e:75:23:ed 172.33.31.199 (RSA) 
256 ea:bc:4d:5f:ae:00:48:75:45:ba:97:43:fe:e1:a3:e9 172.33.31.199 (ECDSA) 

Se non si dispone di un altro caso, di chi sono le impronte digitali, crea una nuova istanza temporanea, solo allo scopo di raccogliere le chiavi. Prima trova le chiavi per la nuova istanza temporanea, usando il suo registro iniziale iniziale. Connetti all'istanza temporanea dalla rete pubblica. Quindi raccogli le chiavi dell'istanza di destinazione collegandole dall'istanza temporanea, sulla rete Amazon privata. Dopodiché puoi scartare l'istanza temporanea.

Ho preparato Guide for connecting to EC2 instance safely using WinSCP.

+1

Avendo appena usato questa risposta (Grazie!), Il mio primo tentativo (con un'istanza t2) non ha generato nulla con 'ssh-keyscan'. Si scopre che il lancio di t2 in un VPC e ho dovuto usare un'istanza non-t2 per accedere alla rete privata di Amazon. –

13

Ecco due soluzioni che hanno funzionato per me durante la creazione del sistema EC2.

Soluzione 1: utilizzare il cruscotto Amazon EC2

  • Vai https://console.aws.amazon.com
  • Tap collegamento "EC2".
  • Tap "istanze" nella colonna di sinistra
  • Toccare il nome dell'istanza che si desidera
  • Toccare il pulsante di selezione "Azioni" e scegliere "Get System Log" (aka "Uscita Console")
  • Nella console uscita, si dovrebbe vedere le chiavi generate

Soluzione 2: utilizzare la riga di comando AWS EC2

È possibile utilizzare il comando aws o Comando ec2-get-console-output. Entrambi sono disponibili per il download da Amazon.

Per usare l'EC2 file di chiave PEM privata, file PEM del certificato, regione, e l'istanza:

ec2-get-console-output \ 
    --private-key pk-ABCDEF1234567890.pem \ 
    --cert cert-ABCDEF1234567890.pem \ 
    --region us-east-1c \ 
    i-e706689a 

L'output mostra lo ssh ospitare le impronte digitali fondamentali in questo modo:

ec2: -----BEGIN SSH HOST KEY FINGERPRINTS----- 
ec2: 1024 e0:79:1e:ba:2e:3c:71:87:2c:f5:62:2b:0d:1b:6d:7b [email protected] (DSA) 
ec2: 256 31:66:15:d2:19:41:2b:09:8a:8f:9f:bd:de:c6:ff:07 [email protected] (ECDSA) 
ec2: 2048 ce:ec:3b:d3:34:3f:f3:45:76:81:9e:76:7a:d9:f5:e8 [email protected] (RSA) 
ec2: -----END SSH HOST KEY FINGERPRINTS----- 

Il aws strumento funziona allo stesso modo.

Nota: queste soluzioni funzionano solo durante la creazione o quando è possibile ottenere i registri della console. Per una soluzione più ampia che funzioni in qualsiasi momento, vedere la risposta di Martin.

+1

Ma questo funziona solo per la prima esecuzione dell'istanza, quando il log include la generazione delle chiavi. Quando si riavvia l'istanza, non è più possibile trovare le impronte digitali lì. Ogni altro modo? –

+1

@ Martin Un buon punto! Idealmente Amazon può aggiungere le impronte digitali come una colonna sul cruscotto EC2. Aggiungerò un premio a questa domanda per incoraggiare le persone ad aiutare. – joelparkerhenderson

+1

Grazie, questo è stato di grande aiuto. AWS è il mio primo set di env mai, quindi essere in grado di ottenere le chiavi tramite il cruscotto e2c è stato molto meno confuso. – ouonomos