Creazione di una connessione SSH con Amazon EC2 Instance Connect
Quando si eseguono istanze di Amazon EC2, è necessario gestirle. Il metodo tradizionale per gestire macchine Linux remote consiste nel connettersi a Linux tramite SSH ed eseguire i comandi necessari, modificare i file di configurazione, ecc. Gli utenti possono accedere a Linux tramite SSH utilizzando un nome utente e una password oppure un nome utente e una chiave di sicurezza. Tuttavia, per connettersi alle istanze di EC2 tramite SSH, gli utenti possono utilizzare solo un nome utente e una chiave di sicurezza. Questo criterio è stato impostato in AWS EC2 per garantire una maggiore sicurezza. Questo articolo del blog spiega come connettersi alle istanze AWS che eseguono Linux tramite SSH da macchine che eseguono Windows e Linux.
Scaricare una chiave da AWS
Quando si crea una nuova istanza di EC2 utilizzando la procedura guidata nella console di gestione di AWS, al termine del processo di creazione dell’istanza di EC2 viene generata una coppia di chiavi. Una coppia di chiavi è composta da una chiave privata e da una chiave pubblica. Secure Shell (SSH) è il protocollo di crittografia e la coppia di chiavi viene utilizzata per crittografare in modo asimmetrico la connessione. È possibile generare una chiave pubblica utilizzando la chiave privata. Quando viene generata una coppia di chiavi per un’istanza di Amazon EC2, la chiave pubblica viene salvata nella configurazione del sistema Linux installato sull’istanza di EC2, mentre la chiave privata viene scaricata dall’utente.
È necessario scaricare la chiave privata durante la fase finale del processo di creazione dell’istanza di Amazon EC2 e salvarla in un luogo sicuro. L’istanza di EC2 non verrà creata finché non si scarica la chiave privata. La chiave privata viene fornita in un file PEM. Tieni presente che questa è la tua unica possibilità di scaricare la chiave per l’istanza di EC2 corrente.
Scarico la chiave privata e la salvo come file blog01-key.pem .
C onnettersi all’istanza di EC2 tramite SSH Utilizzando PuTTY
PuTTY è un client SSH gratuito che puoi installa su Windows. È necessario convertire il file PEM scaricato nel formato PPK, supportato da PuTTY, prima di potersi connettere ad AWS tramite SSH. Per questo motivo, è necessario utilizzare l’utilità PuTTY Key Generator (PuTTYgen), che viene installata insieme a PuTTY da un unico file di installazione. È anche possibile scaricare manualmente puttygen.exe . PuTTYgen viene utilizzato per generare chiavi RSA e DSA.
Di conseguenza, sul computer Windows da cui mi collegherò alle istanze di EC2 ho tre file:
blog01-key.pem
putty.exe
puttygen.exe
In questo esempio, questi file si trovano in “ C:AWS SSH “.
Aprire PuTTY Key Generator (PuTTYgen) facendo clic sul file puttygen.exe o su un collegamento a questo file.
Fare clic su Load nella finestra di PuTTYgen.
Fare clic su “Seleziona tutto” (*.*) e sfoglia il file PEM. Selezioniamo “ C:AWS SSHblog01-key.pem “. Quindi fare clic su Open.
Leggere l’avviso visualizzato e premere OK.
Ora è possibile visualizzare la stringa della chiave pubblica nella finestra di PuTTYgen. Utilizzare la configurazione mostrata nella schermata qui sotto.
Tipo di chiave da generare: RSA
Numero di bit nella chiave generata: 2048 bit
Fare clic su Save private key. 
Sei sicuro di voler salvare questa chiave senza una passphrase a proteggerla?
Premi Yes se sei d’accordo. Se non sei d’accordo, torna indietro e proteggi la chiave con una passphrase.
Salva la chiave privata in una ubicazione sicura. Io salvo la chiave come “ C:AWS SSHAWS EC2 SSH.ppk “. Clicca su Save.
H Come connettersi via SSH a un’istanza di EC2 da Windows
Controlla l’indirizzo IP pubblico della tua istanza di EC2. L’istanza deve essere in stato “in esecuzione” per avere un indirizzo IP pubblico. Nel mio caso, l’indirizzo IP pubblico è 52.55.222.44 . Userò questo indirizzo IP per collegarmi ad AWS tramite SSH.
Apri PuTTY in Windows. Eseguire putty.exe o il collegamento appropriato.
Andare su SSH > Auth.
Fare clic su Browse e selezionare il file PPK (la chiave privata). Seleziono il file “ C:AWS SSHAWS EC2 SSH.ppk ” generato in precedenza in PuTTYgen.
Tornare alla schermata Session in PuTTY e inserire l’indirizzo IP pubblico della propria istanza di EC2 nel campo Host Name (o indirizzo IP) . Assicurati che il tipo di connessione sia SSH . Io inserisco 52.55.222.44 , che è l’indirizzo IP della mia istanza di EC2 copiato dalla Console di gestione EC2. La porta TCP 22 è selezionata. Fai clic su Open.
Viene visualizzato l’avviso di sicurezza. Leggi il messaggio e fai clic su Accept per continuare e connetterti all’istanza di EC2. Questa finestra di dialogo viene visualizzata quando ti connetti per la prima volta a una determinata macchina remota. L’impronta digitale visualizzata nel messaggio deve corrispondere a quella dell’istanza di Amazon EC2.
Inserisci il nome utente nella finestra della console. Poiché sulla mia istanza di Amazon EC2 utilizzo Ubuntu Linux, uso ubuntu, , che è il nome utente predefinito configurato per questa istanza implementata dall’AMI appropriata.
Nomi utente predefiniti per diversi tipi di AMI Linux su AWS:
- Amazon Linux 2 o l’AMI Amazon Linux: ec2-user
- CentOS: centos oppure ec2-user
- Debian: amministrazione
- Fedora: fedora oppure ec2-user
- Red Hat Enterprise Linux (RHEL): ec2-user oppure utente root
- SUSE: ec2-user oppure utente root
- Ubuntu: ubuntu
- Oracle: ec2-user
- Bitnami: bitnami
Una volta visualizzato il prompt dei comandi di una shell Linux (in questo caso bash), è possibile eseguire comandi sulla macchina Linux remota in esecuzione su AWS. Ciò significa che sono state impostate correttamente le impostazioni SSH per AWS EC2 in PuTTY.
Trasferimento di file tramite SSH verso le istanze di Amazon EC2
Ho configurato l’accesso SSH remoto AWS all’istanza di Amazon EC2 e ora posso collegarmi alle istanze AWS tramite SSH, eseguire comandi, modificare la configurazione, ecc. Tuttavia, potrebbe anche essere necessario trasferire file tramite SSH verso le istanze AWS dal proprio computer Windows o nella direzione opposta. Esistono protocolli di trasferimento file che funzionano su SSH per trasferire file in modo sicuro da un computer all’altro, ad esempio il Secure File Transfer Protocol (SFTP) e il Secure Copy Protocol (SCP).
Per trasferire file tramite SSH alle istanze AWS da Windows, è possibile utilizzare WinSCP, uno strumento gratuito per Windows. Si noti che scp devono essere installati sul computer Linux remoto in esecuzione su AWS.
Una volta installato WinSCP sul computer Windows, avviare l’applicazione.
Selezionare SFTP come protocollo file e, nel campo Host name inserire l’indirizzo IP pubblico dell’istanza di EC2 a cui ci si desidera connettere tramite SSH per trasferire i file. Inserire un nome utente per l’istanza di EC2. Nel mio esempio utilizzo 52.55.222.44 come indirizzo IP e ubuntu come nome utente.
Fare clic su Advanced nella finestra principale di WinSCP.
Andare su SSH > Authentication nella finestra Impostazioni avanzate del sito . Fare clic su … nella sezione Parametri di autenticazione e selezionare la chiave privata generata in precedenza in PuTTYgen. Nel mio caso, seleziono “ C:AWS SSHAWS EC2 SSH.ppk “. Premere OK per salvare le impostazioni e tornare alla finestra principale di WinSCP.
Fare clic su Login nella finestra principale di WinSCP.
Viene visualizzato un messaggio di avvertenza, proprio come quando ci si connette per la prima volta all’istanza di EC2 da PuTTY. Fare clic su Yes per continuare.
Se la configurazione SSH di AWS EC2 è corretta e le impostazioni di connessione SSH sono state impostate correttamente in WinSCP, verrà visualizzata la finestra con due riquadri in stile Commander. Nel riquadro di sinistra viene visualizzata la cartella utente del computer Windows locale, mentre nel riquadro di destra viene visualizzata la cartella home dell’utente del sistema Linux in esecuzione su AWS. È possibile trascinare i file da un riquadro all’altro e copiare, rinominare o eliminare file sui computer locale e remoto. 
Connessione ad AWS tramite SSH da Linux
A differenza di Windows, Linux dispone di un client SSH nativo. Nella console della tua macchina Linux locale, utilizza un comando simile al seguente per connetterti tramite SSH alle istanze di EC2 di AWS che eseguono Linux:
ssh -i file_name.pem ubuntu@ip_address
Vai alla directory in cui si trova il file della tua chiave privata .pem sulla macchina Linux. In questo esempio utilizzo Ubuntu e ho scaricato il file blog01-key.pem in ~/Downloads/.
cd ~/Downloads/
ssh -i blog01-key.pem ubuntu@52.55.222.44
Dove ubuntu è il nome utente sulla macchina Linux remota, e 52.55.222.44 è l’indirizzo IP della macchina Linux remota.
Se esegui questo comando ora, otterresti l’errore:
Avvertenza: file della chiave privata non protetto.
I permessi per ‘blog01-key.pem’ sono troppo permissivi.
È obbligatorio che la chiave privata non sia accessibile ad altri.
Questa chiave privata verrà ignorata. Carica chiave: permesso pad.
Permesso negato (chiave pubblica).
È obbligatorio impostare permessi più bassi (più restrittivi) per motivi di sicurezza.
chmod 400 ./blog-key.pem
Utilizza 400 se le chiavi devono essere leggibili solo da te.
Utilizza 600 se hai bisogno che le chiavi siano leggibili e scrivibili da te.
Ora puoi connetterti alle istanze di Amazon EC2 tramite SSH dalla tua macchina Linux con il comando:
ssh -i blog01-key.pem ubuntu@52.55.222.44
Ora sono connesso tramite SSH a un’istanza di Amazon EC2.
Trasferimento di file tramite SSH su Amazon EC2 in Linux
Puoi anche trasferire file tramite SSH alle istanze di Amazon EC2 utilizzando SCP in Linux. Assicurati di aver già stabilito una connessione SSH AWS all’istanza Linux remota dalla tua macchina Linux locale. Quindi, apri una nuova console sulla tua macchina Linux locale e connettiti all’istanza di EC2 utilizzando un comando del tipo:
scp -i /path/key_name.pem /path/file_name.txt user_name@ec2_instance_IP_address:/path_to_file
Nel mio esempio, utilizzo il comando:
scp -i ~/Downloads/blog01-key.pem ~/Downloads/file.txt ubuntu@52.55.222.44:/home/ubuntu
Il trasferimento dei file tramite SSH all’istanza AWS è stato completato con successo.
Per copiare un file nella direzione opposta (da Linux su AWS EC2 al proprio computer Linux locale), utilizzare un comando del tipo:
scp -i /path/key_name.pem user_name@ec2_instance_IP_address:/path_to_file/my-file.txt path/my-file2.txt
Nel mio caso, utilizzo il comando:
scp -i ~/Downloads/blog01-key.pem ubuntu@52.55.222.44:/home/ubuntu/file1.txt ~/Downloads/file1-copy.txt
Come si vede nella schermata, il file è stato copiato con successo. È possibile copiare file importanti da un’istanza di Amazon EC2 al computer locale desiderato ed eseguire il backup dei file. Eseguire regolarmente Backup di AWS EC2 per evitare la perdita di dati.
Come aggiungere una nuova chiave a un’istanza AWS
È possibile creare una coppia di chiavi aggiuntiva per un’istanza di EC2 esistente, al fine di connettersi alle istanze AWS tramite SSH dopo aver creato l’istanza AWS di EC2. Potrebbe essere necessario farlo per fornire l’accesso SSH all’istanza EC2 ad altri utenti. Se si ritiene che l’utente non abbia bisogno di connettersi tramite SSH alle istanze di EC2, è possibile eliminare la chiave pubblica dalla macchina Linux in esecuzione su AWS EC2 senza dover ricreare una nuova chiave al posto di quella generata al momento della creazione dell’istanza.
Aprire la Console di gestione EC2 nella Console di gestione AWS.
Andare su Network & Security nel pannello di navigazione e fare clic su Key Pairs.
In questa pagina vengono visualizzate tutte le coppie di chiavi esistenti. È possibile digitare una parte del nome di una coppia di chiavi esistente nel campo di ricerca per individuarla.
Fare clic sul pulsante Create key pair nell’angolo in alto a destra dell’interfaccia web per creare una nuova coppia di chiavi per un’istanza di EC2 esistente.
Selezionare .pem come formato della chiave privata se è necessario utilizzare una chiave in Linux con OpenSSH oppure selezionare .ppk se è necessario utilizzare la chiave in Windows con PuTTY. Dato che utilizzerò una macchina Linux locale per collegarmi alle istanze di EC2 di AWS tramite SSH con una nuova chiave, seleziono l’opzione .pem per la chiave. È possibile aggiungere tag se necessario. Fare clic su Create key pair quando si è pronti a continuare.
Salvare il file scaricato in un luogo sicuro. Nel mio caso, il nome del file scaricato è blog02-temp.pem e salvo questo file nella cartella Download all’interno della directory home dell’utente.
Recupero di una chiave pubblica dalla nuova coppia di chiavi
Abbiamo generato una nuova coppia di chiavi nell’interfaccia web della Console di gestione AWS. Ora dobbiamo generare una chiave pubblica utilizzando la chiave privata contenuta nel file scaricato .pem .
Utilizza un comando del seguente formato:
ssh-keygen -y -f /path_to_key_pair/my-key-pair.pem
Nel mio caso, il comando è:
ssh-keygen -y -f ~/Downloads/blog02-temp.pem
Se ricevi un errore, imposta i permessi corretti:
chmod 400 ~/Downloads/blog02-temp.pem
Se tutto è corretto, la chiave pubblica generata verrà visualizzata nell’output della console.
Copia la stringa della chiave generata e conserva queste informazioni in un luogo sicuro. In questo esempio, salvo la stringa della chiave in un file di testo.
Copia la stringa della chiave negli appunti.
Connettiti alle istanze di EC2 tramite SSH dalla tua macchina Linux locale come spiegato in precedenza in questo post.
Ora ci troviamo in /home/Ubuntu/
Apri con un editor di testo il file di configurazione in cui sono memorizzate le chiavi pubbliche per accedere all’istanza di EC2 tramite SSH: nano ~/.ssh/authorized_keys
Il percorso completo di questo file di configurazione dipende dall’Amazon Machine Image (AMI) di Linux e può essere:
/home/ubuntu/.ssh/authorized_keys
/home/ec2-user/.ssh/authorized_keys
/root/.ssh/authorized_keys
Incolla la tua chiave dagli appunti nella seconda riga di questo file di configurazione.
Salva le modifiche e chiudi il file.
Non chiudere la console (terminale) con la sessione SSH corrente che stai utilizzando per la connessione all’istanza di EC2 finché non ti sei assicurato che la seconda chiave che hai aggiunto funzioni. Altrimenti, potresti perdere la connessione SSH se la configurazione è errata, senza la possibilità di connetterti alle istanze di EC2 tramite SSH. Non rimanere bloccato fuori in caso di errore!
Apri un altro terminale sulla tua macchina Linux locale e prova a connetterti all’istanza utilizzando una nuova chiave. Vado nella directory in cui si trovano i miei file di chiave ( .pem ).
cd ~/Downloads/
Connettiti all’istanza di EC2 con sistema operativo Linux su AWS dalla tua macchina Linux locale nella nuova console, specificando la nuova chiave privata ( blog02-temp.pem in questo caso).
ssh -i blog02-temp.pem ubuntu@52.55.222.44
La connessione SSH ad AWS è stata stabilita con successo utilizzando la nuova chiave. Ora è possibile inviare la nuova chiave ( blog02-temp.pem ) a un utente che deve stabilire la connessione SSH ad AWS. Quando sarà necessario disabilitare l’accesso SSH a questa istanza AWS EC2 per l’utente, eliminare la seconda riga da .ssh/authorized_keys sulla propria istanza Linux remota in esecuzione su AWS EC2. Poiché la configurazione SSH di AWS con entrambe le chiavi (la prima chiave generata al momento della creazione dell’istanza di EC2 e la seconda chiave creata in precedenza per consentire a un altro utente di connettersi ad AWS EC2) funziona correttamente, è possibile chiudere le finestre del terminale SSH.
Se si elimina una coppia di chiavi in Network & Security > Key pairs dalla Console di gestione EC2 (la sezione in cui è stata creata la seconda chiave nell’interfaccia web della Console di gestione AWS), le chiavi all’interno di quella specifica istanza di EC2 non vengono eliminate.
Cosa fare in caso di smarrimento della chiave SSH di AWS EC2
Se si smarrisce la chiave privata per la connessione a un’istanza di EC2 (generata al momento della creazione di una nuova istanza di EC2), non sarà più possibile connettersi all’istanza in questione. Non è possibile generare una nuova chiave e inserirla nel file di configurazione SSH di AWS nell’istanza di EC2 corrente. In questa situazione, è possibile utilizzare un’istanza di EC2 temporanea a cui si ha accesso SSH. Provare la seguente procedura per ripristinare l’accesso SSH AWS EC2 all’istanza.
- Arrestare l’istanza di EC2 originale di cui si è smarrita la chiave privata SSH di AWS.
- Verificare le informazioni relative ai volumi EBS collegati all’istanza di EC2. È necessario identificare il volume EBS che contiene il volume root / montato su Linux. Prendere nota dell’ID di questo volume EBS.
- Avviare un’istanza temporanea su AWS EC2. È possibile utilizzare un’istanza che esegua la stessa distribuzione Linux installata sulla macchina originale (un’AMI dello stesso tipo).
- Generare una nuova coppia di chiavi per la connessione ad AWS nella Console di gestione di AWS. Salvare la chiave privata e preparare la chiave pubblica. È necessario generare la stringa della chiave pubblica per ripristinare la configurazione SSH di AWS memorizzata sul volume di root utilizzato dall’istanza originale.
- Creare una directory nel sistema Linux in esecuzione sull’istanza di EC2 temporanea e montare il volume EBS contenente la partizione root / dell’istanza di EC2 originale sull’istanza di EC2 temporanea. Individuare il volume EBS necessario tramite l’ID del volume annotato in precedenza.
- Aprire il file di configurazione delle chiavi SSH di AWS (che si trovava in una directory come /home/Ubuntu/.ssh/authorized_keys). Il percorso varia a seconda della directory in cui è stata montata la partizione root dell’istanza di EC2 originale. Aggiungere la stringa della nuova chiave pubblica al file di configurazione delle chiavi SSH di AWS.
- Smontare il volume EBS utilizzato dall’istanza di EC2 originale e collegato all’istanza di EC2 temporanea.
- Montare nuovamente il volume EBS contenente il file di configurazione delle chiavi SSH di AWS modificato sull’istanza di EC2 originale.
- Accendere l’istanza EC2 originale e connettersi a questa istanza utilizzando una nuova coppia di chiavi tramite SSH.
Utilizzo di EC2 Instance Connect
La gestione delle chiavi è una parte importante dell’amministrazione di AWS, poiché è necessario conservare in un luogo sicuro le chiavi SSH di AWS EC2 per l’accesso alle istanze di EC2 ed evitare di perderle. La creazione e l’eliminazione delle chiavi necessarie per l’accesso temporaneo di altri utenti può diventare un’attività di routine in presenza di un numero elevato di utenti. Per questo motivo, Amazon offre la possibilità di connettersi alle istanze di Amazon EC2 tramite SSH utilizzando EC2 Instance Connect. Questa funzione consente di automatizzare la gestione delle chiavi SSH per la connessione alle istanze di Amazon EC2.
L’idea alla base dell’utilizzo di EC2 Instance Connect è quella di creare criteri di gestione delle identità e degli accessi (IAM) per controllare centralmente l’accesso SSH alle istanze di Amazon EC2 senza la necessità di gestire (creare, condividere, eliminare) manualmente le chiavi SSH. Infine, gli utenti possono utilizzare un client SSH, un client basato su browser della console AWS EC2 o la CLI di Amazon EC2 Instance Connect per connettersi alle istanze di Amazon EC2.
L’API di Amazon Instance Connect inserisce una chiave SSH pubblica monouso nei metadati dell’istanza per 60 secondi. Il criterio IAM associato all’utente IAM autorizza l’utente. L’utente deve connettersi all’istanza di EC2 utilizzando questa chiave entro 60 secondi. Una volta scaduta la chiave, è necessario utilizzarne una nuova.
Amazon Instance Connect è supportato per le istanze di EC2 su cui sono installati Ubuntu 16 (o versioni successive) e Amazon Linux 2. Amazon Instance Connect deve essere installato sull’istanza di EC2 Linux. Un altro prerequisito è l’installazione di AWS CLI sulla macchina Linux remota in esecuzione su AWS.
Dopo l’installazione, EC2 Instance Connect esegue lo script che scrive i dati relativi a questi parametri nel file di configurazione (/etc/ssh/sshd_config) del demone del server SSH:
AuthorizedKeysCommand
AuthorizedKeysCommandUser
La configurazione aggiornata AuthorizedKeysCommand viene utilizzata per leggere le chiavi SSH pubbliche di AWS EC2 dai metadati dell’istanza EC2. Se per questi parametri sono già stati inseriti valori personalizzati, Instance Connect non li aggiorna (né li sovrascrive), ma in questo caso non è possibile utilizzare la funzione.
È necessario creare un file di configurazione in formato JSON. Aprire Console IAM, quindi andare su Policies e fare clic su Create Policy. In alternativa, è possibile utilizzare l’interfaccia a riga di comando sul proprio computer Linux su cui è installata AWS CLI. Di seguito è riportato un esempio di configurazione. Questo criterio consente di identificare le istanze tramite l’ID istanza per autorizzarne l’accesso.
{
"Version": "2021-10-17",
"Statcodeent": [
{
"Effect": "Allow",
"Action": "ec2-instance-connect:SendSSHPublicKey",
"Resource": [
"arn:aws:ec2:region:account-id:instance/i-00000000000000000",
"arn:aws:ec2:region:account-id:instance/i-00000000000000001"
],
"Condition": {
"StringEquals": {
"ec2:osuser": "ami-username"
}
}
},
{
"Effect": "Allow",
"Action": "ec2:DescribeInstances",
"Resource": "*"
}
]
}
Successivamente, il criterio deve essere attivato. Il comando AWS CLI per attivare il criterio sarà simile al seguente:
aws iam create-policy --policy-name my-policy --policy-document file://JSON-file-name
È possibile associare il criterio attivato all’utente appropriato.
aws iam attach-user-policy --policy-arn arn:aws:iam::account-id:policy/my-policy --user-name IAM-friendly-name
Per connettersi all’istanza di Amazon EC2 su Amazon Console EC2, selezionare l’istanza di Amazon EC2 desiderata e fare clic sul pulsante Connect . Nella pagina Connettiti all’istanza , seleziona EC2 Instance Connect tab e clicca su Connect.
Conclusione
La connessione alle istanze di EC2 tramite SSH è una parte importante del processo di amministrazione di EC2. Questo post del blog ha spiegato come configurare SSH su EC2 e connettersi alle istanze di EC2 con sistema operativo Linux da macchine locali Linux e Windows. Per stabilire la connessione SSH con le istanze di EC2 è necessario utilizzare coppie di chiavi. La chiave pubblica è memorizzata nella configurazione del sistema Linux in esecuzione su AWS EC2, mentre la chiave privata viene utilizzata da un client SSH locale installato sul computer dell’utente. Conservare le chiavi in un luogo sicuro ed eseguire regolarmente dei backup per evitare la perdita di dati, tempo e costi.




























