Aggiungi Keypair all'istanza EC2 esistente


240

Mi è stato concesso l'accesso alla Console AWS a un account con 2 istanze in esecuzione che non riesco a chiudere (in produzione). Vorrei comunque ottenere l'accesso SSH a queste istanze, è possibile creare un nuovo Keypair e applicarlo alle istanze in modo da poter inserire SSH? Ottenere il file pem esistente per la coppia di chiavi in ​​cui sono state create le istanze non è attualmente un'opzione.

Se questo non è possibile, c'è qualche altro modo in cui posso entrare nelle istanze?


Hai provato la soluzione qui: stackoverflow.com/questions/1454629/… ? ssh-adddovrebbe fare quello che ti serve.
Marc Bollinger,

Bello apprendere la funzione ssh-add ma questo non aiuta perché l'utente ha effettivamente creato l'istanza usando la coppia di chiavi che ha creato. Le istanze a cui mi riferisco sono state create con un'altra coppia di chiavi a cui non ho accesso.
Chris Wagner,

1
Forse

4
Non è possibile applicare una coppia di chiavi a un'istanza in esecuzione.
Rodney Quillo,

Risposte:


172

Non è possibile applicare una coppia di chiavi a un'istanza in esecuzione. È possibile utilizzare la nuova coppia di chiavi solo per avviare una nuova istanza.

Per il ripristino, se si tratta di un AMI di avvio EBS, è possibile interromperlo, creare un'istantanea del volume. Crea un nuovo volume basato su di esso. Ed essere in grado di riutilizzarlo per avviare la vecchia istanza, creare una nuova immagine o recuperare i dati.

Anche se i dati nella memoria temporanea andranno persi.


A causa della popolarità di questa domanda e risposta, volevo catturare le informazioni nel link che Rodney ha pubblicato sul suo commento.

Il merito va a Eric Hammond per queste informazioni .

Correzione di file sul volume EBS radice di un'istanza EC2

È possibile esaminare e modificare i file sul volume EBS di root in un'istanza EC2 anche se ci si trova in una situazione considerata disastrosa come:

  • Hai perso la chiave ssh o hai dimenticato la password
  • Hai fatto un errore durante la modifica del file / etc / sudoers e non puoi più accedere alla radice con sudo per risolverlo
  • L'istanza di lunga durata viene bloccata per qualche motivo, non può essere contattata e non si avvia correttamente
  • È necessario ripristinare i file dall'istanza ma non è possibile accedervi

Su un computer fisico seduto alla scrivania, è possibile semplicemente avviare il sistema con un CD o una chiavetta USB, montare il disco rigido, estrarre e riparare i file, quindi riavviare il computer per tornare al lavoro.

Un'istanza EC2 remota, tuttavia, sembra distante e inaccessibile quando ci si trova in una di queste situazioni. Fortunatamente, AWS ci offre la potenza e la flessibilità per poter ripristinare un sistema come questo, a condizione che stiamo eseguendo istanze di avvio EBS e non un archivio di istanze.

L'approccio su EC2 è in qualche modo simile alla soluzione fisica, ma stiamo andando a spostare e montare il "disco rigido" difettoso (volume di root EBS) su un'istanza diversa, ripararlo, quindi spostarlo indietro.

In alcune situazioni, potrebbe essere semplicemente più semplice avviare una nuova istanza EC2 e eliminare quella cattiva, ma se vuoi davvero riparare i tuoi file, ecco l'approccio che ha funzionato per molti:

Impostare

Identificare l'istanza originale (A) e il volume che contiene il volume EBS radice rotto con i file che si desidera visualizzare e modificare.

instance_a=i-XXXXXXXX

volume=$(ec2-describe-instances $instance_a |
  egrep '^BLOCKDEVICE./dev/sda1' | cut -f3)

Identificare la seconda istanza EC2 (B) che verrà utilizzata per correggere i file sul volume EBS originale. Questa istanza deve essere in esecuzione nella stessa zona di disponibilità dell'istanza A in modo che possa essere collegato al volume EBS. Se non hai già un'istanza in esecuzione, avviane una temporanea.

