Come scaricare la chiave pubblica da Amazon AWS?


25

Ho un'istanza linux di Amazon ec2 in esecuzione associata a una coppia di chiavi (p1) e ho scaricato la chiave privata sul desktop di casa. Ora al lavoro, ho creato una coppia di chiavi (p2) sul desktop di lavoro e ho importato la chiave pubblica su Amazon tramite la console AWS.

A casa, voglio aggiungere la chiave pubblica di keypair p2 da aggiungere alla authorized_keysmia istanza AMI (a cui attualmente posso accedere solo da casa). Tuttavia, ho dimenticato di portare con me la chiave pubblica di p2, quindi è possibile in qualche modo esportare questa chiave pubblica da Amazon.

Risposte:


6

Bel puzzle, grazie! Ecco una risposta:

  1. Avviare un nuovo avvio temporaneo EBS t1.micro istanza A, specificando la coppia di chiavi p2. Specificare una zona di disponibilità in cui è già in esecuzione un'altra istanza B e alla quale si ha accesso. (Avvia uno temporaneo se necessario).

  2. Arresta (non termina) l'istanza A dopo che è stata in esecuzione per alcuni minuti, quindi ha la possibilità di salvare la chiave pubblica nel suo file authorized_keys.

  3. Scollegare il volume EBS di root dall'istanza arrestata A. Collegare e montarlo sull'istanza in esecuzione B.

  4. Copia la chiave pubblica dal file system montato.

  5. Staccare ed eliminare il volume EBS. Terminare l'istanza temporanea A.


1
Non sono sicuro di come questo risolva effettivamente la domanda originale ... è sicuramente un modo per gestire le istanze di AWS EC2 se e solo se stai usando istanze supportate da EBS.
Jeremy Bouse,

Non è necessario utilizzare le istanze di avvio EBS, tranne per la volta in cui si esegue l'istanza temporanea per estrarne la chiave pubblica. Tutto quello che vuoi fare è ottenere la chiave pubblica utilizzata da questo approccio.
Eric Hammond,

1
Se si dispone della chiave privata, è possibile rigenerare la chiave pubblica senza passare attraverso tali misure.
Jeremy Bouse,

2
Jeremy: in base alla domanda originale, la chiave privata è tornata nel suo ufficio dove non può ottenerla. E una volta tornato in ufficio, non può accedere all'istanza EC2 perché non ha la chiave pubblica per quella chiave privata dell'ufficio. Ecco perché vuole ottenere la chiave pubblica da Amazon e l'unico modo per farlo è avviare un'istanza con quella chiave pubblica. Quindi devi togliere la chiave pubblica da quell'istanza che è la parte difficile.
Eric Hammond,

1
Wow! molto lavoro per ottenere la chiave pubblica. Sarebbe stato più facile per Amazon mettere un'opzione "Esporta chiave pubblica".
Jus12,

37

Il comando ssh-keygen corretto è tuttavia:

ssh-keygen -y -f /path/to/privatekey > /path/to/publickey

Questo dovrebbe essere un commento o una modifica proposta sulla risposta precedente. Hai ragione però.
JCotton,

