Questa pagina descrive come abilitare l'accesso interattivo alla console seriale di un'istanza per eseguire il debug dei problemi di avvio e di rete, risolvere i problemi di malfunzionamento, interagire con il bootloader GRUB (Grand Unified Bootloader) ed eseguire altre attività di risoluzione dei problemi.
Un'istanza di macchina virtuale (VM) ha quattro porte seriali virtuali. L'interazione con una porta seriale è simile all'utilizzo di una finestra di terminale, in quanto input e output sono interamente in modalità di testo e non è prevista un'interfaccia grafica né il supporto del mouse. Il sistema operativo, il BIOS e altre entità a livello di sistema dell'istanza spesso scrivono l'output sulle porte seriali e possono accettare input come comandi o risposte ai prompt. In genere, queste entità a livello di sistema utilizzano la prima porta seriale (porta 1) e la porta seriale 1 viene spesso chiamata console seriale.
Se devi solo visualizzare l'output della porta seriale senza inviare comandi alla console seriale, puoi chiamare il metodo getSerialPortOutput
o utilizzare Cloud Logging per leggere le informazioni scritte dall'istanza sulla sua porta seriale; consulta Visualizzazione dei log delle porte seriali.
Tuttavia, se riscontri problemi di accesso all'istanza tramite SSH o devi risolvere i problemi di un'istanza non completamente avviata, puoi abilitare l'accesso interattivo alla console seriale, che ti consente di connetterti a e interagire con qualsiasi porta seriale dell'istanza. Ad esempio, puoi eseguire comandi
e rispondere ai prompt direttamente sulla porta seriale.
Quando attivi o disabiliti la porta seriale, puoi utilizzare qualsiasi valore booleano accettato dal server dei metadati. Per ulteriori informazioni, consulta la sezione Impostazione di valori booleani.
Prima di iniziare
-
Se non l'hai ancora fatto, configura l'autenticazione.
L'autenticazione è il processo mediante il quale viene verificata l'identità per l'accesso ai servizi e alle API Google Cloud.
Per eseguire codice o esempi da un ambiente di sviluppo locale, puoi autenticarti in Compute Engine nel seguente modo.
Seleziona la scheda relativa a come prevedi di utilizzare gli esempi in questa pagina:
Console
Quando utilizzi la console Google Cloud per accedere ai servizi e alle API di Google Cloud, non devi configurare l'autenticazione.
gcloud
-
Installa Google Cloud CLI, quindi initialize eseguendo questo comando:
gcloud init
- Imposta una regione e una zona predefinite.
REST
Per utilizzare gli esempi di API REST in questa pagina in un ambiente di sviluppo locale, devi utilizzare le credenziali che fornisci a gcloud CLI.
Installa Google Cloud CLI, quindi initialize eseguendo questo comando:
gcloud init
-
Abilitazione dell'accesso interattivo sulla console seriale
Abilita l'accesso interattivo alla console seriale per singole istanze VM o per un intero progetto.
Abilitazione dell'accesso per un progetto
L'abilitazione dell'accesso interattivo alla console seriale in un progetto consente l'accesso a tutte le istanze VM che fanno parte di quel progetto.
Per impostazione predefinita, l'accesso interattivo alla porta seriale è disabilitato. Puoi anche disabilitarla esplicitamente impostando la chiave serial-port-enable
su FALSE
. In entrambi i casi, qualsiasi impostazione per istanza sostituisce l'impostazione a livello di progetto o l'impostazione predefinita.
Console
- Nella console Google Cloud, vai alla pagina Metadati.
- Fai clic su Modifica per modificare le voci dei metadati.
- Aggiungi una nuova voce che utilizzi la chiave serial-port-enable e il valore TRUE.
- Salva le modifiche.
gcloud
Utilizzando Google Cloud CLI, inserisci il comando project-info add-metadata
come segue:
gcloud compute project-info add-metadata \ --metadata serial-port-enable=TRUE
REST
Nell'API, invia una richiesta al metodo projects().setCommonInstanceMetadata
, fornendo alla chiave serial-port-enable
il valore TRUE
:
{ "fingerprint": "FikclA7UBC0=", "items": [ { "key": "serial-port-enable", "value": "TRUE" } ] }
Abilitazione dell'accesso per un'istanza VM
Abilita l'accesso interattivo alla console seriale per un'istanza specifica. Un'impostazione per istanza, se esistente, sostituisce qualsiasi impostazione a livello di progetto. Puoi anche disabilitare l'accesso per un'istanza specifica, anche se l'accesso è abilitato a livello di progetto, impostando serial-port-enable
su FALSE
anziché su TRUE
. Allo stesso modo, puoi abilitare l'accesso per una o più istanze anche se è disabilitato per il progetto, in modo esplicito o per impostazione predefinita.
Console
- Nella console Google Cloud, vai alla pagina Istanze VM.
- Fai clic sull'istanza per cui vuoi abilitare l'accesso.
- Fai clic su Modifica.
- Nella sezione Accesso remoto, attiva/disattiva la casella di controllo Attiva connessione alle porte di serie.
- Salva le modifiche.
gcloud
Utilizzando Google Cloud CLI, inserisci il comando instances add-metadata
, sostituendo instance-name
con il nome della tua istanza.
gcloud compute instances add-metadata instance-name \ --metadata serial-port-enable=TRUE
REST
Nell'API, invia una richiesta al metodo instances().setMetadata
con la chiave serial-port-enable
e il valore TRUE
:
POST https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/instances/example-instance/setMetadata { "fingerprint": "zhma6O1w2l8=", "items": [ { "key": "serial-port-enable", "value": "TRUE" } ] }
Connessione a una console seriale
Dopo aver abilitato l'accesso interattivo per la console seriale di un'istanza, puoi connetterti alla console seriale.
Compute Engine offre un gateway della console seriale globale e gateway della console seriale a livello di regione per ogni regione Google Cloud. Quando ti connetti alla console seriale utilizzando la console Google Cloud o Google Cloud CLI, ti connetti automaticamente alla console seriale a livello di regione. Quando utilizzi altri client SSH, puoi scegliere tra gateway a livello di regione o globale, ma ti consigliamo il gateway a livello di regione per una maggiore affidabilità.
La console seriale autentica gli utenti con le chiavi SSH. In particolare, devi aggiungere la chiave SSH pubblica ai metadati del progetto o dell'istanza e archiviare la chiave privata sulla macchina locale da cui vuoi connetterti. gcloud CLI e la console Google Cloud aggiungono automaticamente chiavi SSH al progetto. Se utilizzi un client di terze parti, potrebbe essere necessario aggiungere manualmente le chiavi SSH.
Console
Per connetterti alla console seriale a livello di regione di una VM, segui questi passaggi:
- Nella console Google Cloud, vai alla pagina Istanze VM.
- Fai clic sull'istanza a cui vuoi connetterti.
- In Accesso remoto, fai clic su Connetti alla console seriale per connetterti alla porta predefinita (porta 1).
- Se vuoi connetterti a un'altra porta seriale, fai clic sulla Freccia giù accanto al pulsante Connetti alla console seriale e modifica il numero di porta di conseguenza.
- Per le istanze Windows, apri il menu a discesa accanto al pulsante e connettiti alla Porta 2 per accedere alla console seriale.
gcloud
Per connetterti alla console seriale a livello di regione di una VM, utilizza il comando gcloud compute connect-to-serial-port
:
gcloud compute connect-to-serial-port VM_NAME
--port=PORT_NUMBER
Sostituisci quanto segue:
VM_NAME
: il nome della VM a cui vuoi connetterti dalla console seriale.PORT_NUMBER
: il numero di porta che vuoi connettere. Per le VM Linux, utilizza1
; per le VM Windows, utilizza2
. Per scoprire di più sui numeri di porta, consulta Informazioni sulla numerazione delle porte seriali.
Altri client SSH
Puoi connetterti alla console seriale di un'istanza utilizzando altri client SSH di terze parti, purché il client consenta di connetterti alla porta TCP 9600.
Quando ti connetti utilizzando client SSH di terze parti, puoi connetterti a una console seriale con ambito globale o a una console seriale con ambito a livello di regione.
Consigliato: per connetterti alla console seriale a livello di regione, utilizza il seguente nome host:
region-ssh-serialport.googleapis.com
Per connetterti alla console seriale globale, utilizza il seguente nome host:
ssh-serialport.googleapis.com
Ad esempio, il seguente comando SSH connette la console seriale regionale tramite la porta seriale predefinita (1) di un'istanza denominata example-instance
con il nome utente jane
in un progetto con ID progetto myproject
. L'istanza si trova nella zona us-central1-f
. Sostituisci private-ssh-key-file
con il file di chiave SSH privata per l'istanza.
ssh -i private-ssh-key-file -p 9600 myproject.us-central1-f.example-instance.jane@us-central1-ssh-serialport.googleapis.com
In dettaglio, puoi connetterti alla console seriale di un'istanza utilizzando le seguenti informazioni di accesso e indirizzo:
project-id.zone.instance-name.username.options@region-ssh-serialport.googleapis.com
Sostituisci quanto segue:
project-id
: l'ID progetto per questa istanza.zone
: la zona dell'istanza.region
: la regione dell'istanza.instance-name
: il nome dell'istanza.username
: il nome utente che stai utilizzando per la connessione all'istanza. In genere, si tratta del nome utente sulla tua macchina locale.options
: opzioni aggiuntive che puoi specificare per questa connessione. Ad esempio, puoi specificare una determinata porta seriale e un'opzione avanzata. Il numero di porta può essere compreso da 1 a 4 inclusi. Per scoprire di più sui numeri di porta, consulta Informazioni sulla numerazione delle porte seriali. Se omessa, ti collegherai alla porta seriale 1.
Se ti stai connettendo a un'istanza VM Windows, connettiti tramite la porta 2 utilizzando questo comando:
ssh -i private-ssh-key-file -p 9600 project-id.zone.instance-name.username.port=2@ssh-serialport.googleapis.com
Se hai difficoltà a connetterti utilizzando un client SSH di terze parti, puoi eseguire il comando gcloud compute connect-to-serial-port
con l'opzione della riga di comando --dry-run
per visualizzare il comando SSH che verrà eseguito per tuo conto. quindi puoi confrontare le opzioni con il comando che stai utilizzando.
Configurare una connessione sicura
Quando utilizzi un client SSH di terze parti diverso da Google Cloud CLI, puoi assicurarti che il tuo sito sia protetto da impersonificazione o attacchi man in the middle controllando la chiave SSH del server della porta seriale di Google. Per configurare il sistema per il controllo della chiave SSH del server, segui questi passaggi:
- Scarica la chiave SSH del server per la console seriale che utilizzerai:
- Per le connessioni a livello di regione, la chiave SSH del server relativa a una regione è disponibile all'indirizzo
https://www.gstatic.com/vm_serial_port/region/region.pub
- Per le connessioni globali, scarica la chiave SSH del server della porta seriale di Google
- Per le connessioni a livello di regione, la chiave SSH del server relativa a una regione è disponibile all'indirizzo
- Apri il file host noto, che si trova generalmente all'indirizzo
~/.ssh/known_hosts
. Aggiungi i contenuti della chiave SSH del server, con il nome host del server anteposto alla chiave. Ad esempio, se la chiave server us-central1 contiene la riga
ssh-rsa AAAAB3NzaC1yc...
,~/.ssh/known_hosts
dovrebbe avere una riga simile alla seguente:[us-central1-ssh-serialport.googleapis.com]:9600 ssh-rsa AAAAB3NzaC1yc...
Per motivi di sicurezza, di tanto in tanto Google potrebbe modificare la chiave SSH del server Serial Port di Google. Se il client non riesce ad autenticare la chiave server, termina immediatamente il tentativo di connessione e completa i passaggi precedenti per scaricare una nuova chiave SSH del server della porta seriale di Google.
Se, dopo aver aggiornato la chiave host, continui a ricevere un errore di autenticazione dell'host dal client, interrompi i tentativi di connessione alla porta seriale e contatta l'Assistenza Google. Non fornire credenziali su una connessione in cui l'autenticazione host non è riuscita.
Disconnessione dalla console seriale
Per disconnetterti dalla console seriale:
- Premi il tasto
ENTER
. - Digita
~.
(tilde, seguito da un punto).
Puoi trovare altri comandi digitando ~?
o esaminando la pagina man per SSH:
man ssh
Non provare a disconnetterti utilizzando uno dei seguenti metodi:
La combinazione di tasti
CTRL+ALT+DELETE
o altre combinazioni simili. Questo non funziona perché la console seriale non riconosce le combinazioni di tastiere PC.Il comando
exit
ologout
non funziona perché l'ospite non è a conoscenza di connessioni di rete o del modem. L'uso di questo comando determina la chiusura e la riapertura della console, nonché la connessione alla sessione. Se vuoi attivare i comandiexit
elogout
per la sessione, puoi farlo impostando l'opzioneon-dtr-low
.
Connessione a una console seriale con una richiesta di accesso
Se stai tentando di risolvere un problema con una VM che è stata avviata completamente o di risolvere un problema che si verifica dopo che la VM è stata avviata oltre la modalità utente singolo, è possibile che ti vengano richieste informazioni di accesso quando provi ad accedere alla console seriale.
Per impostazione predefinita, le immagini di sistema Linux fornite da Google non sono configurate per consentire gli accessi basati su password per gli utenti locali. Tuttavia, le immagini Windows fornite da Google sono configurate per consentire gli accessi basati su password per gli utenti locali.
Se la tua VM esegue un'immagine preconfigurata con accessi alla porta seriale, devi configurare una password locale sulla VM per poter accedere alla console seriale, se richiesto. Puoi configurare una password locale dopo aver eseguito la connessione alla VM o utilizzando uno script di avvio.
Configurare una password locale utilizzando uno script di avvio
Puoi utilizzare uno script di avvio per configurare una password locale che ti consenta di connetterti alla console seriale durante o dopo la creazione della VM.
Le seguenti istruzioni descrivono come configurare una password locale dopo la creazione della VM.
Nella console Google Cloud, vai alla pagina Istanze VM.
Seleziona la VM per cui vuoi aggiungere la password locale.
Fai clic su Modifica.
Linux
Vai alla sezione Metadati > Automazione.
Se la VM ha uno script di avvio esistente, copialo e incollalo in un luogo sicuro.
Aggiungi il seguente script di avvio:
#!/bin/bash useradd USERNAME echo USERNAME:PASSWORD | chpasswd usermod -aG google-sudoers USERNAME
Sostituisci quanto segue:
- USERNAME: il nome utente che vuoi aggiungere
- PASSWORD: la password per il nome utente. Evita password semplici, dato che alcuni sistemi operativi potrebbero richiedere una lunghezza e una complessità minime delle password.
Windows
- Vai alla sezione Metadati personalizzati.
- Se la VM ha uno script di avvio esistente, copialo e incollalo in un luogo sicuro.
- Fai clic su Aggiungi elemento.
- Nel campo Chiave, inserisci
windows-startup-script-cmd
. Nel campo Valore, inserisci lo script seguente:
net user USERNAME PASSWORD /ADD /Y net localgroup administrators USERNAME /ADD
Sostituisci quanto segue:
- USERNAME: il nome utente che vuoi aggiungere
- PASSWORD: la password per il nome utente
Fai clic su Salva.
Per riavviare la VM, fai clic su Reimposta. Per maggiori informazioni, vedi Reimpostare una VM.
Inserisci i tuoi dati di accesso quando richiesto.
Rimuovi lo script di avvio dalla VM dopo aver creato l'utente.
Configurazione di una password locale utilizzando passwd
sulla VM
Le seguenti istruzioni descrivono come configurare una password locale per un utente su una VM, in modo che possa accedere alla console seriale di quella VM utilizzando la password specificata.
Connettiti alla VM. Sostituisci
instance-name
con il nome dell'istanza.gcloud compute ssh instance-name
Sulla VM, crea una password locale con il comando seguente. In questo modo viene impostata una password per l'utente con cui hai eseguito l'accesso.
sudo passwd $(whoami)
Segui le istruzioni per creare una password.
Quindi, esci dall'istanza e connettiti alla console seriale.
Inserisci i tuoi dati di accesso quando richiesto.
Configurazione dell'accesso su altre porte seriali
Le richieste di accesso sono abilitate sulla porta 1 per impostazione predefinita sulla maggior parte dei sistemi operativi Linux. Tuttavia, spesso la porta 1 può essere sovraccaricata a causa del logging dei dati e di altre informazioni che vengono stampate sulla porta. Puoi scegliere invece di abilitare una richiesta di accesso su un'altra porta, ad esempio la porta 2 (ttyS1), eseguendo uno dei seguenti comandi sulla tua VM. In Informazioni sulla numerazione delle porte seriali consulta un elenco delle porte disponibili per una VM.
La seguente tabella elenca le immagini preconfigurate con un accesso alla console seriale e le porte predefinite.
Sistema operativo | Porte con una richiesta di accesso per impostazione predefinita | Gestione servizio |
---|---|---|
CentOS 6 | 1 | upstart |
CentOS 7 | 1 | systemd |
CoreOS | 1 | systemd |
COS | 1 | systemd |
Debian 8 | 1 | systemd |
Debian 9 | 1 | systemd |
OpenSUSE 13 | 1 | systemd |
Leap di OpenSUSE | 1 | systemd |
RHEL 6 | 1 | upstart |
RHEL 7 | 1 | systemd |
SLES 11 | 1 | sysvinit |
SLES 12 | 1 | systemd |
Ubuntu 14.04 | 1 | upstart |
Ubuntu 16.04 | 1 | systemd |
Ubuntu 17.04 | 1 | systemd |
Ubuntu 17.10 | 1 | systemd |
Windows | COM2 | N/D |
Per attivare le richieste di accesso su porte seriali aggiuntive, segui le istruzioni riportate di seguito.
systemd
Per i sistemi operativi Linux che utilizzano systemd
:
Attiva temporaneamente il servizio fino al riavvio successivo:
sudo systemctl start serial-getty@ttyS1.service
Abilita il servizio in modo permanente, a partire dal riavvio successivo:
sudo systemctl enable serial-getty@ttyS1.service
iniziare
Per i sistemi operativi Linux che utilizzano upstart
:
Crea un nuovo file
/etc/init/ttyS1.conf
che riflettattyS1
copiando e modificando un filettyS0.conf
esistente. Ad esempio:In Ubuntu 14.04:
sudo sh -c "sed -e s/ttyS0/ttyS1/g < /etc/init/ttyS0.conf > /etc/init/ttyS1.conf"
Su RHEL 6.8 e CentOS 6.8
sudo sh -c "sed -ne '/^# # ttyS0/,/^# exec/p' < /etc/init/serial.conf | sed -e 's/ttyS0/ttyS1/g' -e 's/^# *//' > /etc/init/ttyS1.conf"
Inizia dopo una richiesta di accesso su
ttyS1
senza riavviare:sudo start ttyS1
Sysvinit
Per i sistemi operativi Linux che utilizzano sysvinit
, esegui questo comando:
sudo sed -i~ -e 's/^#T([01])/T\1/' /etc/inittab sudo telinit q
Informazioni sulla numerazione delle porte seriali
Ogni istanza di macchina virtuale ha quattro porte seriali. Per coerenza con l'API getSerialPortOutput
, ogni porta è numerata da 1 a 4. Le porte seriali di Linux e di altri sistemi
simile sono numeriche da 0 a 3. Ad esempio, per molte immagini di sistemi operativi,
i dispositivi corrispondenti sono compresi tra /dev/ttyS0
e /dev/ttyS3
. Windows fa riferimento alle porte di serie come da COM1
a COM4
. Per connetterti a ciò che Windows considera COM3
e Linux considera ttyS2
, devi specificare la porta 3. Utilizza
la tabella di seguito per capire a quale porta vuoi connetterti.
Porte seriali dell'istanza di macchina virtuale | Porte seriali Linux standard | Porte COM di Windows |
---|---|---|
1
| /dev/ttyS0 |
COM1 |
2
| /dev/ttyS1 |
COM2 |
3
| /dev/ttyS2 |
COM3 |
4
| /dev/ttyS3 |
COM4 |
Tieni presente che molte immagini Linux utilizzano la porta 1 (/dev/ttyS0
) per il logging dei messaggi dei programmi del kernel e di sistema.
Invio di un'interruzione di serie
La funzionalità Chiave Magic SysRq consente di eseguire attività di basso livello, indipendentemente dallo stato del sistema. Ad esempio, puoi sincronizzare i file system, riavviare l'istanza, terminare i processi e smontare i file system utilizzando la funzionalità chiave Magic SysRq.
Per inviare un comando Magic SysRq utilizzando un'interruzione seriale simulata:
- Premi il tasto
ENTER
. - Digita
~B
(tilde, seguito daB
in maiuscolo). - Digita il comando Magic SysRq.
Visualizzazione degli audit log della console seriale
Compute Engine fornisce audit log per tenere traccia degli utenti che si sono connessi e disconnessi dalla console seriale di un'istanza. Per visualizzare i log, devi disporre delle autorizzazioni per il visualizzatore log o essere un visualizzatore o un editor del progetto.
- Nella console Google Cloud, vai alla pagina Esplora log.
- Espandi il menu a discesa e seleziona Istanza VM GCE.
- Nella barra di ricerca, digita
ssh-serialport.googleapis.com
e premi Invio. Viene visualizzato un elenco di log di controllo. I log descrivono le connessioni e le disconnessioni da una console di serie. Espandi una delle voci per visualizzare ulteriori informazioni:
Per qualsiasi log di controllo puoi:
- Espandi la proprietà
protoPayload
. - Cerca
methodName
per visualizzare l'attività a cui si applica questo log (una richiesta di connessione o di disconnessione). Ad esempio, se questo log monitora una disconnessione dalla console seriale, il nome del metodo sarà"google.ssh-serialport.v1.disconnect"
. Analogamente, un log della connessione indica il valore"google.ssh-serialport.v1.connect"
. Una voce dell'audit log viene registrata all'inizio e alla fine di ogni sessione sulla console seriale.
Esistono proprietà di audit log diverse a seconda dei tipi di log. Ad esempio, gli audit log relativi alle connessioni hanno proprietà specifiche per i log delle connessioni, mentre gli audit log per le disconnessioni hanno un proprio set di proprietà. Inoltre, esistono alcune proprietà degli audit log che vengono condivise tra entrambi i tipi di log.
Tutti i log della console seriale
La tabella seguente fornisce le proprietà degli audit log e i relativi valori per tutti i log della console seriale:
Proprietà | Valore |
---|---|
requestMetadata.callerIp |
L'indirizzo IP e il numero di porta da cui ha avuto origine la connessione. |
serviceName |
ssh-serialport.googleapis.com |
resourceName |
Una stringa contenente l'ID progetto, la zona, il nome dell'istanza e il numero di porta seriale per indicare la console seriale di riferimento.
Ad esempio, projects/myproject/zones/us-east1-a/instances/example-instance/SerialPort/2 è il numero di porta 2, nota anche come COM2 o /dev/ttyS1, per l'istanza
example-instance .
|
resource.labels
| Proprietà che identificano l'ID istanza, la zona e l'ID progetto. |
timestamp |
Un timestamp che indica quando la sessione è iniziata o terminata. |
severity |
NOTICE |
operation.id |
Una stringa ID che identifica in modo univoco la sessione; puoi utilizzarla per associare una voce di disconnessione alla voce di connessione corrispondente. |
operation.producer |
ssh-serialport.googleapis.com |
Log delle connessioni
La seguente tabella fornisce le proprietà degli audit log e i relativi valori specifici per i log di connessione:
Proprietà | Valore |
---|---|
methodName |
google.ssh-serialport.v1.connect |
status.message |
Connection succeeded. |
request.serialConsoleOptions |
Qualsiasi opzione specificata con la richiesta, incluso il numero di porta seriale. |
request.@type |
type.googleapis.com/google.compute.SerialConsoleSessionBegin |
request.username |
Il nome utente specificato per questa richiesta. per selezionare la chiave pubblica da associare. |
operation.first |
TRUE |
status.code |
Per le richieste di connessione riuscite, un valore status.code pari a google.rpc.Code.OK indica che l'operazione è stata completata correttamente senza errori. Poiché il valore enum per questa proprietà è
0 , la proprietà status.code non viene visualizzata.
Tuttavia, qualsiasi codice che verifica un valore status.code pari a
google.rpc.Code.OK funzionerà come previsto. |
Log di disconnessione
La tabella seguente fornisce le proprietà degli audit log e i relativi valori specifici per i log di disconnessione:
Proprietà | Valore |
---|---|
methodName |
google.ssh-serialport.v1.disconnect |
response.duration |
La durata della sessione, in secondi, |
response.@type |
type.googleapis.com/google.compute.SerialConsoleSessionEnd |
operation.last |
TRUE |
Log delle connessioni non riuscite
Quando una connessione non va a buon fine, Compute Engine crea una voce di audit log. Un log di connessione non riuscita sembra molto simile a una voce di connessione riuscita, ma ha le seguenti proprietà che indicano una connessione non riuscita.
Proprietà | Valore |
---|---|
severity |
ERROR |
status.code |
Il codice di errore canonico dell'API di Google che descrive meglio l'errore. Di seguito sono riportati i possibili codici di errore che potrebbero essere visualizzati:
|
status.message |
Il messaggio leggibile per questa voce. |
Disabilitazione dell'accesso alla console seriale interattiva
Puoi disabilitare l'accesso interattivo alla console seriale modificando i metadati nell'istanza o nel progetto specifico oppure impostando un Criterio dell'organizzazione che disabilita l'accesso alla console seriale interattiva per tutte le istanze VM di uno o più progetti che fanno parte dell'organizzazione.
Disabilitazione della console seriale interattiva su un'istanza o un progetto specifici
I proprietari e gli editor del progetto, nonché gli utenti a cui è stato concesso il ruolo compute.instanceAdmin.v1
, possono disabilitare l'accesso alla console seriale modificando i metadati nell'istanza o nel progetto in questione. Analogamente all'abilitazione dell'accesso alla console seriale, imposta i metadati serial-port-enable
su FALSE
:
serial-port-enable=FALSE
Ad esempio, utilizzando Google Cloud CLI, puoi applicare questi metadati a un'istanza specifica in questo modo:
gcloud compute instances add-metadata instance-name \ --metadata=serial-port-enable=FALSE
Per applicare i metadati al progetto:
gcloud compute project-info add-metadata \ --metadata=serial-port-enable=FALSE
Disattivazione dell'accesso alla console seriale interattiva tramite il criterio dell'organizzazione
Se ti è stato concesso il ruolo orgpolicy.policyAdmin
nell'organizzazione, puoi impostare un criterio dell'organizzazione che impedisce l'accesso interattivo alla console seriale, indipendentemente dal fatto che l'accesso interattivo alla console seriale sia abilitato sul server dei metadati. Una volta impostato il criterio dell'organizzazione, questo sostituisce in modo efficace la chiave dei metadati serial-port-enable
e nessun utente dell'organizzazione o del progetto potrà abilitare l'accesso interattivo alla console seriale. Per impostazione predefinita, questo vincolo è impostato su FALSE
.
Il vincolo per disabilitare l'accesso alla console seriale interattiva è il seguente:
compute.disableSerialPortAccess
Completa le seguenti istruzioni per impostare questo criterio nell'organizzazione. Dopo aver configurato un criterio, puoi concedere esenzioni in base al singolo progetto.
gcloud
Per impostare il criterio utilizzando Google Cloud CLI, esegui il comando resource-manager enable-enforce
. Sostituisci
organization-id
con il tuo
ID organizzazione.
Ad esempio: 1759840282
.
gcloud resource-manager org-policies enable-enforce \ --organization organization-id compute.disableSerialPortAccess
REST
Per impostare un criterio nell'API, effettua una richiesta POST
al seguente URL.
Sostituisci organization-name
con il
nome dell'organizzazione.
Ad esempio: organizations/1759840282
.
POST https://cloudresourcemanager.googleapis.com/v1/organization-name:setOrgPolicy
Il corpo della richiesta deve contenere un oggetto policy
con il seguente
vincolo:
"constraint": "constraints/compute.disableSerialPortAccess"
Ad esempio:
{ "policy": { "booleanPolicy": { "enforced": TRUE }, "constraint": "constraints/compute.disableSerialPortAccess" } }
Il criterio viene applicato immediatamente, quindi tutti i progetti nell'organizzazione non consentono immediatamente l'accesso interattivo alla console seriale.
Per disattivare temporaneamente il criterio, usa il comando disable-enforce
:
gcloud resource-manager org-policies disable-enforce \ --organization organization-id compute.disableSerialPortAccess
In alternativa, puoi effettuare una richiesta API in cui il corpo della richiesta imposta il parametro enforced
su FALSE
:
{ "policy": { "booleanPolicy": { "enforced": FALSE }, "constraint": "constraints/compute.disableSerialPortAccess" } }
Impostazione del criterio dell'organizzazione a livello di progetto
Puoi impostare lo stesso criterio dell'organizzazione in base al singolo progetto. In questo modo viene eseguito l'override dell'impostazione a livello di organizzazione.
gcloud
Per disattivare l'applicazione di questo criterio per un progetto specifico. Sostituisci
project-id
con l'ID progetto.
gcloud resource-manager org-policies disable-enforce \ --project project-id compute.disableSerialPortAccess
Puoi attivare l'applicazione di questo criterio utilizzando il comando enable-enforce
con gli stessi valori.
REST
Nell'API, effettua una richiesta POST
al seguente URL per abilitare l'accesso interattivo alla console di serie per il progetto, sostituendo project-id
con l'ID progetto:
POST https://cloudresourcemanager.googleapis.com/v1/projects/project-id:setOrgPolicy
Il corpo della richiesta deve contenere un oggetto policy
con il seguente vincolo:
"constraint": "constraints/compute.disableSerialPortAccess"
Ad esempio:
{ "policy": { "booleanPolicy": { "enforced": FALSE }, "constraint": "constraints/compute.disableSerialPortAccess" } }
Suggerimenti utili
Se hai difficoltà a connetterti utilizzando un client SSH standard, ma
gcloud compute connect-to-serial-port
si connette correttamente, potrebbe essere utile eseguiregcloud compute connect-to-serial-port
con l'opzione della riga di comando--dry-run
per vedere il comando SSH che avrebbe eseguito per tuo conto e confrontare le opzioni con il comando in uso.Impostando la velocità in bit, nota anche come baud rate, puoi sceglierla come preferisci, ad esempio
stty 9600
, ma la funzionalità di solito forza la velocità effettiva a 115.200 bps (~11,5 kB/sec). Questo perché molte immagini pubbliche hanno velocità in bit lente per impostazione predefinita, ad esempio 9600 sulla console seriale, e si avviano lentamente.Alcune immagini del sistema operativo presentano valori predefiniti scomodi sulla porta seriale. Ad esempio, su CentOS 7, l'impostazione predefinita
stty icrnl
per il tasto Invio sulla console prevede l'invio di unCR
, noto anche come^M
. La shell bash potrebbe mascherare questa operazione fino a quando non provi a impostare una password, a quel punto potresti chiederti perché sembra bloccata al promptpassword:
.Alcune immagini pubbliche hanno chiavi di controllo dei job disattivate per impostazione predefinita se colleghi una shell a una porta in determinati modi. Alcuni esempi di queste chiavi includono
^Z
e^C
. Il comandosetsid
potrebbe risolvere il problema. In caso contrario, se viene visualizzato un messaggiojob control is disabled in this shell
, fai attenzione a non eseguire comandi che dovrai interrompere.Potrebbe essere utile comunicare al sistema le dimensioni della finestra in uso, in modo che bash ed editor possano gestirla correttamente. In caso contrario, potresti riscontrare comportamenti di visualizzazione strani perché bash o editor tentano di manipolare la visualizzazione in base a ipotesi errate sul numero di righe e colonne disponibili. Utilizza il comando
stty rows Y cols X
e il flagstty -a
per vedere l'impostazione. Ad esempio:stty rows 60 cols 120
(se la finestra è di 120 caratteri per 60 righe).Se, ad esempio, ti connetti tramite SSH dalla macchina A alla macchina B e poi alla macchina C e così via, creando una sessione SSH nidificata, e vuoi utilizzare i comandi tilde (~) per disconnettere o inviare un segnale di interruzione seriale, dovrai aggiungere abbastanza caratteri tilde in più al comando per accedere al client SSH giusto. Un comando che segue una singola tilde viene interpretato dal client SSH sulla macchina A; un comando che segue due tilde consecutive (Invio~~) viene interpretato dal client sulla macchina B e così via. Devi premere Invio una sola volta perché questo viene inviato fino alla destinazione SSH più interna. Ciò vale per qualsiasi utilizzo di client SSH che forniscono la funzionalità di escape tilde.
Se perdi traccia del numero di caratteri tilde necessari, premi il tasto Invio e digita uno alla volta i caratteri tilde finché l'istanza non ripete la tilde. L'eco indica che hai raggiunto la fine della catena e sai che per inviare un comando tilde al client SSH più nidificato, è necessaria una tilde in meno rispetto al numero di tilde che hai digitato.
Opzioni avanzate
Controllo del numero massimo di connessioni
Puoi impostare la proprietà max-connections
per controllare il numero di connessioni simultanee che possono essere effettuate su questa porta seriale contemporaneamente. Il numero predefinito e massimo di connessioni è 5. Ad esempio:
gcloud compute connect-to-serial-port instance-name \ --port port-number \ --extra-args max-connections=3
ssh -i private-ssh-key-file -p 9600 project-id.zone.instance-name.username.max-connections=3@ssh-serialport.googleapis.com
Impostazione delle opzioni di riproduzione
Per impostazione predefinita, ogni volta che ti connetti alla console seriale, riceverai una riproduzione delle ultime 10 righe di dati, indipendentemente dal fatto che le ultime 10 righe siano state visualizzate da un altro client SSH. Puoi modificare questa impostazione e controllare quante e quali righe vengono restituite impostando le seguenti opzioni:
replay-lines=N
: impostaN
sul numero di righe che vuoi riascoltare. Ad esempio, seN
è 50, sono incluse le ultime 50 righe dell'output della console.replay-bytes=N
: ripeti iN
byte più recenti. Puoi anche impostareN
sunew
, che riproduce tutti gli output non ancora inviati ad alcun client.replay-from=N
: riproduce l'output a partire da un indice di byte assoluto da te fornito. Puoi ottenere l'indice di byte corrente dell'output della console seriale effettuando una richiestagetSerialPortOutput
. Se impostireplay-from
, tutte le altre opzioni di riproduzione vengono ignorate.
Con Google Cloud CLI, aggiungi quanto segue al comando connect-to-serial-port
, dove N
è il numero specificato di righe (o byte o indice di byte assoluto, a seconda dell'opzione di riproduzione selezionata):
--extra-args replay-lines=N
Se utilizzi un client SSH di terze parti, specifica questa opzione nel comando SSH:
ssh -i private-ssh-key-file -p 9600 myproject.us-central1-f.example-instance.jane.port=3.replay-lines=N@ssh-serialport.googleapis.com
Puoi anche utilizzare una combinazione di queste opzioni. Ad esempio:
replay-lines=N
ereplay-bytes=new
- Riproduci il numero specificato di righe OPPURE ripeti tutto l'output non inviato in precedenza a nessun client, a seconda di quale sia il numero maggiore. Il primo client che si connette con questa combinazione di flag vedrà tutto l'output inviato alla porta seriale, mentre i client che si connettono successivamente vedranno solo le ultime
N
righe. Esempi:
gcloud compute connect-to-serial-port instance-name--port port-number --extra-args replay-lines=N,replay-bytes=new
ssh -i private-ssh-key-file -p 9600 project-id.zone.instance-name.username.replay-lines=N.replay-bytes=new@ssh-serialport.googleapis.com
replay-lines=N
ereplay-bytes=M
- Riproduci righe fino al, ma non superiore, al numero di righe o byte descritti da questi flag, a seconda di quale sia inferiore. Questa opzione non ripeterà più di
N
oM
byte.
gcloud compute connect-to-serial-port instance-name--port port-number --extra-args replay-lines=N,replay-bytes=M
ssh -i private-ssh-key-file -p 9600 project-id.zone.instance-name.username.replay-lines=N.replay-bytes=M@ssh-serialport.googleapis.com
Gestione degli output ignorati
L'output di 1 MiB più recente per ogni porta seriale è sempre disponibile. Generalmente, il client SSH non deve perdere alcun output della porta seriale.
Se, per qualche motivo, il client SSH smette di accettare l'output per un determinato periodo di tempo ma non si disconnette e viene generato più di 1 MiB di nuovi dati, il client SSH potrebbe perdere alcuni output. Quando il client SSH non accetta dati abbastanza velocemente da stare al passo con l'output sulla porta della console seriale, puoi impostare la proprietà on-dropped-output
per determinare il comportamento della console.
Imposta una delle seguenti opzioni applicabili con questa proprietà:
insert-stderr-note
: inserisci una nota nellastderr
del client SSH per indicare che l'output è stato eliminato. Questa è l'opzione predefinita.ignore
: interrompe silenziosamente l'output e non fa nulla.disconnect
: interrompi la connessione.
Ad esempio:
gcloud compute connect-to-serial-port instance-name \ --port port-number \ --extra-args on-dropped-output=ignore
ssh -i private-ssh-key-file -p 9600 project-id.zone.instance-name.username.on-dropped-output=ignore@ssh-serialport.googleapis.com
Attivazione della disconnessione mediante i comandi di uscita o di disconnessione
Puoi attivare la disconnessione dai comandi di uscita o di disconnessione impostando la proprietà on-dtr-low
su disconnect
quando ti connetti alla console seriale.
In Google Cloud CLI, aggiungi il seguente flag al tuo comando connect-to-serial-port
:
--extra-args on-dtr-low=disconnect
Se utilizzi un client SSH di terze parti, specifica questa opzione nel comando SSH:
ssh -i private-ssh-key-file -p 9600 myproject.us-central1-f.example-instance.jane.port=3.on-dtr-low=disconnect@ssh-serialport.googleapis.com
L'abilitazione dell'opzione disconnect
potrebbe causare la disconnessione dell'istanza una o più volte al riavvio dell'istanza, perché il sistema operativo reimposta le porte seriali durante l'avvio.
L'impostazione predefinita per l'opzione on-dtr-low
è none
. Se utilizzi l'impostazione predefinita none
, puoi riavviare l'istanza senza disconnetterti dalla console seriale, ma quest'ultima non si disconnetterà tramite metodi normali come i comandi exit
o logout
o normali combinazioni di tasti come Ctrl + D.
Passaggi successivi
- Scopri di più sull'API
getSerialPortOutput
. - Scopri come conservare e visualizzare l'output della porta seriale anche dopo l'eliminazione di un'istanza VM.
- Leggi altri suggerimenti per la risoluzione dei problemi.
- Scopri di più sull'applicazione dei metadati.
- Scopri di più sulle chiavi SSH.