instance_b=i-YYYYYYYY

Arrestare l'istanza interrotta A (in attesa che si arresti completamente), scollegare il volume EBS radice dall'istanza (in attesa che venga staccato), quindi collegare il volume all'istanza B su un dispositivo non utilizzato.

ec2-stop-instances $instance_a
ec2-detach-volume $volume
ec2-attach-volume --instance $instance_b --device /dev/sdj $volume

ssh all'istanza B e montare il volume in modo da poter accedere al suo file system.

ssh ...instance b...

sudo mkdir -p 000 /vol-a
sudo mount /dev/sdj /vol-a

Aggiustalo

A questo punto l'intero file system radice dall'istanza A è disponibile per la visualizzazione e la modifica in / vol-a sull'istanza B. Ad esempio, potresti voler:

  • Inserisci le chiavi ssh corrette in /vol-a/home/ubuntu/.ssh/authorized_keys
  • Modifica e correggi / vol-a / etc / sudoers
  • Cerca i messaggi di errore in / vol-a / var / log / syslog
  • Copia file importanti da / vol-a / ...

Nota: gli uid sulle due istanze potrebbero non essere identici, quindi fai attenzione se stai creando, modificando o copiando file che appartengono a utenti non root. Ad esempio, l'utente mysql sull'istanza A potrebbe avere lo stesso UID dell'utente postfix sull'istanza B, il che potrebbe causare problemi se si copiano i file con un nome e si sposta il volume su A.

Incartare