Hai ragione, questo avrebbe dovuto essere un commento. Sfortunatamente, non ho ancora ottenuto i privilegi per commentare :-(
rsmoorthy

ahah, beh, eccoti. Grazie per aver risposto con la correzione.
JCotton,

Questa risposta funzionerebbe se avesse accesso alla chiave privata, ma nella domanda originale, quella chiave si trova in una posizione diversa e non accessibile.
Eric Hammond,

1
esegui chmod 400 your_private_key.pemse ricevi "Errore autorizzazioni troppo aperte"
crizCraig

7

Ho già fornito una risposta che utilizza i volumi EBS per ottenere la chiave pubblica ssh, ma ecco un altro modo per accedervi avviando un'istanza temporanea EC2 con uno script di dati utente che invia la chiave pubblica all'output della console. Ecco i passaggi:

Salvare il codice seguente in un file denominato output-ssh-key.userdatasul computer locale. NON ESEGUIRE LOCALMENTE QUESTI COMANDI!

#!/bin/bash -ex
exec> >(tee /var/log/user-data.log|logger -t user -s 2>/dev/console) 2>&1
adminkey=$(GET instance-data/latest/meta-data/public-keys/ | 
  perl -ne 'print $1 if /^0=[^a-z0-9]*([-.@\w]*)/i')
cat <<EOF
SSHKEY:========================================================================
SSHKEY:HERE IS YOUR PUBLIC SSH KEY FOR KEYPAIR "$adminkey":
SSHKEY:$(cat /home/ubuntu/.ssh/authorized_keys)
SSHKEY:========================================================================
SSHKEY:Halting in 50min ($(date --date='+50 minutes' +"%Y-%m-%d %H:%M UTC"))
EOF
sleep 3000
halt

Esegui un'istanza di Ubuntu 10.04 LTS standard con il file sopra come script di dati utente. Specificare la coppia di chiavi per cui si desidera recuperare la chiave ssh pubblica:

ec2-run-instances \
  --key YOURKEYPAIRHERE \
  --instance-type t1.micro \
  --instance-initiated-shutdown-behavior terminate \
  --user-data-file output-ssh-key.userdata \
  ami-ab36fbc2

Continua a richiedere l'output della console dall'istanza fino a quando non mostra la tua chiave ssh pubblica. Specificare l'id dell'istanza restituito dal comando run-instance:

ec2-get-console-output YOURINSTANCEID | grep SSHKEY: | cut -f3- -d:

Entro 2-10 minuti otterrai un output in questo modo:

========================================================================
HERE IS YOUR PUBLIC SSH KEY FOR KEYPAIR "erich":
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6rn8cl41CkzaH4ZBhczOJZaR4xBBDI1Kelc2ivzVvCB
THcdJRWpDd5I5hY5W9qke9Tm4fH3KaUVndlcP0ORGvS3PAL4lTpkS4D4goMEFrwMO8BG0NoE8sf2U/7g
aUkdcrDC7jzKYdwleRCI3uibNXiSdeG6RotClAAp7pMflDVp5WjjECDZ+8Jzs2wasdTwQYPhiWSiNcfb
fS97QdtROf0AcoPWElZAgmabaDFBlvvzcqxQRjNp/zbpkFHZBSKp+Sm4+WsRuLu6TDe9lb2Ps0xvBp1F
THlJRUVKP2yeZbVioKnOsXcjLfoJ9TEL7EMnPYinBMIE3kAYw3FzZZFeX3Q== erich
========================================================================
Halting in 50min (2011-12-20 05:58 UTC)

L'istanza temporanea si interromperà automaticamente tra meno di un'ora, ma puoi terminarla tu stesso se desideri assicurarti di non essere addebitato più dei due centesimi che costerà correre.


Ho provato questo con una moderna installazione di awscli e ha funzionato con il tuo script dati utente. Tuttavia, ho dovuto adattare leggermente i comandi. Questo ha funzionato per la regione eu-west-1: aws ec2 run-instance --key-name mykey --instance-type t1.micro --instance-initiated-shutdown-behavior terminate --user-data file: // output- ssh-key.userdata --image-id ami-c1167eb8; aws ec2 get-console-output --instance-id i-0ce56c0e02086160d; aws ec2 terminate -stances --instance-id i-0ce56c0e02086160d
holmb

(Modificato) Ok la formattazione è orribile qui, posterò come risposta diversa.
Bernhard,

5

Se si dispone della chiave SSH privata, è possibile rigenerare il componente della chiave pubblica semplicemente eseguendo il comando ssh-keygen seguente :

 ssh-keygen -i -f /path/to/private-key > /path/to/public-key

Questa è la parte semplice ... La console e l'API AWS non supportano il push di 2 coppie di chiavi all'avvio di un'istanza EC2. Questo è un esercizio lasciato all'amministratore di sistema con altri mezzi.

Se hai accesso alla chiave di identità già autorizzata, puoi semplicemente eseguire il seguente comando ssh-copy-id :

 ssh-copy-id -i /path/to/public-key user@EC2-instance

Ciò copierà automaticamente la chiave pubblica fornita sul server e nel ~user/.ssh/authorized_keysfile e garantirà le autorizzazioni appropriate per il file.

Il modo più elegante sarebbe quello di includere le chiavi di identità aggiuntive nei processi di gestione della configurazione. Nel mio caso ciò comporta l'aggiunta di ulteriori chiavi alla configurazione Puppet per il nodo.

Come nota a margine, preferenza personale ma utilizzerebbe un metodo di gestione delle chiavi SSH migliore rispetto al semplice dover includere chiavi separate per il lavoro e la posizione di casa. Come ho già detto in una domanda precedente, conservo le mie chiavi su un'unità USB che conservo con me piuttosto che su qualsiasi computer che utilizzo.


0

Un'altra opzione sarebbe quella di aggiungere un breve script in user_data che aggiunge semplicemente un'altra chiave ssh a root:

#!/bin/bash

touch ~/.ssh/authorized_keys
chmod 400 ~/.ssh/authorized_keys

echo "<KEY>" >> ~/.ssh/authorized_keys

Quindi è possibile accedere alla macchina come root con ssh -l root -i <KEYFILE> URLe leggere semplicemente la chiave da Tasti_utente autorizzati ec2_utente, Ubuntu o come viene chiamato.

L'unica cosa: è necessario rendere la macchina raggiungibile pubblicamente e assicurarsi che l'accesso alla porta 22 sia possibile dall'esterno.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.