Diese Seite gibt eine Anleitung zum Einrichten eines interaktiven Zugriffs auf die serielle Konsole einer Instanz zum Beheben von Start- und Netzwerkproblemen, Korrigieren von Instanzen mit Fehlfunktionen, zur Interaktion mit dem GRand Unified Bootloader (GRUB) und für die Behebung von anderen Fehlern.
Die Instanz einer virtuellen Maschine (VM) hat vier virtuelle serielle Ports. Die Interaktion mit einer seriellen Schnittstelle ähnelt der Verwendung eines Terminalfensters dahingehend, dass die Ein- und Ausgabe vollständig im Textmodus erfolgt und keine grafische Benutzeroberfläche oder Maus-Unterstützung vorhanden ist. Das Betriebssystem, das BIOS und andere Einheiten auf Systemebene der Instanz senden Ausgabeaufforderungen häufig an die seriellen Schnittstellen und können Eingaben wie Befehle oder Antworten auf Aufforderungen annehmen. Üblicherweise verwenden diese Funktionen auf Systemebene die erste serielle Schnittstelle (Port 1), die häufig als serielle Konsole bezeichnet wird.
Wenn Sie nur die Ausgabe des seriellen Ports benötigen, ohne dass Sie Befehle an die serielle Konsole senden wollen, können Sie durch Aufruf der Methode getSerialPortOutput
oder mithilfe von Cloud Logging die Informationen lesen, die Ihre Instanz an den seriellen Port gesendet hat. Siehe Ausgabe des seriellen Ports ansehen.
Wenn Sie jedoch Probleme haben, auf Ihre Instanz über SSH zuzugreifen oder Fehler an einer Instanz beheben müssen, die nicht vollständig gestartet wurde, können Sie den interaktiven Zugriff auf die serielle Konsole aktivieren, die Ihnen eine Verbindung zu den seriellen Ports Ihrer Instanz ermöglicht, sodass Sie mit diesen interagieren können. Sie können zum Beispiel direkt Befehle ausführen und auf Aufforderungen in der seriellen Schnittstelle reagieren.
Wenn Sie den seriellen Port aktivieren oder deaktivieren, können Sie einen beliebigen booleschen Wert verwenden, der vom Metadatenserver akzeptiert wird. Weitere Informationen finden Sie unter Boolesche Werte festlegen.
Hinweise
-
Richten Sie die Authentifizierung ein, falls Sie dies noch nicht getan haben.
Bei der Authentifizierung wird Ihre Identität für den Zugriff auf Google Cloud-Dienste und APIs überprüft.
Zur Ausführung von Code oder Beispielen aus einer lokalen Entwicklungsumgebung können Sie sich so bei Compute Engine authentifizieren.
Select the tab for how you plan to use the samples on this page:
Console
When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
gcloud
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
- Rufen Sie in der Google Cloud Console die Seite Metadaten auf.
- Klicken Sie auf Bearbeiten, um Metadateneinträge zu bearbeiten.
- Fügen Sie einen neuen Eintrag hinzu, der den Schlüssel serial-port-enable mit dem Wert TRUE verwendet.
- Speichern Sie die Änderungen.
- Rufen Sie in der Google Cloud Console die Seite VM-Instanzen auf.
- Klicken Sie auf die Instanz, für die Sie den Zugriff aktivieren möchten.
- Klicken Sie auf Bearbeiten.
- Klicken Sie im Bereich Remotezugriff auf das Kästchen Verbindung mit seriellen Ports aktivieren.
- Speichern Sie die Änderungen.
- Rufen Sie in der Google Cloud Console die Seite VM-Instanzen auf.
- Klicken Sie auf die Instanz, zu der Sie eine Verbindung herstellen möchten.
- Klicken Sie unter Remotezugriff auf die Schaltfläche Mit serieller Konsole verbinden, um sich mit dem Standardport (Port 1) zu verbinden.
- Wenn Sie eine Verbindung zu einem anderen seriellen Port herstellen möchten, klicken Sie auf den Abwärtspfeil neben der Schaltfläche Mit serieller Konsole verbinden und ändern Sie die Portnummer entsprechend.
- Bei Windows-Instanzen öffnen Sie das Drop-down-Menü neben der Schaltfläche und stellen eine Verbindung zu Port 2 her, um auf die serielle Konsole zuzugreifen.
Empfohlen: Wenn Sie eine Verbindung zur regionalen seriellen Konsole einer VM herstellen möchten, verwenden Sie den Befehl
gcloud compute connect-to-serial-port
und fügen Sie das Flag--location
ein:gcloud compute connect-to-serial-port VM_NAME \ --location=REGION \ --port=PORT_NUMBER
Wenn Sie eine Verbindung zur globalen seriellen Konsole einer VM herstellen möchten, verwenden Sie den Befehl
gcloud compute connect-to-serial-port
und lassen das Flag--location
weg:gcloud compute connect-to-serial-port VM_NAME \ --port=PORT_NUMBER
VM_NAME
: Name der VM, zu deren serielle Konsole Sie eine Verbindung herstellen möchten.REGION
: Region der VM, zu deren serieller Konsole Sie eine Verbindung herstellen möchten.PORT_NUMBER
: Portnummer, die Sie verbinden möchten. Verwenden Sie für Linux-VMs1
und für Windows-VMs2
. Weitere Informationen zu Portnummern finden Sie in der Erläuterung der Nummerierung serieller Ports.project-id
: Projekt-ID für diese Instanzzone
: Zone der Instanzinstance-name
: Name der Instanzusername
: Nutzername, den Sie zum Herstellen einer Verbindung zu Ihrer Instanz verwenden. Normalerweise ist dies der Benutzername auf dem lokalen Rechner.options
: Zusätzliche Optionen, die Sie für diese Verbindung angeben können. Sie können beispielsweise einen bestimmten seriellen Port und eine beliebige erweiterte Option angeben. Es kann eine Portnummer von 1 bis einschließlich 4 angegeben werden. Weitere Informationen zu Portnummern finden Sie in der Erläuterung der Nummerierung serieller Ports. Ist keine Nummer angegeben, wird eine Verbindung zum seriellen Port 1 hergestellt.- Laden Sie den SSH-Schlüssel des Serial Port Servers von Google herunter.
- Öffnen Sie die Datei Ihnen bekannter Hosts, die sich in der Regel unter
~/.ssh/known_hosts
befindet. Fügen Sie den Inhalt des Server-SSH-Schlüssels mit
ssh-serialport.googleapis.com
vor dem Schlüssel ein. Wenn der Serverschlüssel beispielsweise die Zeilessh-rsa AAAAB3NzaC1yc...
enthält, sollte~/.ssh/known_hosts
eine Zeile wie diese haben:ssh-serialport.googleapis.com ssh-rsa AAAAB3NzaC1yc...
- Drücken Sie die Taste
ENTER
. - Geben Sie "
~.
" ein (Tilde gefolgt von einem Punkt). Die Tastenkombination
CTRL+ALT+DELETE
oder eine ähnliche Kombination. Dies funktioniert nicht, da die serielle Konsole keine Tastenkombinationen der PC-Tastatur erkennt.Der Befehl
exit
oderlogout
funktioniert nicht, da der Gast keine Netzwerk- oder Modemverbindungen kennt. Dieser Befehl bewirkt, dass die Konsole geschlossen und dann wieder neu geöffnet wird, während Sie mit der Sitzung verbunden bleiben. Wenn Sie die Befehleexit
undlogout
für Ihre Sitzung aktivieren möchten, legen Sie die Optionon-dtr-low
fest.Rufen Sie in der Google Cloud Console die Seite VM-Instanzen auf.
Wählen Sie die VM aus, für die Sie das lokale Passwort hinzufügen möchten.
Klicken Sie auf Bearbeiten.
Linux
Gehen Sie zu Metadaten > Automatisierung.
Wenn die VM bereits ein Startskript hat, kopieren Sie es und fügen Sie es an einem sicheren Ort ein.
Fügen Sie das folgende Startskript hinzu:
#!/bin/bash useradd USERNAME echo USERNAME:PASSWORD | chpasswd usermod -aG google-sudoers USERNAME
Dabei gilt:
- USERNAME: Nutzername, den Sie hinzufügen möchten
- PASSWORD: Passwort für den Nutzernamen Vermeiden Sie einfache Passwörter, da einige Betriebssysteme möglicherweise eine minimale Passwortlänge und Komplexität erfordern.
Windows
- Wechseln Sie zum Abschnitt Benutzerdefinierte Metadaten.
- Wenn die VM ein vorhandenes Startskript hat, kopieren Sie es und fügen Sie es an einem sicheren Ort ein.
- Klicken Sie auf Zeile hinzufügen.
- Geben Sie im Feld Schlüssel
windows-startup-script-cmd
ein. Geben Sie im Feld Wert folgendes Skript ein:
net user USERNAME PASSWORD /ADD /Y net localgroup administrators USERNAME /ADD
Dabei gilt:
- USERNAME: Nutzername, den Sie hinzufügen möchten
- PASSWORD: Passwort für den Nutzernamen
Klicken Sie auf Speichern.
Klicken Sie auf Zurücksetzen, um die VM neu zu starten. Weitere Informationen finden Sie unter VM zurücksetzen.
Geben Sie Ihre Anmeldedaten ein, wenn Sie dazu aufgefordert werden.
Entfernen Sie das Startskript vom VM nach dem Erstellen des Nutzers.
Stellen Sie eine Verbindung zur VM her. Ersetzen Sie
instance-name
durch den Namen Ihrer Instanz.gcloud compute ssh instance-name
Erstellen Sie auf der VM ein lokales Passwort mit dem folgenden Befehl. Dadurch wird ein Passwort für den Nutzer erstellt, als der Sie gerade angemeldet sind.
sudo passwd $(whoami)
Folgen Sie den Anweisungen, um ein Passwort zu erstellen.
Melden Sie sich anschließend von der Instanz ab und stellen Sie eine Verbindung zur seriellen Konsole her.
Geben Sie Ihre Anmeldedaten ein, wenn Sie dazu aufgefordert werden.
Vorübergehende Aktivierung des Dienstes bis zum nächsten Neustart:
sudo systemctl start serial-getty@ttyS1.service
Aktivieren des Dienstes permanent ab dem nächsten Neustart:
sudo systemctl enable serial-getty@ttyS1.service
Erstellen Sie eine neue Datei
/etc/init/ttyS1.conf
zur Darstellung vonttyS1
. Dazu kopieren und bearbeiten Sie eine vorhandenettyS0.conf
-Datei. Beispiel:Unter Ubuntu 14.04:
sudo sh -c "sed -e s/ttyS0/ttyS1/g < /etc/init/ttyS0.conf > /etc/init/ttyS1.conf"
Unter RHEL 6.8 und 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"
Mit einer Anmeldeaufforderung auf
ttyS1
ohne Neustart starten:sudo start ttyS1
- Drücken Sie die Taste
ENTER
. - Geben Sie
~B
ein (Tilde, gefolgt vom GroßbuchstabenB
). - Geben Sie den Systemabfrage-Befehl ein.
- Rufen Sie in der Google Cloud Console die Seite Logs-Explorer auf.
- Erweitern Sie das Drop-down-Menü und wählen Sie GCE VM Instance.
- Geben Sie in die Suchleiste
ssh-serialport.googleapis.com
ein und drücken Sie die Eingabetaste. Eine Liste der Audit-Logs wird angezeigt. In den Logs sind die Verbindungen zur seriellen Konsole aufgeführt, die hergestellt und getrennt wurden. Sie können jeden der Einträge erweitern, um zusätzliche Informationen zu erhalten:
- Maximieren Sie das Attribut
protoPayload
. - Unter
methodName
finden Sie die Aktivität, auf die sich dieses Log bezieht (entweder eine Anfrage zum Herstellen oder zum Trennen einer Verbindung). Wenn dieses Log beispielsweise das Trennen der Verbindung zur seriellen Konsole aufzeichnet, würde die Methode den Namen"google.ssh-serialport.v1.disconnect"
tragen. Dementsprechend würde ein Log hergestellter Verbindungen"google.ssh-serialport.v1.connect"
heißen. Ein Audit-Log-Eintrag wird jeweils am Anfang und am Ende jeder Sitzung auf der seriellen Konsole vorgenommen. google.rpc.Code.INVALID_ARGUMENT
: Die Verbindung ist fehlgeschlagen, weil der Client eine ungültige Portnummer zur Verfügung gestellt oder versucht hat, einen unbekannten Kanal zu erreichen. Siehe dazu die Liste der gültigen Portnummern.google.rpc.Code.PERMISSION_DENIED
: Sie haben die interaktive serielle Konsole nicht auf dem Metadaten-Server aktiviert. Weitere Informationen finden Sie unter: Interaktiven Zugriff auf die serielle Konsole aktivieren.google.rpcCode.UNAUTHENTICATED
: Es wurden keine oder keine passenden SSH-Schlüssel für diese Instanz gefunden. Vergewissern Sie sich, dass Sie auf der VM-Instanz authentifiziert sind.google.rpc.Code.UNKNOWN
: Bei Ihrer Anfrage ist ein unbekannter Fehler aufgetreten. Sie können sich diesbezüglich über die Gruppe "gce-discussion" an Google wenden oder einen Fehlerbericht einreichen.Wenn bei der Verbindung über einen Standard-SSH-Client Probleme auftreten, aber eine Verbindung über
gcloud compute connect-to-serial-port
erfolgreich ist, kann es hilfreich sein,gcloud compute connect-to-serial-port
mit der Befehlszeilenoption--dry-run
auszuführen, um den SSH-Befehl zu sehen, den er für Sie ausgeführt hätte, und die Optionen mit den Befehlen zu vergleichen, die Sie verwenden.Festlegen der Bitrate, auch Baudrate genannt: Sie können eine beliebige Bitrate nach Ihren Wünschen festlegen, etwa
stty 9600
, aber die Funktion erzwingt normalerweise eine effektive Rate von 115.200 bps (rund 11,5 kB/s). Das liegt daran, dass viele öffentliche Images standardmäßig niedrige Bitraten von z. B. 9.600 auf der seriellen Konsole verwenden und nur langsam starten würden.Einige Betriebssystem-Images verwenden ungünstige Standardwerte am seriellen Port. Unter CentOS 7 lautet der Standardwert
stty icrnl
für die Eingabetaste in der Konsole zum Beispiel:CR
, auch^M
. Eventuell maskiert die Bash-Shell dies, bis Sie versuchen, ein Passwort festzulegen und sich fragen, warum bei der Eingabeaufforderungpassword:
keine Reaktion mehr erfolgt.Bei einigen öffentlichen Images sind manche Job-Steuertasten standardmäßig deaktiviert, wenn Sie eine Shell auf eine bestimmte Art mit einem Port verknüpfen. Zu diesen Tasten gehören beispielsweise
^Z
und^C
. Mit dem Befehlsetsid
lässt sich dies eventuell beheben. Andernfalls müssen Sie, wenn die Meldungjob control is disabled in this shell
angezeigt wird, darauf achten, dass keine Befehle ausgeführt werden, die Sie gegebenenfalls unterbrechen müssten.Es kann hilfreich sein, dem System die Größe des verwendeten Fensters mitzuteilen, damit Bash und Bearbeitungsprogramme es richtig verwalten können. Andernfalls kann es zu ungewöhnlichem Anzeigeverhalten kommen, da Bash oder Bearbeitungsprogramme versuchen, die Anzeige aufgrund von falschen Annahmen bezüglich der Anzahl verfügbarer Zeilen und Spalten anzupassen. Verwenden Sie den Befehl
stty rows Y cols X
und das Flagstty -a
, um die Einstellung zu sehen. Beispiel:stty rows 60 cols 120
, wenn Ihr Fenster 120 Zeichen in 60 Zeilen enthält.Wenn Sie beispielsweise über SSH den Computer A mit Computer B und weiter mit Computer C verbinden, eine verschachtelte SSH-Sitzung erstellen und Tilde-Befehle (~) verwenden, um die Verbindung zu trennen oder ein serielles Unterbrechungssignal zu senden, müssen Sie genügend zusätzliche Tildezeichen zum Befehl hinzufügen, um den richtigen SSH-Client zu erreichen. Einen Befehl hinter einem einzelnen Tildezeichen bezieht der SSH-Client auf Computer A. Ein Befehl, der zwei aufeinanderfolgenden Tilden folgt (~~), wird vom Client auf Computer B ausgeführt usw. Sie müssen die Eingabetaste nur einmal drücken, da sie bis zum innersten SSH-Ziel weitergeleitet wird. Dies gilt für jede Verwendung von SSH-Clients, die die Maskierungsfunktion über die Tilde realisieren.
Wenn Sie nicht mehr genau wissen, wie viele Tildezeichen Sie benötigen, drücken Sie die Eingabetaste und geben Sie dann Tildezeichen einzeln ein, bis die Instanz die Tilde zurückgibt. Dies gibt an, dass Sie das Ende der Kette erreicht haben und Sie wissen, dass Sie zum Erreichen des am tiefsten verschachtelten SSH-Clients mit dem Tildebefehl ein Tildezeichen weniger eingeben müssen, als Sie gerade eben eingegeben haben.
replay-lines=N
: Legen Sie fürN
die Anzahl der Zeilen fest, die ausgegeben werden soll. Wird zum Beispiel fürN
50 angegeben, werden die letzten 50 Zeilen der Konsolenausgabe ausgegeben.replay-bytes=N
: Gibt die letztenN
Byte noch einmal aus. Sie könnenN
auch aufnew
setzen, sodass alle Daten nochmal ausgegeben werden, die noch an keinen Client gesendet wurden.replay-from=N
: Startet eine neue Ausgabe von einem von Ihnen angegebenen absoluten Byteindex ausgehend. Sie können den aktuellen Byteindex der Ausgabe der seriellen Konsole mit der AnfragegetSerialPortOutput
abrufen. Wenn Siereplay-from
festlegen, werden alle anderen Wiedergabeoptionen ignoriert.replay-lines=N
undreplay-bytes=new
- Gibt die angegebene Anzahl von Zeilen wieder aus ODER gibt alle Daten aus, die noch an keinen Client gesendet wurden, je nachdem, welcher Wert größer ist. Der erste Client, der eine Verbindung mit dieser Flag-Kombination herstellt, sieht die gesamten Daten, die an die serielle Schnittstelle gesendet wurden. Alle Clients, die danach eine Verbindung herstellen, sehen nur die letzten
N
-Zeilen. Beispiele: replay-lines=N
undreplay-bytes=M
- Gibt die Zeilen bis zur genauen Anzahl von Zeilen oder Byte an, die durch diese Flags beschrieben werden, je nachdem, welcher Wert niedriger ist. Mit dieser Option werden nicht mehr als
N
oderM
Byte nochmal ausgegeben. insert-stderr-note
: Hinterlegt eine Notiz auf demstderr
des SSH-Clients, die darauf hinweist, dass die Ausgabedaten verworfen wurden. Dies ist die Standardoption.ignore
: Verwirft die Ausgabedaten im Hintergrund ohne weitere Aktion.disconnect
: Die Verbindung beenden.- Weitere Informationen zur
getSerialPortOutput
API - Mehr über das Beibehalten und Anzeigen der Ausgabe des seriellen Ports in Stackdriver erfahren, auch nachdem eine VM-Instanz gelöscht wurde
- Weitere Tipps zur Fehlerbehebung lesen
- Mehr über die Anwendung von Metadaten erfahren
- Informationen zu SSH-Schlüsseln
REST
Verwenden Sie die von der gcloud CLI bereitgestellten Anmeldedaten, um die REST API-Beispiele auf dieser Seite in einer lokalen Entwicklungsumgebung zu verwenden.
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
Weitere Informationen finden Sie unter Für die Verwendung von REST authentifizieren in der Dokumentation zur Google Cloud-Authentifizierung.
Interaktiven Zugriff auf die serielle Konsole aktivieren
Aktivieren Sie den interaktiven Zugriff auf die serielle Konsole für einzelne VM-Instanzen oder für ein ganzes Projekt.
Zugriff für ein Projekt aktivieren
Durch Aktivieren des interaktiven Zugriffs auf die serielle Konsole in einem Projekt wird der Zugriff für alle VM-Instanzen ermöglicht, die Teil dieses Projekts sind.
Standardmäßig ist der Zugriff auf interaktive serielle Ports deaktiviert. Sie können ihn auch explizit deaktivieren. Dazu setzen Sie den Parameter
serial-port-enable
aufFALSE
. In jedem Fall überschreibt jede Einstellung pro Instanz die Einstellung auf Projektebene oder die Standardeinstellung.Console
gcloud
Geben Sie über die Google Cloud CLI den Befehl
project-info add-metadata
so ein:gcloud compute project-info add-metadata \ --metadata serial-port-enable=TRUE
REST
Senden Sie in der API eine Anfrage an die Methode
projects().setCommonInstanceMetadata
und geben Sie für den Schlüsselserial-port-enable
den WertTRUE
an:{ "fingerprint": "FikclA7UBC0=", "items": [ { "key": "serial-port-enable", "value": "TRUE" } ] }
Zugriff für eine VM-Instanz aktivieren
Aktivieren Sie den interaktiven seriellen Konsolenzugriff für eine bestimmte Instanz. Eine Einstellung pro Instanz überschreibt, sofern vorhanden, alle Einstellungen auf Projektebene. Sie können den Zugriff für eine bestimmte Instanz auch dann deaktivieren, wenn der Zugriff auf Projektebene aktiviert ist, indem Sie
serial-port-enable
aufFALSE
statt aufTRUE
setzen. Entsprechend können Sie den Zugriff für eine oder mehrere Instanzen aktivieren, auch wenn dieser explizit oder standardmäßig für das Projekt deaktiviert ist.Console
gcloud
Geben Sie über die Google Cloud CLI den Befehl
instances add-metadata
ein. Ersetzen Sie dabeiinstance-name
durch den Namen der Instanz.gcloud compute instances add-metadata instance-name \ --metadata serial-port-enable=TRUE
REST
Senden Sie in der API eine Anfrage an die Methode
instances().setMetadata
mit dem Schlüsselserial-port-enable
und dem WertTRUE
: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" } ] }
Verbindung zu einer seriellen Konsole herstellen
Nach der Aktivierung des interaktiven Zugriffs auf die serielle Konsole einer Instanz können Sie eine Verbindung zur seriellen Konsole herstellen.
Compute Engine bietet für jede Google Cloud-Region ein globales Gateway der seriellen Konsole und regionale Gateways der seriellen Konsole. Sie können über ein globales oder regionales Gateway eine Verbindung zur seriellen Konsole einer VM herstellen. Für eine bessere Zuverlässigkeit empfehlen wir jedoch das regionale Gateway.
Wenn Sie über die Google Cloud Console eine Verbindung zur seriellen Konsole herstellen, wird automatisch eine Verbindung zur regionalen seriellen Konsole hergestellt. Wenn Sie das Google Cloud CLI verwenden, können Sie zwischen dem regionalen oder globalen Gateway wählen. Verbindungen über andere SSH-Clients unterstützen nur das globale Gateway.
Die serielle Konsole authentifiziert Nutzer mit SSH-Schlüsseln. Genauer gesagt, müssen Sie Ihren öffentlichen SSH-Schlüssel den Projekt- oder Instanz-Metadaten hinzufügen und Ihren privaten Schlüssel auf dem lokalen Computer speichern, von dem aus Sie eine Verbindung herstellen möchten. Die gcloud CLI und die Google Cloud Console fügen dem Projekt automatisch SSH-Schlüssel hinzu. Wenn Sie einen Drittanbieter-Client verwenden, müssen Sie den SSH-Schlüssel manuell hinzufügen.
Console
So stellen Sie eine Verbindung zur regionalen seriellen Konsole einer VM her:
gcloud
Verwenden Sie einen der folgenden Befehle, um eine Verbindung zur regionalen oder globalen seriellen Konsole einer VM herzustellen:
Ersetzen Sie Folgendes:
Andere SSH-Clients
Zur Verbindung mit der seriellen Konsole einer Instanz können Sie auch einen SSH-Client eines Drittanbieters verwenden, wenn dieser eine Verbindung zum TCP-Port 9600 ermöglicht.
Mit dem folgenden SSH-Befehl kann beispielsweise eine Verbindung zum standardmäßigen seriellen Port (1) einer Instanz namens
example-instance
mit dem Nutzernamenjane
in einem Projekt mit der Projekt-IDmyproject
hergestellt werden. Die Instanz befindet sich in der Zoneus-central1-f
: Ersetzen Sieprivate-ssh-key-file
durch die private SSH-Schlüsseldatei für die Instanz.ssh -i private-ssh-key-file -p 9600 myproject.us-central1-f.example-instance.jane@ssh-serialport.googleapis.com
Im Einzelnen können Sie mit der seriellen Konsole einer Instanz mit folgendem Benutzernamen und folgenden Adressinformationen eine Verbindung herstellen:
project-id.zone.instance-name.username.options@ssh-serialport.googleapis.com
Dabei gilt:
Wenn Sie eine Verbindung zu einer Windows-VM-Instanz herstellen, müssen Sie Port 2 ansteuern:
ssh -i private-ssh-key-file -p 9600 project-id.zone.instance-name.username.port=2@ssh-serialport.googleapis.com
Sollten beim Verbindungsaufbau über den SSH-Client eines Drittanbieters Probleme auftreten, können Sie den Befehl
gcloud compute connect-to-serial-port
mit der Befehlszeilenoption--dry-run
ausführen. So sehen Sie den SSH-Befehl, den der Client in Ihrem Namen ausgeführt hätte. Anschließend können Sie die Optionen mit dem von Ihnen verwendeten Befehl vergleichen.Eine sichere Verbindung einrichten
Wenn Sie statt der Google Cloud CLI den SSH-Client eines Drittanbieters verwenden, können Sie sich vor Identitätsdiebstahl oder Man-in-the-Middle-Angriffen schützen, indem Sie den SSH-Schlüssel des seriellen Port-Servers von Google prüfen. Mit den folgenden Schritten richten Sie Ihr System so ein, dass der SSH-Schlüssel des Servers überprüft wird:
Aus Sicherheitsgründen kann Google gelegentlich den SSH-Schlüssel des seriellen Port-Servers ändern. Wenn im Client die Server-Schlüssel-Authentifizierung fehlschlägt, brechen Sie den Verbindungsversuch unverzüglich ab und folgen Sie der vorstehenden Anleitung, um den neuen SSH-Schlüssel des seriellen Port-Servers von Google herunterzuladen.
Wenn Sie auch nach der Aktualisierung des Host-Schlüssels weiterhin einen Host-Authentifizierungsfehler von Ihrem Client erhalten, unternehmen Sie keine weiteren Verbindungsversuche zum seriellen Port und wenden Sie sich an den Google-Support. Senden Sie keine Anmeldedaten über eine Verbindung, für die die Host-Authentifizierung fehlgeschlagen ist.
Verbindung zur seriellen Konsole aufheben
Anleitung zum Aufheben der Verbindung zur seriellen Konsole:
Sie können weitere Befehle anzeigen lassen, indem Sie
~?
eingeben oder auf der SSH-Manpage nachsehen:man ssh
Versuchen Sie nicht, die Verbindung mit einer der folgenden Methoden aufzuheben:
Verbindung zu einer seriellen Konsole mit einer Anmeldeaufforderung herstellen
Wenn Sie ein Problem mit einer VM beheben möchten, die vollständig gestartet wurde, oder versuchen, ein Problem zu beheben, das erst nach dem Starten der VM über den Einzelnutzermodus hinaus auftritt, können Sie beim Zugriff auf die serielle Konsole zur Eingabe von Anmeldeinformationen aufgefordert werden.
Von Google bereitgestellte Linux-System-Images sind standardmäßig so konfiguriert, dass sie eine passwortbasierte Anmeldung für lokale Nutzer nicht zulassen. Von Google bereitgestellte Windows-Images sind jedoch so konfiguriert, dass sie die passwortbasierte Anmeldung für lokale Nutzer zulassen.
Wird auf Ihrer VM ein Image mit vorkonfigurierten Anmeldekonten für serielle Ports ausgeführt, ist die Einrichtung eines lokalen Passworts auf der VM erforderlich, damit Sie sich bei Aufforderung in der seriellen Konsole anmelden können. Sie können ein lokales Passwort einrichten, nachdem Sie eine Verbindung zur VM hergestellt haben, oder indem Sie ein Startskript verwenden.
Lokales Passwort mit einem Startskript einrichten
Sie können ein Startskript verwenden, um ein lokales Passwort einzurichten, mit dem Sie während oder nach der VM-Erstellung eine Verbindung zur seriellen Konsole herstellen können.
In der folgenden Anleitung wird beschrieben, wie Sie ein lokales Passwort nach dem Erstellen einer VM einrichten.
Lokales Passwort mit
passwd
auf der VM einrichtenNachstehend wird beschrieben, wie Sie für einen Nutzer ein lokales Passwort auf einer VM einrichten, damit sich dieser Nutzer mit diesem Passwort bei der seriellen Konsole dieser VM anmelden kann.
Anmeldekonto an einem seriellen Port erstellen
Auf den meisten Linux-Systemen ist eine Anmeldeaufforderung standardmäßig auf Port 1 aktiviert. Allerdings kann Port 1 oft durch die Protokollierung von Daten und anderen Informationen, die an den Port ausgegeben werden, überfordert sein. Stattdessen können Sie die Anmeldeaufforderung an einem anderen Port, z. B. Port 2 (ttyS1), aktivieren. Führen Sie dazu auf Ihrer VM einen der folgenden Befehle aus. Eine Liste der verfügbaren Ports einer VM finden Sie unter Erläuterung der Nummerierung serieller Ports.
Die folgende Tabelle listet Images auf, die mit einer Anmeldeaufforderung an der seriellen Konsole vorkonfiguriert sind, sowie die entsprechenden Standard-Ports.
Betriebssystem Port(s) mit standardmäßiger Anmeldeaufforderung Dienstverwaltung 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
OpenSUSE Leap 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 – So können Sie Anmeldeaufforderungen für zusätzliche serielle Ports aktivieren.
systemd
Für Linux-Betriebssysteme, die
systemd
verwenden:upstart
Für Linux-Betriebssysteme, die
upstart
verwenden:sysvinit
Führen Sie für Linux-Betriebssysteme, die
sysvinit
verwenden, den folgenden Befehl aus:sudo sed -i~ -e 's/^#T([01])/T\1/' /etc/inittab sudo telinit q
Erläuterung der Nummerierung serieller Ports
Jede Instanz einer virtuellen Maschine verfügt über vier serielle Ports. Damit diese Ports der API
getSerialPortOutput
entsprechen, sind sie von 1 bis 4 nummeriert. Linux und andere ähnliche Systeme nummerieren ihre seriellen Ports von 0 bis 3. Beispielsweise haben auf vielen Betriebssystem-Images die entsprechenden Geräte die Bezeichnung/dev/ttyS0
bis/dev/ttyS3
. Windows nummeriert serielle Ports vonCOM1
bisCOM4
. Möchten Sie also eine Verbindung mit dem PortCOM3
unter Windows bzw.ttyS2
unter Linux herstellen, geben Sie Port 3 an. Verwenden Sie die folgende Tabelle, um herauszufinden, mit welchem Port Sie sich verbinden möchten.Serielle Ports der VM-Instanz Standardmäßige serielle Ports unter Linux COM-Ports unter Windows 1
/dev/ttyS0
COM1
2
/dev/ttyS1
COM2
3
/dev/ttyS2
COM3
4
/dev/ttyS3
COM4
Beachten Sie, dass viele Linux-Images Port 1 (
/dev/ttyS0
) verwenden, um Meldungen vom Kernel und von Systemprogrammen zu protokollieren.Serielle Port-Unterbrechung senden
Mit den Funktionen der Magischen S-Abf-Taste können Sie Aufgaben auf einer niedrigen Ebene unabhängig vom Systemstatus ausführen. Beispielsweise können Sie mit den Funktionen der Magischen S-Abf-Taste Dateisysteme synchronisieren, die Instanz neu starten, Prozesse beenden oder die Bereitstellung von Dateisystemen aufheben.
So senden Sie einen Befehl mit der Magischen S-Abf-Taste unter Verwendung einer simulierten Port-Unterbrechung:
Audit-Logs der seriellen Konsole anzeigen
Compute Engine bietet Audit-Logs, anhand derer sich prüfen lässt, wer zur seriellen Konsole einer Instanz eine Verbindung hergestellt oder getrennt hat. Damit Sie Logs anzeigen können, benötigen Sie Berechtigungen für die Log-Anzeige oder die Anzeige bzw. Bearbeitung des Projekts.
Bei allen Audit-Logs können Sie Folgendes tun:
Es gibt verschiedene Audit-Logattribute für verschiedene Logtypen. Audit-Logs hergestellter Verbindungen haben z. B. dafür spezifische Attribute, ebenso wie Logs getrennter Verbindungen eigene Attribute haben. Es gibt bestimmte Attribute von Audit-Logs, die bei beiden Logtypen vorkommen.
Alle Logs serieller Konsolen
Die folgende Tabelle enthält die Attribute von Audit-Logs und ihre Werte für alle Logs serieller Konsolen:
Attribut Wert requestMetadata.callerIp
Die IP-Adresse und Portnummer, von der die Verbindung stammt. serviceName
ssh-serialport.googleapis.com
resourceName
Ein String, der die Projekt-ID, die Zone, den Instanznamen und die Nummer des seriellen Ports enthält, um anzugeben, auf welche serielle Konsole sich diese Informationen beziehen. Zum Beispiel ist projects/myproject/zones/us-east1-a/instances/example-instance/SerialPort/2
die Port Nummer 2, auch als COM2 oder /dev/ttyS1 bezeichnet, für die Instanzexample-instance
.resource.labels
Attribute zur Kennzeichnung der Instanz-ID, der Zone und der Projekt-ID. timestamp
Ein Zeitstempel, der anzeigt, wann die Sitzung begonnen oder beendet wurde. severity
NOTICE
operation.id
Ein ID-String, der die Sitzung eindeutig identifiziert. Diesen können Sie verwenden, um einen Eintrag über eine Verbindungstrennung mit dem entsprechenden Verbindungseintrag zu verknüpfen. operation.producer
ssh-serialport.googleapis.com
Logs hergestellter Verbindungen
Die folgende Tabelle enthält die Attribute von Audit-Logs und deren Werte, die für Verbindungslogs spezifisch sind:
Attribut Wert methodName
google.ssh-serialport.v1.connect
status.message
Connection succeeded.
request.serialConsoleOptions
Alle Optionen, die mit der Anfrage angegeben wurden, einschließlich der Nummer des seriellen Ports. request.@type
type.googleapis.com/google.compute.SerialConsoleSessionBegin
request.username
Der für diese Anforderung angegebene Nutzername, der verwendet wird, um den passenden öffentlichen Schlüssel auszuwählen. operation.first
TRUE
status.code
Bei erfolgreichen Verbindungsanfragen hat das Attribut status.code
den Wertgoogle.rpc.Code.OK
, was bedeutet, dass der Vorgang fehlerfrei durchgeführt wurde. Da der Aufzählungswert dieses Attributs0
ist, wird dasstatus.code
-Attribut nicht angezeigt. Allerdings funktioniert jeder Code, der das Attributstatus.code
auf den Wertgoogle.rpc.Code.OK
prüft, wie erwartet.Logs getrennter Verbindungen
Die folgende Tabelle enthält die Attribute von Audit-Logs und deren Werte, die speziell für Verbindungslogs gelten:
Attribut Wert methodName
google.ssh-serialport.v1.disconnect
response.duration
Dauer der Sitzung in Sekunden response.@type
type.googleapis.com/google.compute.SerialConsoleSessionEnd
operation.last
TRUE
Logs fehlgeschlagener Verbindungen
Wenn eine Verbindung fehlschlägt, erstellt Compute Engine einen Audit-Logeintrag. Das Log einer fehlgeschlagenen Verbindung sieht dem Log einer erfolgreichen Verbindung sehr ähnlich, weist jedoch folgende Attribute auf, die eine ausgefallene Verbindung anzeigen.
Attribut Wert severity
ERROR
status.code
Der kanonische Google API-Fehlercode, der den Fehler am ehesten beschreibt. Folgende mögliche Fehlercodes können an dieser Stelle angezeigt werden:
status.message
Die für Menschen lesbare Nachricht zu diesem Eintrag. Interaktiven seriellen Konsolenzugriff deaktivieren
Sie können den interaktiven Zugriff auf die serielle Konsole deaktivieren, indem Sie Metadaten auf der entsprechenden Instanz oder dem Projekt ändern, oder indem Sie eine Organisationsrichtlinie festlegen, die den interaktiven seriellen Konsolenzugriff auf alle VM-Instanzen für ein oder mehrere Projekte, die Teil der Organisation sind, deaktiviert.
Die interaktive serielle Konsole auf einer bestimmten Instanz oder einem Projekt deaktivieren
Projektinhaber und -bearbeiter sowie Nutzer, denen die Rolle
compute.instanceAdmin.v1
zugewiesen wurde, können den Zugriff auf die serielle Konsole deaktivieren. Dazu ändern Sie die Metadaten der betreffenden Instanz oder des Projekts. Legen Sie ähnlich wie beim Aktivieren des Zugriffs auf die serielle Konsole die Metadaten fürserial-port-enable
aufFALSE
fest:serial-port-enable=FALSE
Mit der Google Cloud CLI können Sie diese Metadaten beispielsweise auf eine bestimmte Instanz anwenden:
gcloud compute instances add-metadata instance-name \ --metadata=serial-port-enable=FALSE
So wenden Sie die Metadaten auf ein Projekt an:
gcloud compute project-info add-metadata \ --metadata=serial-port-enable=FALSE
Den interaktiven seriellen Konsolenzugriff über die Organisationsrichtlinie deaktivieren
Wenn Sie die Rolle
orgpolicy.policyAdmin
in der Organisation erhalten haben, können Sie eine Organisationsrichtlinie festlegen, die interaktiven Zugriff auf die serielle Konsole verhindert, auch wenn auf dem Metadatenserver der interaktive Zugriff auf die serielle Konsole aktiviert ist. Nachdem die Organisationsrichtlinie festgelegt wurde, überschreibt sie den Metadatenschlüsselserial-port-enable
. Für Nutzer der Organisation oder des Projekts ist es dann unmöglich, den Zugriff auf die interaktive serielle Konsole zu aktivieren. Standardmäßig ist diese Einschränkung aufFALSE
eingestellt.Die Einschränkung zum Deaktivieren des Zugriffs auf die interaktive serielle Konsole lautet:
compute.disableSerialPortAccess
Nachstehend wird beschrieben, wie Sie diese Richtlinie für die Organisation festlegen können. Nachdem Sie diese Richtlinie festgelegt haben, können Sie für jedes einzelne Projekt Ausnahmen einrichten.
gcloud
Mit dem Befehl
resource-manager enable-enforce
legen Sie die Richtlinie über die Google Cloud CLI fest. Ersetzen Sieorganization-id
durch Ihre Organisations-ID. Beispiel:1759840282
gcloud resource-manager org-policies enable-enforce \ --organization organization-id compute.disableSerialPortAccess
REST
Senden Sie eine
POST
-Anfrage an folgende URL, um eine Richtlinie in der API festzulegen: Ersetzen Sie dabeiorganization-name
durch den Namen der Organisation. Beispiel:organizations/1759840282
.POST https://cloudresourcemanager.googleapis.com/v1/organization-name:setOrgPolicy
Der Anfragetext sollte ein
policy
-Objekt mit folgender Einschränkung beinhalten:"constraint": "constraints/compute.disableSerialPortAccess"
Beispiel:
{ "policy": { "booleanPolicy": { "enforced": TRUE }, "constraint": "constraints/compute.disableSerialPortAccess" } }
Die Richtlinie ist sofort wirksam, sodass alle Projekte unter der Organisation den interaktiven Zugriff auf die serielle Konsole sperren.
Verwenden Sie den Befehl
disable-enforce
, um die Richtlinie vorübergehend zu deaktivieren:gcloud resource-manager org-policies disable-enforce \ --organization organization-id compute.disableSerialPortAccess
Alternativ können Sie eine API-Anfrage stellen, bei der der Anfragetext den
enforced
-Parameter aufFALSE
setzt:{ "policy": { "booleanPolicy": { "enforced": FALSE }, "constraint": "constraints/compute.disableSerialPortAccess" } }
Festlegung der Organisationsrichtlinie auf Projektebene
Sie können dieselbe Organisationsrichtlinie auch pro Projekt festlegen. Dies überschreibt die Einstellung auf der Organisationsebene.
gcloud
So deaktivieren Sie diese Richtlinie für ein bestimmtes Projekt: Ersetzen Sie
project-id
durch Ihre Projekt-ID.gcloud resource-manager org-policies disable-enforce \ --project project-id compute.disableSerialPortAccess
Mit dem Befehl
enable-enforce
mit denselben Werten können Sie diese Richtlinie aktivieren.REST
Senden Sie in der API eine
POST
-Anfrage an die folgende URL, um den interaktiven Zugriff auf die serielle Konsole für das Projekt zu aktivieren. Ersetzen Sie dabeiproject-id
durch die Projekt-ID:POST https://cloudresourcemanager.googleapis.com/v1/projects/project-id:setOrgPolicy
Der Anfragetext sollte ein
policy
-Objekt mit folgender Einschränkung beinhalten:"constraint": "constraints/compute.disableSerialPortAccess"
Beispiel:
{ "policy": { "booleanPolicy": { "enforced": FALSE }, "constraint": "constraints/compute.disableSerialPortAccess" } }
Tipps und Tricks
Erweiterte Optionen
Max. Verbindungsanzahl steuern
Sie können das Attribut
max-connections
festlegen, um zu bestimmen, wie viele gleichzeitige Verbindungen jeweils zu diesem seriellen Port vorgenommen werden können. Die standardmäßige und maximale Anzahl von Verbindungen ist 5. Beispiel: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
Wiederholungsoptionen festlegen
Standardmäßig wird jedes Mal, wenn Sie eine Verbindung zur seriellen Konsole herstellen, eine Wiederholung der letzten 10 Datenzeilen ausgegeben, unabhängig davon, ob die letzten 10 Zeilen durch einen anderen SSH-Client gesehen wurden. Über die folgenden Optionen können Sie diese Einstellung ändern und steuern, wie viele und welche Zeilen ausgegeben werden:
Hängen Sie mithilfe der Google Cloud CLI Folgendes an Ihren Befehl
connect-to-serial-port
an, wobeiN
die Anzahl der Zeilen (oder Byte oder des absoluten Byteindex entsprechend der ausgewählten Wiederholungsoption) angibt:--extra-args replay-lines=N
Wenn Sie einen Drittanbieter-SSH-Client verwenden, geben Sie diese Option im SSH-Befehl an:
ssh -i private-ssh-key-file -p 9600 myproject.us-central1-f.example-instance.jane.port=3.replay-lines=N@ssh-serialport.googleapis.com
Sie können auch eine Kombination dieser Optionen verwenden. Beispiel:
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
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
Umgang mit verworfenen Ausgabedaten
Das jüngste 1 MiB an Ausgabedaten steht immer für jeden seriellen Port zur Verfügung und in der Regel sollte Ihr SSH-Client keine über den seriellen Port ausgegebenen Daten verpassen. Wenn jedoch Ihr SSH-Client aus irgendeinem Grund eine Zeit lang keine Ausgabedaten mehr annimmt, aber die Verbindung nicht trennt, und mehr als 1 MiB neuer Daten erzeugt werden, könnte Ihr SSH-Client Ausgabedaten verpassen. Wenn Ihr SSH-Client Ausgabedaten nicht schnell genug entgegennimmt, um mit der Ausgabegeschwindigkeit der Konsole des seriellen Ports mitzuhalten, können Sie mit dem Attribut
on-dropped-output
das Verhalten der Konsole festlegen.Legen Sie eine der folgenden verfügbaren Optionen für dieses Attribut fest:
Beispiel:
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
Funktion zum Trennen einer Verbindung durch die Befehle "exit" und "logout" aktivieren
Wenn Sie die Funktion zum Trennen einer Verbindung durch die Befehle "exit" und "logout" aktivieren möchten, legen Sie bei der Verbindung zur seriellen Konsole für das Attribut
on-dtr-low
den Wertdisconnect
fest.Hängen Sie in der Google Cloud CLI das folgende Flag an Ihren
connect-to-serial-port
-Befehl an:--extra-args on-dtr-low=disconnect
Wenn Sie einen Drittanbieter-SSH-Client verwenden, geben Sie diese Option im SSH-Befehl an:
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
Die Aktivierung der Option
disconnect
kann dazu führen, dass die Verbindung zur Instanz einmal oder mehrmals getrennt wird, wenn Sie die Instanz neu starten, da das Betriebssystem die seriellen Ports beim Neustart zurücksetzt.Die Standardeinstellung für die Option
on-dtr-low
istnone
. Wenn Sie die Standardeinstellungnone
verwenden, können Sie die Instanz neu starten, ohne von der seriellen Konsole getrennt zu werden, aber die Verbindung zur Konsole nicht mit normalen Methoden wie den Befehlenexit
oderlogout
oder normalen Tastenkombinationen wie "Strg + D" trennen.Nächste Schritte
Sofern nicht anders angegeben, sind die Inhalte dieser Seite unter der Creative Commons Attribution 4.0 License und Codebeispiele unter der Apache 2.0 License lizenziert. Weitere Informationen finden Sie in den Websiterichtlinien von Google Developers. Java ist eine eingetragene Marke von Oracle und/oder seinen Partnern.
Zuletzt aktualisiert: 2024-11-20 (UTC).
-