Dopo aver finito e sei soddisfatto dei file in / vol-a, smonta il file system (sempre sull'istanza-B):

sudo umount /vol-a
sudo rmdir /vol-a

Ora, di nuovo sul tuo sistema con ec2-api-tools, continua a spostare il volume EBS nella sua home sull'istanza originale A e riavvia l'istanza:

ec2-detach-volume $volume
ec2-attach-volume --instance $instance_a --device /dev/sda1 $volume
ec2-start-instances $instance_a

Si spera che tu abbia risolto il problema, l'istanza A si presenta bene e puoi realizzare ciò che inizialmente avevi deciso di fare. In caso contrario, potrebbe essere necessario continuare a ripetere questi passaggi fino a quando non funziona.

Nota: se un indirizzo IP elastico è stato assegnato all'istanza A quando è stato arrestato, è necessario riassociarlo dopo averlo riavviato.

Ricorda! Se la tua istanza B è stata temporaneamente avviata solo per questo processo, non dimenticare di terminarla ora.


puoi dirci una guida passo-passo per questo (o indicarlo). Nel mio caso, ho un'istanza in esecuzione esistente e devo accedere ad essa da una posizione remota, dove non ho la chiave privata.
Jus

87

Sebbene non sia possibile aggiungere direttamente una coppia di chiavi a un'istanza EC2 in esecuzione, è possibile creare un utente Linux e creare una nuova coppia di chiavi per lui, quindi utilizzarla come si farebbe con la coppia di chiavi dell'utente originale.

Nel tuo caso, puoi chiedere al proprietario dell'istanza (chi l'ha creato) di fare quanto segue. Pertanto, il proprietario dell'istanza non deve condividere le proprie chiavi con te, ma sarai comunque in grado di accedere a queste istanze. Questi passaggi sono stati originariamente pubblicati da Utkarsh Sengar (aka. @Zengr ) su http://utkarshsengar.com/2011/01/manage-multiple-accounts-on-1-amazon-ec2-instance/ . Ho apportato solo alcune piccole modifiche.

  1. Passaggio 1: accedi per impostazione predefinita all'utente "ubuntu" :

    $ ssh -i my_orig_key.pem ubuntu@111.111.11.111
    
  2. Passaggio 2: crea un nuovo utente, chiameremo il nostro nuovo utente "john" :

    [ubuntu@ip-11-111-111-111 ~]$ sudo adduser john
    

    Imposta la password per "john" da:

    [ubuntu@ip-11-111-111-111 ~]$ sudo su -
    [root@ip-11-111-111-111 ubuntu]# passwd john
    

    Aggiungi "john" all'elenco dei sudoer per:

    [root@ip-11-111-111-111 ubuntu]# visudo
    

    .. e aggiungi quanto segue alla fine del file:

    john   ALL = (ALL)    ALL
    

    Tutto a posto! Abbiamo creato il nostro nuovo utente, ora devi generare il file chiave che sarà necessario per accedere, come abbiamo my_orin_key.pem nel passaggio 1.

    Ora, esci e torna a Ubuntu, fuori dalla radice.

    [root@ip-11-111-111-111 ubuntu]# exit
    [ubuntu@ip-11-111-111-111 ~]$
    
  3. Passaggio 3: creazione delle chiavi pubbliche e private :

    [ubuntu@ip-11-111-111-111 ~]$ su john
    

    Immettere la password creata per "john" al passaggio 2. Quindi creare una coppia di chiavi. Ricorda che la passphrase per la coppia di chiavi deve contenere almeno 4 caratteri.

    [john@ip-11-111-111-111 ubuntu]$ cd /home/john/
    [john@ip-11-111-111-111 ~]$ ssh-keygen -b 1024 -f john -t dsa
    [john@ip-11-111-111-111 ~]$ mkdir .ssh
    [john@ip-11-111-111-111 ~]$ chmod 700 .ssh
    [john@ip-11-111-111-111 ~]$ cat john.pub > .ssh/authorized_keys
    [john@ip-11-111-111-111 ~]$ chmod 600 .ssh/authorized_keys
    [john@ip-11-111-111-111 ~]$ sudo chown john:ubuntu .ssh
    

    Nel passaggio precedente, john è l'utente che abbiamo creato e ubuntu è il gruppo utenti predefinito.

    [john@ip-11-111-111-111 ~]$ sudo chown john:ubuntu .ssh/authorized_keys
    
  4. Step 4: ora devi solo scaricare la chiave chiamata "john" . Uso scp per scaricare / caricare file da EC2, ecco come puoi farlo.

    Dovrai comunque copiare il file usando l' utente ubuntu , dato che hai solo la chiave per quel nome utente. Quindi, dovrai spostare la chiave nella cartella ubuntu e cambiarla in 777.

    [john@ip-11-111-111-111 ~]$ sudo cp john /home/ubuntu/
    [john@ip-11-111-111-111 ~]$ sudo chmod 777 /home/ubuntu/john
    

    Ora vieni al terminale della macchina locale, dove hai il file my_orig_key.pem e fai questo:

    $ cd ~/.ssh
    $ scp -i my_orig_key.pem ubuntu@111.111.11.111:/home/ubuntu/john john
    

    Il comando sopra copierà la chiave "john" nella directory di lavoro presente sul tuo computer locale. Dopo aver copiato la chiave sul computer locale, è necessario eliminare "/ home / ubuntu / john", poiché è una chiave privata.

    Ora, uno della tua macchina locale chmod john a 600.

    $ chmod 600 john
    
  5. Passaggio 5: tempo di testare la chiave :

    $ ssh -i john john@111.111.11.111
    

Quindi, in questo modo, puoi configurare più utenti per usare un'istanza EC2 !!


4
Questo è utile, ma come passaggio finale non dovresti anche eliminare la chiave privata dal computer remoto? In questo modo anche altre persone che hanno accesso all'istanza non possono copiarla e utilizzare la chiave per accedere.
Culix

Questo funziona per me. Ma come posso accedere all'utente di Ubuntu da qui poiché i file su cui lavorerò sono nella directory degli utenti di Ubuntu. Questo mi porterà a john user group. Ubuntu 14.04.4 LTS
olyjosh

Questo non ha funzionato per me. Dava autorizzazioni non valide. Ho dovuto creare una coppia di chiavi dalla console ec2, quindi ha iniziato a funzionare
il cavaliere oscuro il

11

Sul tuo computer locale, esegui il comando:

ssh-keygen -t rsa -C "SomeAlias"

Dopo l'esecuzione di questo comando, verrà generato un file che termina in * .pub. Copia il contenuto di quel file.

