Fehlerbehebung für SSH

Unter bestimmten Umständen kann es vorkommen, dass eine Google Compute Engine-Instanz keine SSH-Verbindungen mehr akzeptiert. Dies kann viele Gründe haben. Im Folgenden sind einige häufige Ursachen für SSH-Verbindungsprobleme aufgeführt:

  • Das Laufwerk der Instanz ist voll. Überprüfen Sie den Speicherplatz und bereinigen Sie ihn nach Bedarf.
  • Der sshd-Daemon ist nicht ordnungsgemäß konfiguriert. Prüfen Sie anhand des Benutzerhandbuchs für Ihr Betriebssystem, ob Ihre Datei sshd_config korrekt eingerichtet ist.
  • OS Login ist für die Instanz aktiviert. SSH-Schlüssel und OS Login können nicht gleichzeitig verwendet werden, um eine Verbindung zu einer Instanz herzustellen. Wenn OS Login aktiviert ist, kann keine Verbindung mit metadatenbasierten SSH-Schlüsseln hergestellt werden.

In diesem Thema wird eine Reihe von Tipps und Vorgehensweisen zur Behebung einiger der häufigsten SSH-Probleme vorgestellt.

Anforderungen

Sie können die meisten Schritte zur Fehlerbehebung auf Ihrer lokalen Workstation ausführen. Für die Verwendung einer lokalen Linux- oder Windows-Workstation zur Fehlerbehebung einer VM-Instanz müssen Sie die Workstation aber zuerst vorbereiten.

Zur Vorbereitung der Workstation sind folgende Schritte erforderlich:

  • Installieren Sie das gcloud-Befehlszeilentool oder aktualisieren Sie es auf die neueste Version.
  • Installieren Sie das nmap-Tool zur Netzwerkerkennung und Sicherheitsüberwachung für Ihr Betriebssystem. Mit diesem Tool testen Sie die Netzwerkverbindung zu Ihrer VM-Instanz.
  • Legen Sie Umgebungsvariablen fest.

Umgebungsvariablen festlegen

Sie können Umgebungsvariablen für alle Parameter festlegen, die in diesem Leitfaden zur Fehlerbehebung häufiger verwendet werden, etwa für den Instanznamen oder für den Namen des nichtflüchtigen Bootlaufwerks der betreffenden Instanz.

Sie können die Umgebungsvariablen auf Ihrer lokalen Workstation festlegen.

Linux oder macOS

Auf einer Linux- oder MacOS-Workstation verwenden Sie den Befehl export:

export PROB_INSTANCE='[INSTANCE_NAME]'
export BOOT_DISK='[BOOT_DISK_NAME]'

Dabei gilt:

  • [INSTANCE_NAME] ist der Name der Instanz, für die Sie eine Fehlerbehebung durchführen.
  • [BOOT_DISK_NAME] ist der Name des nichtflüchtigen Bootlaufwerks, für das Sie eine Fehlerbehebung durchführen.

Für eine Instanz namens instance1 und ein Bootlaufwerk mit dem Namen disk1 führen Sie beispielsweise folgende Befehle aus:

export PROB_INSTANCE='instance1'
export BOOT_DISK='disk1'

Windows

Unter Windows verwenden Sie den Befehl set.

set PROB_INSTANCE='[INSTANCE_NAME]'
set BOOT_DISK='[BOOT_DISK_NAME]'

Dabei gilt:

  • [INSTANCE_NAME] ist der Name der Instanz, für die Sie eine Fehlerbehebung durchführen.
  • [BOOT_DISK_NAME] ist der Name des nichtflüchtigen Bootlaufwerks, für das Sie eine Fehlerbehebung durchführen.

Für eine Instanz namens instance1 und ein Bootlaufwerk mit dem Namen disk1 führen Sie beispielsweise folgende Befehle aus:

set PROB_INSTANCE='instance1'
set BOOT_DISK='disk1'

Verbindung testen

Es kann vorkommen, dass Sie aufgrund von Verbindungsproblemen, die mit Firewalls, Netzwerkverbindungen oder dem Nutzerkonto zusammenhängen, keine SSH-Verbindung zu einer VM-Instanz herstellen können. Die Schritte dieses Abschnitts bieten die Möglichkeit, die jeweiligen Ursachen für die Verbindungsprobleme zu ermitteln.

