Fehlerbehebung für SSH

Unter bestimmten Umständen ist es möglich, dass eine Google Compute Engine-Instanz keine SSH-Verbindungen mehr akzeptiert. Dafür kann es viele Gründe geben, etwa ein volles Laufwerk oder eine falsche sshd-Konfiguration. In diesem Abschnitt finden Sie eine Reihe von Tipps und Ansätzen für die Behebung häufiger SSH-Probleme.

Firewallregeln überprüfen

Google Compute Engine stellt jedem Projekt eine Gruppe standardmäßiger Firewallregeln bereit, die SSH-Datenverkehr 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 die Liste der Firewalls, in der die Regel default-allow-ssh vorhanden sein muss.

gcloud compute firewall-rules list

Sollte die Regel fehlen, fügen Sie sie wieder hinzu:

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

Fehler mithilfe der seriellen Konsole beheben

Sie können Schreib-Lese-Zugriff auf die serielle Konsole einer Instanz aktivieren, um sich bei dieser anzumelden und Probleme mit der Instanz zu beheben. Dies erweist sich dann als besonders nützlich, wenn eine Anmeldung mit SSH nicht möglich ist oder die Instanz keine Verbindung zum Netzwerk hat. Die serielle Konsole bleibt auch unter diesen beiden Bedingungen zugänglich.

Wie Sie interaktiven Zugriff aktivieren und eine Verbindung zur seriellen Konsole einer Instanz herstellen, erfahren Sie unter Interaktion mit der seriellen Konsole.

Netzwerk testen

Mit dem netcat-Tool können Sie an Port 22 eine Verbindung zu Ihrer Instanz herstellen und prüfen, ob die Netzwerkverbindung funktioniert. Sollte kein SSH-Banner (z. B. SSH-2.0-OpenSSH_6.0p1 Debian-4) zu sehen sein, funktioniert die Netzwerkverbindung und Sie können Firewallprobleme ausschließen. Rufen Sie zuerst mit dem gcloud-Tool die externe natIP für die Instanz ab:

gcloud compute instances describe example-instance --format='get(networkInterfaces[0].accessConfigs[0].natIP)'
198.51.100.8

Stellen Sie mit dem Befehl nc eine Verbindung zur Instanz her:

# Check for SSH banner
user@local:~$ nc [EXTERNAL_IP] 22
SSH-2.0-OpenSSH_6.0p1 Debian-4

Als neuer Nutzer anmelden

Möglicherweise ist das Problem, das die Anmeldung verhindert, auf Ihr Benutzerkonto beschränkt (z. B., wenn die Berechtigungen für die Datei ~/.ssh/authorized_keys auf der Instanz falsch gesetzt wurden).

Versuchen Sie, sich als neuer Nutzer mit dem gcloud-Tool anzumelden, indem Sie in der SSH-Anfrage einen anderen Nutzernamen angeben. Das gcloud-Tool aktualisiert die Projektmetadaten, um den neuen Nutzer hinzuzufügen und den SSH-Zugriff zuzulassen.

user@local:~$ gcloud compute ssh [USER]@example-instance

Dabei ist [USER] der neue Nutzername, mit dem Sie sich anmelden.

Laufwerk auf einer neuen Instanz verwenden

Wenn die oben aufgeführten Schritte in Ihrem Fall nicht funktionieren und die Instanz, an der Sie interessiert sind, von einem nichtflüchtigen Speicher gebootet wird, können Sie den nichtflüchtigen Speicher trennen und ihn zur Verwendung auf einer neuen Instanz hinzufügen. Ersetzen Sie DISK im folgenden Beispiel mit dem Namen Ihres Laufwerks:

gcloud compute instances delete old-instance --keep-disks=boot
gcloud compute instances create new-instance --disk name=DISK,boot=yes,auto-delete=no
gcloud compute ssh new-instance

Instanzen ohne Herunterfahren untersuchen

Möglicherweise können Sie auf eine Instanz nicht zugreifen, die weiterhin fehlerfrei den Produktionsverkehr abarbeitet. In diesem Fall bietet es sich an, das Laufwerk zu untersuchen, ohne die Betriebsfähigkeit der Instanz für die Nutzer zu unterbrechen. Erzeugen Sie zuerst einen Snapshot des Bootlaufwerks dieser Instanz. Legen Sie dann ein neues Laufwerk auf der Grundlage des Snapshots an, erstellen Sie eine temporäre Instanz und fügen Sie den neuen nichtflüchtigen Speicher schließlich der temporären Instanz hinzu und hängen Sie ihn ein, um die Fehlersuche vorzunehmen.

  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 betreffenden Laufwerks. Ersetzen Sie dabei DISK durch den Namen des Laufwerks:

    gcloud compute disks snapshot DISK --snapshot-name debug-disk-snapshot
    
  4. Erstellen Sie ein neues Laufwerk auf der Grundlage des Snapshots aus dem vorigen Schritt:

    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/myinstance
    
    $ mount /dev/disk/by-id/scsi-0Google_PersistentDisk_example-disk-debugging /mnt/myinstance
    
    $ cd /mnt/myinstance/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. Befolgen Sie die Anweisungen 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 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 example-instance --disk name=DISK,boot=yes --startup-script-url URL
    

Das Skript compute-ssh-diagnostic dient als gute Basis zum Erfassen von Diagnoseinformationen bei den häufigsten Problemen.

Hat Ihnen diese Seite weitergeholfen? Teilen Sie uns Ihr Feedback mit:

Feedback geben zu...

Compute Engine-Dokumentation