Google Distributed Cloud (GDC) Air-Gapped verwendet die schlüsselbasierte SSH-Authentifizierung, um Verbindungen zu Linux-VM-Instanzen herzustellen. Standardmäßig sind Passwörter für lokale Nutzer auf Linux-VMs nicht konfiguriert.
Hinweise
Bevor Sie eine Verbindung zu einer VM herstellen können, müssen die folgenden Voraussetzungen erfüllt sein:
- Zugriffsverwaltung aktivieren Sie können nicht fortfahren, wenn die Zugriffsverwaltung in der Gastumgebung nicht aktiviert ist. Die Zugriffsverwaltung ist auf neuen VMs standardmäßig aktiviert.
- Aktivieren Sie den externen VM-Zugriff für alle Peers über den TCP-Port 22 (Transmission Control Protocol).
- Aktivieren Sie für Windows-VMs den externen VM-Zugriff auf Port 3389.
- Richten Sie eine benutzerdefinierte
ProjectNetworkPolicy-Ressource (PNP) in dem Projekt ein, in dem sich die VM befindet.- Wenn Sie ein PNP im Projekt einrichten, können Sie auf die VM außerhalb des Projekts oder der Organisation zugreifen.
- Wenn Sie nicht sicher sind, ob Sie eine PNP haben, fragen Sie Ihren Infrastruktur-Operator (IO).
- Anmeldezugriff auf den Cluster. Folgen Sie der CLI-Anleitung unter Anmelden, um sich im Cluster anzumelden.
gdcloud-Befehlszeile (Command-Line Interface, CLI) verwenden möchten, müssen Sie die gdcloud-CLI heruntergeladen, installiert und konfiguriert haben.
Für alle Befehle für Distributed Cloud wird die CLI gdcloud oder kubectl verwendet. Außerdem ist eine Linux-Umgebung erforderlich.
Pfad der kubeconfig-Datei abrufen
Damit Sie Befehle für den Management API-Server ausführen können, benötigen Sie die folgenden Ressourcen:
Melden Sie sich an und generieren Sie die kubeconfig-Datei für den Management API-Server, falls Sie noch keine haben.
Verwenden Sie den Pfad zur kubeconfig-Datei des Management API-Servers, um
MANAGEMENT_API_SERVERin dieser Anleitung zu ersetzen.
Berechtigungen und Zugriff anfordern
Zum Ausführen der auf dieser Seite aufgeführten Aufgaben benötigen Sie die Rolle „ProjectVirtualMachine Admin“. Prüfen Sie, ob Sie die Rolle „Project VirtualMachine Admin“ (project-vm-admin) im Namespace des Projekts haben, in dem sich die VM befindet.
Wenn Sie VM-Vorgänge über die GDC-Konsole oder die gdcloud-CLI ausführen möchten, bitten Sie Ihren Projekt-IAM-Administrator, Ihnen die Rolle „Project VirtualMachine Admin“ und die Rolle „Project Viewer“ (project-viewer) zuzuweisen.
VM-Verbindung herstellen
In diesem Abschnitt wird beschrieben, wie Sie eine Verbindung zu Linux- und Windows-VMs herstellen.
Verbindung zu einer Linux-VM herstellen
Verwenden Sie die GDC-Konsole, die gdcloud CLI oder die Virtual Machine Manager API, um eine Verbindung zu einer Linux-VM herzustellen.
Console
Klicken Sie im Navigationsmenü auf Virtuelle Maschinen > Instanzen.
Suchen Sie in der Liste der VMs nach der Zeile für die laufende VM, mit der Sie eine Verbindung herstellen möchten. Klicken Sie in der Spalte Verbinden auf SSH.
Ein SSH-Browserterminal wird geöffnet. Geben Sie einen beliebigen Befehl in die Shell ein oder klicken Sie auf FTP, um die Dateistruktur aufzurufen und Dateien hochzuladen.
gdcloud
Mit SSH eine Verbindung zu einer VM herstellen, indem Sie den Befehl gdcloud compute ssh ausführen
gdcloud compute ssh VM_NAME \
--project=PROJECT_ID
Ersetzen Sie die folgenden Variablen:
- VM_NAME: der Name der VM.
- PROJECT_ID: die ID des Projekts, das die VM enthält.
Wenn Sie Standardeigenschaften für die CLI festgelegt haben, können Sie das Flag --project bei diesem Befehl weglassen. Beispiel:
gdcloud compute ssh VM_NAME
API
So stellen Sie eine Verbindung zu einer VM her:
- Öffnen Sie ein Terminalfenster.
- Erstellen Sie ein SSH-Schlüsselpaar.
- Laden Sie den öffentlichen Schlüssel und den Nutzernamen mit einem TTL-Wert (Time-to-Live) hoch.
GDC ruft den SSH-Schlüssel und den Nutzernamen ab und erstellt ein Nutzerkonto mit dem Nutzernamen. Auf Linux-VMs speichert GDC den öffentlichen Schlüssel in der Datei ~/.ssh/authorized_keys des Nutzers auf der VM.
Führen Sie die folgenden Schritte aus, um über die Befehlszeile eine Verbindung zu einer VM herzustellen:
Erstellen Sie ein SSH-Schlüsselpaar und einen Nutzernamen.
Verwenden Sie auf Linux- und macOS-Workstations das
ssh-keygen-Dienstprogramm, um ein neues SSH-Schlüsselpaar zu erstellen. Im folgenden Codebeispiel wird ein RSA-Schlüsselpaar (Rivest–Shamir–Adleman) erstellt:ssh-keygen -t rsa \ -f ~/.ssh/KEY_FILENAME \ -C USERNAME \ -b 2048Ersetzen Sie die Variablen durch die folgenden Definitionen.
Variable Definition KEY_FILENAMEDer Name Ihrer SSH-Schlüsseldatei. Der Dateiname my-ssh-keyerzeugt beispielsweise die private Schlüsseldateimy-ssh-keyund die öffentliche Schlüsseldateimy-ssh-key.pub.USERNAMEIhr Nutzername auf der VM, z. B. testuserodertestuser_gmail_com.Das Dienstprogramm
ssh-keygenspeichert Ihre private Schlüsseldatei im Pfad~/.ssh/KEY_FILENAMEund Ihre öffentliche Schlüsseldatei im Pfad~/.ssh/KEY_FILENAME.pub.Ein öffentlicher Schlüssel für den Nutzer
testusersieht in etwa so aus:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF... testuserLaden Sie Ihren Schlüssel auf die VM hoch und erstellen Sie eine Kubernetes-Ressource mit Ihrem öffentlichen Schlüssel, Nutzernamen und TTL-Wert (Time to Live) für den Schlüssel.
Im folgenden Beispiel wird eine
access_request.yaml-Datei verwendet, um mit dem privaten SchlüsselKEY_FILENAMEZugriff auf die VM-Instanz zu gewähren. Der TTL-Wert beträgt zehn Minuten:apiVersion: virtualmachine.gdc.goog/v1 kind: VirtualMachineAccessRequest metadata: namespace: VM_NAMESPACE name: AR_NAME spec: ssh: key: | ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF... cloudysanfrancisco ttl: 10m user: USERNAME vm: VM_NAMEErsetzen Sie die Variablen anhand der folgenden Definitionen:
Variable Definition VM_NAMESPACEDer Namespace für die VM. AR_NAMEDer Name der Zugriffsanfrage. USERNAMEIhr Nutzername auf der VM, z. B. testuserodertestuser_gmail_com.VM_NAMEDer Name der VM-Instanz. Erstellen Sie den Schlüssel:
kubectl --kubeconfig MANAGEMENT_API_SERVER \ create -f access_request.yamlSo prüfen Sie den Status Ihrer Zugriffsanfrage:
kubectl --kubeconfig MANAGEMENT_API_SERVER \ -n VM_NAMESPACE \ get virtualmachineaccessrequests.virtualmachine.gdc.googErsetzen Sie
VM_NAMESPACEdurch den Namespace für die VM.Der Status
configuredgibt an, dass Sie eine Verbindung zur VM herstellen können.Stellen Sie eine Verbindung zur VM her.
ssh -i PATH_TO_PRIVATE_KEY USERNAME@EXTERNAL_IPErsetzen Sie die folgenden Werte:
PATH_TO_PRIVATE_KEYmit dem Pfad zur privaten SSH-Schlüsseldatei, die dem öffentlichen Schlüssel entspricht, den Sie der VM hinzugefügt haben.USERNAMEmit dem Nutzernamen, den Sie beim Erstellen des SSH-Schlüssels angegeben haben. Beispiel:cloudysanfrancisco_example_comodercloudysanfrancisco.EXTERNAL_IPdurch die externe Ingress-IP-Adresse der VM.
Fehlerbehebung
In diesem Abschnitt wird beschrieben, wie Sie Probleme beheben, die beim Herstellen einer Verbindung zu einer VM-Instanz nach dem Erstellen der Zugriffsanfrage auftreten können.
Führen Sie die folgenden Schritte aus, um mögliche Probleme zu identifizieren:
Prüfen Sie, ob die VM ausgeführt wird. Ersetzen Sie die bearbeitbaren Variablen im folgenden Befehl durch Ihre Werte:
kubectl --kubeconfig MANAGEMENT_API_SERVER \ -n VM_NAMESPACE \ get virtualmachines.virtualmachine.gdc.goog VM_NAMEWenn die VM nicht ausgeführt wird, können Sie keine Verbindung herstellen oder neue Anfragen konfigurieren.
Prüfen Sie, ob die VM seit einigen Minuten ausgeführt wird. Wenn die VM gerade erst gestartet wurde, werden die für den SSH-Zugriff erforderlichen Dienste möglicherweise noch nicht ausgeführt. Normalerweise werden sie innerhalb von fünf Minuten nach dem Start ausgeführt.
Prüfen Sie, ob Sie den TTL-Wert in der Zugriffsanfrage überschritten haben. Der Schlüssel wird entfernt, sobald die Zeit den TTL-Wert erreicht.
Wenn für Ihr
VirtualMachineAccessRequestder Statusconfiguredangezeigt wird, prüfen Sie, ob die folgenden Anforderungen erfüllt sind:- Sie haben die Datenübertragung auf Port 22 für Ihre VM aktiviert.
- Ihr Computer leitet Anfragen an die VM weiter. Mit dem Befehl
curl -vso /dev/null --connect-timeout 5 EXTERNAL_IP:22können Sie beispielsweise das Routing prüfen.
Wenn für Ihr
VirtualMachineAccessRequestder Statusfailedangezeigt wird, rufen Sie den vollständigen Status auf und sehen Sie sich die Fehlermeldung an, die angibt, warum die Anfrage fehlgeschlagen ist:kubectl --kubeconfig MANAGEMENT_API_SERVER \ -n VM_NAMESPACE \ describe virtualmachineaccessrequest.virtualmachine.gdc.goog AR_NAMEErsetzen Sie die bearbeitbaren Variablen im vorherigen Befehl durch Ihre eigenen Werte.
Wenn der Status Ihrer
VirtualMachineAccessRequestleer ist, wird die Gastumgebung möglicherweise nicht ausgeführt.
Verbindung zu einer Windows-VM herstellen
Für die Verbindung zu einer Windows-VM ist das Remote Desktop Protocol (RDP) über eine Remote-Desktop-Anwendung erforderlich. Um über RDP auf die VM zuzugreifen, benötigen Sie ein Passwort, das Sie über die GDC-Konsole oder die benutzerdefinierte Ressource VirtualMachinePasswordResetRequest aus der Virtual Machine Manager API abrufen können.
Bevor Sie fortfahren, müssen Sie zuerst den Remotedesktopclient installieren. Über den folgenden Link können Sie die Schritte für Ihr Betriebssystem aufrufen. Für den Zugriff auf den Link ist eine Internetverbindung erforderlich.
https://remmina.org/how-to-install-remmina/
Führen Sie die folgenden Schritte aus, um eine Verbindung zu einer Windows-VM herzustellen:
Console
- Klicken Sie im Navigationsmenü auf Virtuelle Maschinen > Instanzen.
- Suchen Sie in der Liste der VMs nach der laufenden Windows-VM, zu der Sie eine Verbindung herstellen möchten.
- Klicken Sie in der Spalte Aktionen auf Passwort zurücksetzen. Das Dialogfeld Neues Windows-Passwort festlegen wird angezeigt.
- Geben Sie im Feld Nutzername Ihren Nutzernamen ein.
- Klicken Sie auf Festlegen. Das Dialogfeld Neues Windows-Passwort wird mit einem zufällig generierten Passwort angezeigt. Dieses Passwort enthält sowohl alphanumerische als auch nicht alphanumerische Zeichen.
- Klicken Sie auf Kopieren.
- Rufen Sie Ihren Remote-Desktop-Client auf und wählen Sie Ihren Nutzernamen aus.
- Geben Sie im Eingabefeld Passwort Ihr Passwort ein.
- Drücken Sie die Eingabetaste oder die Returntaste.
API
Generieren Sie einen RSA-Schlüssel. Sie benötigen diesen Schlüssel, um das Passwort aus der
VirtualMachinePasswordResetRequest-Ressource abzurufen.openssl genrsa -out private-key.pem 2048 # Get the RSA public key openssl rsa -in private-key.pem -outform PEM -puboutErstellen Sie eine YAML-Datei.
Laden Sie den von Ihnen generierten RSA-Schlüssel, den VM-Namen und einen Nutzernamen hoch, den Sie für den Zugriff auf den Remote-Desktop-Client angeben:
apiVersion: virtualmachine.gdc.goog/v1 kind: VirtualMachinePasswordResetRequest metadata: namespace: VM_NAMESPACE name: PRR_NAME spec: vmName: VM_NAME user: USERNAME publicKey: PUBLIC_KEYErsetzen Sie die Variablen anhand der folgenden Definitionen:
Variable Definition VM_NAMESPACE Der Name des Namespace, in dem sich die VM befindet. PRR_NAME Der Name, den Sie der Anfrage zum Zurücksetzen des Passworts geben. Beispiel: vmprr2.VM_NAME Der Name der VM. Beispiel: vm-test.USERNAME Der Nutzername, den Sie für die Anmeldung bei der VM mit dem Remote Desktop-Client angeben. Beispiel: test-user.PUBLIC_KEY Der RSA-Schlüssel, den Sie in Schritt 2 generiert haben. Sie müssen PUBLIC_KEY mehrzeilig formatieren. Das folgende Beispiel zeigt eine YAML-Datei mit den Werten und der Formatierung, die für eine Anfrage zum Zurücksetzen des Passworts erforderlich sind:
apiVersion: virtualmachine.gdc.goog/v1 kind: VirtualMachinePasswordResetRequest metadata: namespace: test-namespace name: vmprr2 spec: vmName: vm2 user: test-user publicKey: |- -----BEGIN PUBLIC KEY----- # Input the RSA key data in multi-line format. -----END PUBLIC KEY-----Wenden Sie den Inhalt der Datei an:
kubectl --kubeconfig=MANAGEMENT_API_SERVER \ apply -f FILENAMEErsetzen Sie FILENAME durch den Namen der Datei für die Anfrage zum Zurücksetzen des Passworts.
Rufen Sie den Status der
VirtualMachinePasswordResetRequest-Ressource auf. Vorausgesetzt, die VM hat den StatusRunning, wird das Passwort innerhalb von einer Minute generiert.kubectl --kubeconfig=MANAGEMENT_API_SERVER \ -n VM_NAMESPACE \ describe virtualmachinepasswordresetrequest.virtualmachine.gdc.goog PRR_NAMESuchen Sie das Feld
status.encryptedPassword, das das generierte Passwort enthält.Kopieren Sie den Wert in
status.encryptedPasswordund entschlüsseln Sie das generierte Passwort:echo ENCRYPTED_PASSWORD | base64 -d > PASSWORD_FILENAME openssl pkeyutl -decrypt -in PASSWORD_FILENAME -inkey private-key.pem \ -pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha512 -pkeyopt rsa_mgf1_md:sha512Ersetzen Sie Folgendes:
- ENCRYPTED_PASSWORD: Das generierte Passwort aus dem Feld
status.encryptedPassword. - PASSWORD_FILENAME: Eine temporäre Datei zum Speichern des base64-decodierten Passworts.
Anschließend wird das entschlüsselte Passwort als Ausgabe angezeigt, mit dem Sie über RDP eine Verbindung zur VM herstellen können.
- ENCRYPTED_PASSWORD: Das generierte Passwort aus dem Feld
Öffnen Sie den Remotedesktopclient und klicken Sie auf Remoteverbindungsprofil. Ein Verbindungsdialogfeld wird angezeigt.
Geben Sie auf dem Tab Basic (Einfach) Werte für die folgenden Felder ein:
- Server: Die Ingress-IP-Adresse des VM-Status für externen Zugriff mit angehängter Portnummer für externen VM-Zugriff. Informationen zum Abrufen der Ingress-IP-Adresse finden Sie unter Ingress.
- Nutzername: Der Nutzername, den Sie in der Anfrage zum Zurücksetzen des Passworts angegeben haben.
Beispiel:
test-user. - Passwort: Das generierte Passwort, das Sie aus dem Status der Anfrage zum Zurücksetzen des Passworts entschlüsselt haben.
Klicken Sie auf Speichern und verbinden.