Firewallregeln überprüfen

Google Compute Engine stellt für jedes Projekt eine Gruppe standardmäßiger Firewallregeln bereit, die Traffic über SSH erlauben. Sollte die Standard-Firewallregel, die SSH-Verbindungen zulässt, auf irgendeine Weise entfernt werden, können Sie nicht auf die Instanz zugreifen. Prüfen Sie mit dem gcloud compute-Befehlszeilentool, ob in der Liste der Firewalls die Regel default-allow-ssh enthalten ist.

Führen Sie auf Ihrer lokalen Workstation den folgenden Befehl aus:

gcloud compute firewall-rules list

Wenn die Regel fehlt, fügen Sie sie wieder hinzu:

gcloud compute firewall-rules create default-allow-ssh --allow tcp:22

Netzwerkverbindung testen

Sie können mit dem nmap-Tool eine Verbindung zu Ihrer Instanz an Port 22 herstellen und überprüfen, ob die Netzwerkverbindung funktioniert. Wenn nach der Herstellung einer Verbindung 22/tcp open ssh angezeigt wird, ist Ihre Netzwerkverbindung aktiv. Damit sind Firewallprobleme ausgeschlossen.

  1. Rufen Sie mit dem gcloud-Tool den externen natIP-Wert für Ihre Instanz auf:

    gcloud compute instances describe $PROB_INSTANCE --format='get(networkInterfaces[0].accessConfigs[0].natIP)'
    198.51.100.1
    
  2. Testen Sie die Netzwerkverbindung zu Ihrer Instanz.

    Führen Sie dazu den Befehl nmap aus:

    nmap [EXTERNAL_IP]
    

    Dabei ist [EXTERNAL_IP] die externe IP-Adresse der Instanz.

    Wenn die Instanz beispielsweise die externe IP 198.51.100.1 hat, führen Sie den folgenden Befehl aus:

    user@local:~$  nmap 198.51.100.1
    
    Starting Nmap 7.70 ( https://nmap.org ) at 2019-03-18 16:04 Greenwich Standard Time
    Nmap scan report for 229.30.196.35.bc.googleusercontent.com (198.51.100.1)
    Host is up (0.0061s latency).
    Not shown: 998 filtered ports
    PORT     STATE  SERVICE
    22/tcp   open   ssh
    Nmap done: 1 IP address (1 host up) scanned in 6.22 seconds
    

Nutzer für eine Verbindung ändern

Eine fehlgeschlagene Anmeldung ist möglicherweise auf das verwendete Nutzerkonto zurückzuführen. So kann es beispielsweise sein, dass die Berechtigungen in der Datei ~/.ssh/authorized_keys der Instanz für den Nutzer nicht ordnungsgemäß festgelegt wurden.

Melden Sie sich zur Klärung mit dem gcloud-Tool als ein anderer Nutzer an. Geben Sie dazu in der SSH-Anfrage einen anderen Nutzernamen an. Das gcloud-Tool aktualisiert dann die Metadaten des Projekts, um den neuen Nutzer hinzuzufügen und den SSH-Zugriff zuzulassen.

user@local:~$ gcloud compute ssh [USER]@$PROB_INSTANCE

Dabei ist [USER] der neue Nutzername für die Anmeldung.

Fehler mithilfe der seriellen Konsole beheben

In einigen Fällen lassen sich Verbindungsfehler durch Prüfung der Logs mithilfe der seriellen Konsole ermitteln. Sie können auf die serielle Konsole von Ihrer lokalen Workstation aus mit einem Browser zugreifen.

Aktivieren Sie den Lese-/Schreibzugriff auf die serielle Konsole einer Instanz, damit Sie sich bei der Konsole anmelden und Probleme mit der Instanz beheben können. Dies ist besonders hilfreich, wenn eine Anmeldung mit SSH nicht möglich ist oder die Instanz keine Verbindung zum Netzwerk hat. Die serielle Konsole ist in beiden Situationen zugänglich.

Informationen zur Aktivierung des interaktiven Zugriffs und zur Herstellung einer Verbindung zur seriellen Konsole erhalten Sie unter Mit der seriellen Konsole interagieren.

VM-Instanz ohne Herunterfahren prüfen

Es kann sein, dass Sie keine Verbindung zu einer Instanz herstellen können, die Produktionstraffic weiterhin fehlerfrei verarbeitet. In einer solchen Situation müssen Sie das Laufwerk prüfen, ohne die Instanz zu unterbrechen.

Zur Prüfung der Instanz generieren Sie einen Snapshot des Bootlaufwerks und erstellen daraus ein neues Laufwerk. Dann legen Sie eine temporäre Instanz an und fügen schließlich den neuen nichtflüchtigen Speicher Ihrer temporären Instanz hinzu bzw. stellen ihn für diese bereit, um den Fehler auf dem Laufwerk zu beheben.

  1. Erstellen Sie ein neues VPC-Netzwerk, in dem die geklonte Instanz bereitgestellt werden kann:

    gcloud compute networks create debug-network
    
  2. Fügen Sie eine Firewallregel hinzu, die SSH-Verbindungen zum Netzwerk zulässt:

    gcloud compute firewall-rules create debug-network-allow-ssh --allow tcp:22
    
  3. Erstellen Sie einen Snapshot des Bootlaufwerks:

    gcloud compute disks snapshot $BOOT_DISK --snapshot-name debug-disk-snapshot
    
  4. Erstellen Sie mit dem Snapshot aus dem vorigen Schritt ein neues Laufwerk:

    gcloud compute disks create example-disk-debugging --source-snapshot debug-disk-snapshot
    
  5. Erstellen Sie eine neue Debug-Instanz ohne externe IP-Adresse:

    gcloud compute instances create debugger --network debug-network --no-address
    
  6. Fügen Sie der Instanz das Debug-Laufwerk hinzu:

    gcloud compute instances attach-disk debugger --disk example-disk-debugging
    
  7. Folgen Sie den Anweisungen zum Herstellen einer Verbindung zu einer Instanz ohne externe IP-Adresse.

  8. Nach der Anmeldung bei der Debug-Instanz führen Sie die Fehlersuche auf der Instanz durch. Prüfen Sie zum Beispiel die Instanzlogs:

    $ sudo su -
    
    $ mkdir /mnt/$PROB_INSTANCE
    
    $ mount /dev/disk/by-id/scsi-0Google_PersistentDisk_example-disk-debugging /mnt/$PROB_INSTANCE
    
    $ cd /mnt/$PROB_INSTANCE/var/log
    
    # Identify the issue preventing ssh from working
    $ ls
    

Startskript verwenden

Wenn keiner der obigen Schritte zu einem Ergebnis führt, können Sie ein Startskript erstellen, um Informationen direkt nach dem Starten der Instanz zu erfassen. Folgen Sie dazu der Anleitung zum Ausführen von Startskripten.

Anschließend müssen Sie die Instanz mit gcloud compute instances reset zurücksetzen, damit die Metadaten wirksam werden. Alternativ können Sie die Instanz mit einem diagnostischen Startskript neu erstellen:

  1. Führen Sie gcloud compute instances delete mit dem Flag --keep-disks aus.

    gcloud compute instances delete $PROB_INSTANCE --keep-disks boot
    
  2. Fügen Sie eine neue Instanz mit demselben Laufwerk hinzu und geben Sie das Startskript an.

    gcloud compute instances create new-instance --disk name=$BOOT_DISK,boot=yes --startup-script-url URL
    

Das Skript compute-ssh-diagnostic ist ein guter Ausgangspunkt für die Erfassung von Diagnoseinformationen bei den häufigsten Problemen.

Laufwerk auf einer neuen Instanz verwenden

Wenn die anderen Schritte in diesem Dokument zu keiner Behebung des Fehlers geführt haben und Sie Daten von Ihrem nichtflüchtigen Bootlaufwerk wiederherstellen müssen, können Sie das Bootlaufwerk trennen und es als sekundäres Laufwerk an eine neue Instanz anhängen.

gcloud compute instances delete $PROB_INSTANCE --keep-disks=boot
gcloud compute instances create new-instance --disk name=$BOOT_DISK,boot=yes,auto-delete=no
gcloud compute ssh new-instance
Hat Ihnen diese Seite weitergeholfen? Teilen Sie uns Ihr Feedback mit:

Feedback geben zu...

Compute Engine-Dokumentation