- Startseite
- Multi-Cloud-Netzwerk
- Customer Edge diagnostics
- Reaching a Customer Edge
- SSH
SSH
Erfasst am 28.07.2026 von einem CE dieser Bereitstellung. sitecli/capture-manifest.json
enthält den betreffenden Knoten, und scripts/capture-sitecli.sh --check überprüft die
Befehlsoberfläche erneut gegen einen laufenden CE.
SSH erreicht das Appliance-Konto admin, dessen Login-Shell die Site CLI ist
(/opt/bin/vpmu). Dies ist der einzige Zugang zur vollständigen On-Box-Befehlsoberfläche — die
Debug-API stellt 34 Befehle bereit, während die Appliance selbst viele weitere
anbietet, die in dieser API nicht vorhanden sind.
cd terraformSLI=$(terraform output -json ce_sli_private_ips | jq -r '.eastus01')ssh -tt -i ~/.ssh/id_ed25519 -J azureuser@<operator-vm> "admin@$SLI"Jeder Teil dieser Befehlszeile ist wesentlich. Die nächsten drei Abschnitte erläutern, welchen Fehler jeder Teil verhindert.
Es gibt keine Shell-Eingabeaufforderung, auf der man landet: Die Login-Shell von admin ist die Site CLI, sodass man direkt an deren >>>-Eingabeaufforderung landet. Führen Sie On-Box-Befehle dort als execcli <name> aus — siehe
On-Box-Befehle.
Warum cloud-init den Schlüssel schreibt und nicht die API
Abschnitt betitelt „Warum cloud-init den Schlüssel schreibt und nicht die API“admin_user_credentials.ssh_key am Site-Objekt sieht genau wie das Feld dafür aus.
Es wird akzeptiert, übersteht ein Read-Back und konfiguriert nichts. vpm besitzt die lokalen Benutzer des Knotens und lehnt es ab, diesen zu ändern — aus dem eigenen Log des Knotens, dreimal während eines einzigen Starts:
vpm users.go:165: Won't do any change for user admin (internal skip)Alles weitere folgt aus dieser einen Zeile. /var/home/admin/.ssh existiert nie, weder vor noch nach dem Erreichen von ONLINE durch die Site. Das Shadow-Last-Change-Datum von admin bleibt beim Bau-Datum des Images, während vesbkp und vesopcon das aktuelle Datum anzeigen, weil vpm diese beiden gesetzt und admin übersprungen hat. Und vpm protokolliert zu keinem Zeitpunkt etwas über ssh_key oder authorized_keys.
Die Datei muss daher außerhalb von vpm geschrieben werden. admin hat die UID 2202, fest im Node-Image verankert, sodass sie existiert, bevor cloud-init läuft, und owner: admin:admin wird zum Schreibzeitpunkt aufgelöst — kein runcmd, keine Eigentümerkorrektur:
- path: /var/home/admin/.ssh/authorized_keys permissions: "0600" owner: admin:admin content: | ${ssh_public_key}sshd war stets bereit. sshd -T meldet pubkeyauthentication yes, und admin
erscheint in AllowUsers in beiden sshd_config-Dateien, die mit dem Knoten ausgeliefert werden. Es musste nie etwas aktiviert werden — nur eine fehlende Datei.
Warum nur eine Adresse antwortet
Abschnitt betitelt „Warum nur eine Adresse antwortet“sshd bindet 0.0.0.0:22, aber nur die interne (SLI)-Adresse ist im Host-Netzwerk-Stack des Knotens auf eine Weise vorhanden, auf der sshd antwortet. eth0 wird in a-i-eth0 umbenannt und trägt überhaupt keine Host-IP — die Argo-Datenebene besitzt diese Schnittstelle, und die Management-/SLO-Adresse, die sie getragen hätte, erscheint stattdessen auf vhost0. Die anderen beiden NICs bleiben unter ihren eigenen Namen im Host-Stack.
Von einer VM innerhalb des VNets aus gegen einen CE geprüft:
Management-/SLO-Adresse Zeitüberschreitungexterne Adresse Zeitüberschreitunginterne/SLI-Adresse OFFEN SSH-2.0-OpenSSH_8.7eine ungenutzte Adresse Zeitüberschreitung (Kontrolle)Eine Prüfung gegen die Adresse, unter der der Knoten bekannt ist, liefert daher exakt dasselbe Ergebnis wie eine geschlossene Sicherheitsgruppe. Es wird nichts blockiert; es gibt einfach keinen Listener auf dieser Adresse.
Die öffentlichen CE-Adressen haben ebenfalls keinen Listener auf Port 22, weshalb der obige Befehl -J verwendet: eine Operator-VM innerhalb des VNets, im selben Subnetz wie die SLI-Adressen. Diese Bereitstellung erstellt eine zu diesem Zweck —
terraform output -raw client_vm_name nennt sie.
Die Site CLI benötigt ein Terminal und einen Wagenrücklauf
Abschnitt betitelt „Die Site CLI benötigt ein Terminal und einen Wagenrücklauf“Die Login-Shell von admin ist keine Shell. Es handelt sich um eine go-prompt-Anwendung, die das Terminal in den Raw-Modus versetzt und Tastenanschläge statt Zeilen liest. Vier Konsequenzen, von denen jede auf eine Weise fehlschlägt, die wie ein anderes Problem aussieht:
| Mechanik | Was ohne sie passiert |
|---|---|
Terminal zuweisen (ssh -tt) | panic: no such device or address von go-prompt.NewStandardInputParser, was wie ein abgestürztes Appliance aussieht |
| Wagenrücklauf statt Zeilenvorschub für Enter senden | Die Zeile wird nie abgesendet, und die Sitzung schließt bei Eingabeende, ohne etwas ausgegeben zu haben |
| Standardeingabe offen halten | Die Verbindung endet, bevor der Befehl gerendert hat, sodass ein funktionierender Befehl still wirkt |
| Befehlstext und Enter-Byte getrennt schreiben | Der Zeilenumbruch landet als wörtliches Zeichen im Puffer, und die CLI antwortet mit unknown command, was so aussieht, als würde der Befehl nicht existieren |
ssh host 'some-command' funktioniert daher nicht: Das Argument wird ignoriert und die interaktive Eingabeaufforderung startet trotzdem. Es muss als Terminal gesteuert werden oder gar nicht.
scripts/sitecli_ssh_harvest.py ist die Referenzimplementierung.
Das Banner ist ein kostenloser Gesundheitscheck
Abschnitt betitelt „Das Banner ist ein kostenloser Gesundheitscheck“Bevor etwas eingegeben wird, hat das Login-Banner bereits mehrere Fragen beantwortet, auf die man sonst Befehle verwenden würde. Von f5-xc-ce-vm-01, ASCII-Art und öffentliche IP gekürzt:
UNAUTHORIZED ACCESS TO THIS DEVICE IS PROHIBITEDAll actions performed on this device are audited
Using https://register.ves.volterra.ioOS: rhel-9.2024.6Memory: 32768MiBStorage: sda: 31GiBCPU: Model: Intel(R) Xeon(R) Platinum 8272CL CPU @ 2.60GHz | CPUs: 8Software: crt-20250613-3382DNS: 168.63.129.16: OKNTP: SyncedUptime: 0 days, 5 hours, 20 minutesRegistration Status: PROVISIONEDSLO IP: 10.0.1.4/26WELCOME IN SITE CLIRegistration Status unterscheidet einen Knoten, der noch hochfährt (PROVISIONING), von einem, der fertig ist (PROVISIONED). Software ist der Build-String, der bestimmt, welche Befehle existieren.
DNS und NTP decken die beiden Abhängigkeiten ab, die die Registrierung zuerst unterbrechen, sodass ein Knoten, der nie online kam, den Grund hier meistens bereits mitgeteilt hat — bevor
chronyc-sources oder
dig überhaupt benötigt werden.
Das Schlüsselpaar bereitstellen
Abschnitt betitelt „Das Schlüsselpaar bereitstellen“-
Ein Schlüsselpaar generieren, falls noch keines vorhanden ist. Ed25519 statt RSA: kürzer und vom Appliance-
sshdakzeptiert.Terminal-Fenster ssh-keygen -t ed25519 -C "ce-operator" -f ~/.ssh/id_ed25519 -
Die Bereitstellung auf die öffentliche Hälfte verweisen. Das Root-Modul liest die Datei einmalig und übergibt die Zeichenkette an jeden Knoten:
terraform/terraform.tfvars ssh_public_key_path = "~/.ssh/id_ed25519.pub"ssh_public_keynimmt das Material stattdessen inline entgegen, was die Plan-Tests verwenden. Die private Hälfte verlässt niemals die eigene Arbeitsstation. -
Apply ausführen. Zuerst die Warnung am Anfang dieser Seite lesen — bei einer bestehenden Bereitstellung werden dabei die CE-VMs ersetzt.
Was dies nicht ist
Abschnitt betitelt „Was dies nicht ist“Jedes der Folgenden wurde getestet und ausgeschlossen, während der Weg noch für unmöglich gehalten wurde. Jedes ist plausibel genug, um einen Tag zu kosten.
| Nicht die Ursache | Wie es ausgeschlossen wurde |
|---|---|
| Die Berechtigung gilt nur beim Erstellen | sshd startet etwa 90 Sekunden nach dem ersten Start, bevor das Site-Objekt existiert. admin_user_credentials ist auch in ReplaceSpecType vorhanden und wird In-Place angewendet. |
block_all_services | Das Port-22-Schließen auf der Management-Adresse ist identisch, unabhängig davon, ob Dienste blockiert sind oder nicht. |
| Ein abschließender Zeilenumbruch am Schlüssel | Beide Varianten getestet, keine Änderung. Cloud-init entfernt ihn trotzdem, weil ein wörtlicher Block andernfalls eine zweite, leere Zeile rendern würde. |
| Ältere, festgepinnte CE-Software | Auf drei Builds reproduziert, einschließlich eines mit OpenSSH 9.9. |
Ein fehlender admin_password | Das Setzen von admin_password neben ssh_key auf einem neu erstellten CE änderte nichts. |
Die anderen Zugangswege
Abschnitt betitelt „Die anderen Zugangswege“ONLINE.