Sulla macchina Amazon, modifica ~ / .ssh / authorized_keys e incolla il contenuto del file * .pub (e rimuovi prima qualsiasi contenuto esistente).

È quindi possibile SSH utilizzando l'altro file generato dal comando ssh-keygen (la chiave privata).


Quindi, come accennato da @ Dan, è possibile modificare l'accesso alla propria istanza modificando questo file, ma non sarà mai possibile modificare la coppia di chiavi associata all'istanza a livello di metadati. Non dimenticare di aggiungere il nome del file .pem alla fine del tuo publicKey, ad esempio:ssh-rsa AAAAB3NzaC1yc2EA...DsGt66 my-key-pair
Ricardo Mutti,

7

Questo mi è successo in precedenza (non avevo accesso a un'istanza EC2 creata da qualcun altro ma aveva accesso alla console Web AWS) e ho scritto sul blog la risposta: http://readystate4.com/2013/04/09/aws-gaining- ssh-Access-to-an-EC2-esempio-si-perso-Access-to /

Fondamentalmente, è possibile scollegare l'unità EBS, collegarla a un EC2 a cui si ha accesso. Aggiungi la tua chiave pub SSH a ~ec2-user/.ssh/authorized_keyssu questa unità collegata. Quindi rimetterlo nella vecchia istanza EC2. passo-passo nel collegamento usando Amazon AMI.

Non è necessario creare istantanee o creare una nuova istanza clonata.


6

Nel mio caso ho usato questa documentazione per associare una coppia di chiavi alla mia istanza di Elastic Beanstalk

Importante

È necessario creare una coppia di chiavi Amazon EC2 e configurare le istanze Amazon EC2 fornite da Elastic Beanstalk per utilizzare la coppia di chiavi Amazon EC2 prima di poter accedere alle istanze Amazon EC2 fornite da Elastic Beanstalk. Puoi configurare le tue coppie di chiavi Amazon EC2 utilizzando la Console di gestione AWS. Per istruzioni sulla creazione di una coppia di chiavi per Amazon EC2, consulta la Guida introduttiva di Amazon Elastic Compute Cloud.

Configurazione delle istanze del server Amazon EC2 con Elastic Beanstalk


1
Grazie, @ Kamal-Essajidi! Per altri che usano EB: una volta che hai una coppia di chiavi, puoi aggiungerla al tuo Elean Beanstalk in Configurazione> Istanze> Coppia di chiavi EC2.
Scott,

4

Puoi semplicemente aggiungere una nuova chiave all'istanza con il seguente comando:

ssh-copy-id -i ~/.ssh/id_rsa.pub domain_alias

È possibile configurare domain_alias in ~ / .ssh config

host domain_alias
  User ubuntu
  Hostname domain.com
  IdentityFile ~/.ssh/ec2.pem

4

Non ho trovato un modo semplice per aggiungere una nuova coppia di chiavi tramite la console, ma puoi farlo manualmente.

Basta inserire ssh nella casella EC2 con la coppia di chiavi esistente. Quindi modifica ~ / .ssh / authorized_keys e aggiungi la nuova chiave su una nuova riga. Esci e ssh tramite la nuova macchina. Successo!



3

Per gli ambienti Elasticbeanstalk, puoi applicare una coppia chiave-valore a un'istanza in esecuzione come questa:

  • Creare una coppia chiave-valore da EC2 -> Coppie di chiavi (nella scheda RETE E SICUREZZA)
  • Vai a Elasticbeanstalk e fai clic sulla tua applicazione
  • Vai alla pagina di configurazione e modifica le impostazioni di sicurezza
  • Scegli la tua coppia di chiavi EC2 e fai clic su Applica
  • Fai clic su Conferma per confermare l'aggiornamento. Terminerà l'ambiente e applicherà il valore chiave al proprio ambiente.

1

Puoi effettivamente aggiungere una coppia di chiavi attraverso la pagina di configurazione del beanstalk elastico. quindi riavvia l'istanza per te e tutto funziona.

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.