H ILYGO Hawser
Zur Website

SSH-Schlüssel verwalten

Einen Schlüssel importieren, prüfen und einem Server zuordnen – und genau wissen, was Hawser Ihnen dabei nicht abnimmt.

Schlüssel statt Passwort

Ein Passwort lässt sich erraten, wandert von Server zu Server und muss bei jeder Verbindung neu eingetippt werden. Ein SSH-Schlüssel besteht dagegen aus zwei Teilen: Der öffentliche Teil liegt auf dem Server, der private Teil verlässt Ihren Rechner nie. Der Server stellt eine Aufgabe, Ihr Rechner signiert sie – ein wiederverwendbares Geheimnis geht dabei nie über die Leitung.

  • Sie können die Passwortanmeldung auf dem Server abschalten (PasswordAuthentication no) und Brute-Force-Angriffen damit die Tür verschliessen.
  • Ein Schlüssel pro Zweck: Einen Zugang zu entziehen heisst dann nur, auf dem betroffenen Server eine Zeile aus ~/.ssh/authorized_keys zu löschen.
  • In Hawser liegen der Schlüssel und seine Passphrase im verschlüsselten Tresor – Sie tippen bei keiner Sitzung etwas nach.

Hawser verwaltet Schlüssel für die Protokolle SSH und SFTP. FTP und Telnet kennen keine Schlüsselanmeldung; dort gibt es nur ein Passwortfeld.

Die Ansicht « Clés »

Linke Seitenleiste, Symbol 🔑 « Clés » (Schlüssel). Die Kopfzeile der Ansicht zeigt « SSH Keys ». Ein Tastaturkürzel führt nicht direkt dorthin; wer lieber die Tastatur benutzt, nimmt ⌘K.

Jede Zeile zeigt den Namen des Schlüssels, nach erfolgreicher Prüfung ein grünes « ✓ verified » und darunter eine Metazeile der Form ssh-ed25519 · no passphrase · 2 uses. Der Zähler nennt die Zahl der Verbindungsprofile, die auf diesen Schlüssel verweisen – vor dem Löschen ist das der einzige Anhaltspunkt. Rechts: ✏️ zum Bearbeiten, 🗑️ zum Löschen.

Das Suchfeld in der oberen Leiste filtert die Liste beim Tippen, allerdings nur nach dem Namen. Typ, Kommentar und Fingerabdruck bleiben aussen vor. Enthält der Tresor keinen Schlüssel, zeigt die Ansicht « No SSH keys — Add a key to start using SSH/SFTP. »

Die Schlüsselansicht von Hawser mit einer Liste von SSH-Schlüsseln, ihrem Typ und der Zahl der Verwendungen
Mehr verrät die Liste über einen Schlüssel nicht: Name, Prüfstatus, Typ, ob eine Passphrase gesetzt ist, und wie viele Profile ihn verwenden.

Ein Schlüsselpaar erzeugen

Die Schaltfläche « ✨ Générer » (Erzeugen) sitzt in der oberen Leiste links neben « + Clé » (+ Schlüssel) und erscheint nur in der Schlüsselansicht der nativen App. Der Dialog « Générer une clé SSH » bietet genau drei Verfahren an.

Eintrag in der ListeWann geeignet
Ed25519 — recommandéDie Voreinstellung. Kurzer, schneller Schlüssel, den jeder Server ab OpenSSH 6.5 (2014) akzeptiert.
RSA 4096 bitsFür alte Server oder Netzwerkgeräte ohne Ed25519. Die Berechnung dauert mehrere Sekunden.
RSA 2048 bits (legacy)Nur wenn eine äussere Vorgabe es verlangt. Sonst meiden.

Die übrigen Felder heissen Nom (Name), Commentaire (Kommentar, optional), Passphrase (optional) und Confirmer la passphrase (Passphrase bestätigen). Der Kommentar wird in den Schlüssel geschrieben und erscheint am Ende der öffentlichen Zeile – tragen Sie dort etwas Wiedererkennbares ein, etwa julien@mac-mini. Weichen die beiden Passphrasenfelder voneinander ab, startet die Erzeugung nicht: « Les passphrases ne correspondent pas. » Gerechnet wird ausschliesslich lokal, nichts geht über das Netz.

Bis dahin: einen brauchbaren Schlüssel erzeugen

ssh-keygen -t ed25519 -C "julien@mac-mini" -f ~/.ssh/prod_deploy

Einzugeben im Terminal von macOS. Der Befehl legt ~/.ssh/prod_deploy (privater Teil) und ~/.ssh/prod_deploy.pub (öffentlicher Teil) an. Den privaten Teil importieren Sie anschliessend wie unten beschrieben in Hawser.

Einen Schlüssel importieren

  1. Ansicht « Clés » → blaue Schaltfläche « + Clé » oben rechts. Der Dialog « New SSH key » öffnet sich, der Cursor steht im Feld Name.
  2. Vergeben Sie einen Namen. Unter diesem Namen wählen Sie den Schlüssel später in den Verbindungsprofilen aus.
  3. Fügen Sie den vollständigen Inhalt der privaten Schlüsseldatei in das Feld « Clé privée (PEM) » (Privater Schlüssel) ein, einschliesslich der Zeilen -----BEGIN… und -----END….
  4. Tragen Sie die Passphrase des Schlüssels ein, sofern er eine hat.
  5. Klicken Sie auf « 🧪 Validate ». Am Fuss des Dialogs muss grün « ✓ Clé ssh-ed25519 » erscheinen (oder der tatsächliche Typ).
  6. Klicken Sie auf « Save ». Die Meldung « Key added » bestätigt die Speicherung.

Es gibt keine Dateiauswahl: Importiert wird per Kopieren und Einfügen. Am sichersten geht das über die Zwischenablage statt über einen Texteditor, der die Zeilenumbrüche umschreiben kann.

pbcopy < ~/.ssh/prod_deploy

Derselbe Dialog lässt sich über ⌘K → « New SSH key » öffnen oder aus einem Verbindungsprofil heraus, Reiter « Authentication » → Schaltfläche « + New ». Im zweiten Fall ist der neu angelegte Schlüssel in der Liste des Profils bereits ausgewählt.

« Save » prüft den Schlüssel in jedem Fall erneut, auch wenn Sie « 🧪 Validate » schon angeklickt haben. Schlägt die Prüfung fehl, wird nichts gespeichert.

MeldungUrsache und Abhilfe
« ✗ Clé vide »Das PEM-Feld ist leer.
« ✗ Passphrase incorrecte (la clé refuse de se déchiffrer). »Der Schlüssel ist verschlüsselt, und die eingegebene Passphrase öffnet ihn nicht.
« ✗ parse: … »Der Block lässt sich nicht dekodieren: kein OpenSSH-Format, abgeschnittenes PEM oder verlorene Zeilenumbrüche.
« ✗ Pas une clé OpenSSH (publique ou privée) reconnue. »Der eingefügte Text ist überhaupt kein Schlüssel.
« Name required » / « Key required »Eines der beiden Felder war beim Speichern leer.
« Invalid key/passphrase »Die erneute Prüfung beim Speichern ist fehlgeschlagen; geschrieben wurde nichts.

Öffentlichen Schlüssel ausbringen

Der Server braucht den öffentlichen Teil. Hawser zeigt ihn nirgends an und bietet keine Schaltfläche zum Kopieren; bei einem importierten Schlüssel enthält der Tresoreintrag nicht einmal einen öffentlichen Teil. Sie müssen ihn ausserhalb der App aus der privaten Datei ableiten.

ssh-keygen -y -f ~/.ssh/prod_deploy

Der Befehl gibt eine einzige Zeile aus: ssh-ed25519 AAAA… julien@mac-mini. Genau diese Zeile muss in die Datei ~/.ssh/authorized_keys des entfernten Kontos.

Schlüssel und Host verbinden

  1. Ansicht Connections → ✏️ auf der Karte des Hosts (oder « + New » für ein neues Profil).
  2. Reiter « Authentication » des Dialogs.
  3. Stellen Sie die Auswahl von « Password » auf « Clé SSH » (SSH-Schlüssel) um.
  4. Wählen Sie den Schlüssel in der Liste « Saved SSH key ». Geprüfte Schlüssel tragen dort ein ✓.
  5. « Save ». Danach zum Testen ⌨️ Shell oder 📁 SFTP auf der Karte.

Ein Profil im Modus « Clé SSH » ohne ausgewählten Schlüssel zu speichern, wird abgelehnt: « Select an SSH key ».

Jedes Profil trägt seinen eigenen Schlüssel, auch bei Zwischenstationen: Läuft der Host über einen Bastion-Host (Reiter « Advanced » → « Jump Host (bastion) »), meldet sich der Bastion mit dem Schlüssel seines Profils an und der Zielhost mit seinem eigenen. Die Kette ist auf vier Stufen begrenzt (« jump host chain too deep (limit 4) »).

Fehler beim VerbindenWas er bedeutet
« [Erreur] Clé SSH introuvable (vérifie l'host : authType=key sans keyId valide) »Das Profil steht auf Schlüsselanmeldung, der verwiesene Schlüssel existiert aber nicht mehr – üblicherweise wurde er gelöscht.
« [Erreur] decode private key: … »Der gespeicherte Inhalt lässt sich nicht als privater Schlüssel lesen: versehentlich ein öffentlicher Schlüssel eingefügt oder ein abgeschnittenes PEM.
« [Erreur] authentication failed »Der Schlüssel ist in Ordnung, der Server weist ihn ab: Der öffentliche Teil fehlt in authorized_keys, die Dateirechte stimmen nicht, oder im Profil steht der falsche Benutzername.

Diese Meldungen erscheinen rot im Terminal und zusätzlich als Mitteilung. Siehe auch Eine SSH-Sitzung öffnen.

Der SSH-Agent von macOS

Die Engine von Hawser kann sich beim SSH-Agenten des Systems anmelden: Sie verbindet sich mit dem Socket SSH_AUTH_SOCK, fragt die geladenen Identitäten ab und lässt dort signieren. So bleiben die Schlüssel ausserhalb des Tresors.

Der einzige Umweg führt über den JSON-Import: ⌘K → « Importer config OpenSSH (~/.ssh/config) » (OpenSSH-Konfiguration importieren) → Reiter « Full JSON ».

{
  "configs": [
    {
      "id": "prod-01-agent",
      "protocol": "ssh",
      "name": "prod-01 (agent)",
      "host": "10.0.0.12",
      "port": 22,
      "username": "julien",
      "authType": "agent",
      "keyId": "",
      "initialPath": "."
    }
  ]
}

Die Objekte landen unverändert im Tresor, ohne Formatprüfung. Kontrollieren Sie Ihr JSON vor dem Einfügen: Trägt authType einen Wert, den die Engine nicht kennt, fällt sie auf den Agent-Modus zurück – das ergibt einen stillen Versuch und ein unverständliches « authentication failed ». Die agentspezifischen Fehler lauten « SSH_AUTH_SOCK unavailable: … » (kein Agent antwortet) und « agent identities: … » (der Agent weigert sich, seine Identitäten aufzuzählen). Prüfen Sie zuerst ssh-add -l im Terminal.

Wo die Schlüssel liegen, und Touch ID

Hawser schreibt nie nach ~/.ssh. Das PEM und seine Passphrase liegen in Ihrer verschlüsselten .ivault-Datei, und jedes Speichern eines Schlüssels löst sofort einen Schreibvorgang auf die Platte aus – ein Fehlschlag meldet sich unmittelbar als Mitteilung. Hat sich der Tresor zwischenzeitlich gesperrt, scheitert das Speichern mit « no vault open »: entsperren und erneut versuchen. Siehe Was verschlüsselt wird.

Vor jedem Schreibvorgang legt Hawser eine verschlüsselte Kopie des Tresors unter ~/Library/Application Support/ch.ilygo.hawser/vault-backups/ ab. Ihre Schlüssel liegen also mehrfach auf der Platte – stets verschlüsselt, nie im Klartext.

Touch ID schützt nicht die einzelnen Schlüssel, sondern entsperrt den Tresor. Der Hauptschlüssel liegt im Schlüsselbund und wird nach der biometrischen Anmeldung freigegeben; ist der Tresor einmal offen, sind alle SSH-Schlüssel ohne weitere Nachfrage nutzbar. Eine SSH-Signatur durch die Secure Enclave gibt es nicht, ebenso wenig hardwaregebundene Schlüssel.

Die Sicherheitsansicht von Hawser mit der Einstellung für die automatische Sperre
Ist der Tresor einmal offen, bringt allein die automatische Sperre (standardmässig nach 15 Minuten) Ihre Schlüssel wieder in Sicherheit.

Ist der Tresor mit der Cloud gekoppelt, prüft Hawser beim Anlegen eines neuen Schlüssels zuerst das Kontingent des Abos und kann den Vorgang abweisen: « ⚠ Quota cloud atteint ». An den Server geht dabei nur ein Zähler, nie ein Inhalt. Siehe Tresore synchronisieren.

Umbenennen, ersetzen, löschen

Die Schaltfläche ✏️ einer Zeile öffnet den Dialog « Edit key », vorausgefüllt mit Name und Inhalt des Schlüssels.

Bei einem Schlüssel ohne Passphrase lässt sich alles ändern: Sie können den Namen anpassen und das PEM ersetzen. Beim Speichern wird der Schlüssel vollständig neu geprüft, und die Meldung « Key updated » bestätigt.

Einen Schlüssel ersetzen (Rotation)

Eine Rotationsfunktion gibt es nicht. Der Vorgang ist Handarbeit, und die Reihenfolge zählt: Ordnen Sie den neuen Schlüssel überall zu, bevor Sie den alten löschen.

  1. Erzeugen Sie das neue Paar ausserhalb von Hawser und tragen Sie seinen öffentlichen Teil auf jedem betroffenen Server in ~/.ssh/authorized_keys ein, neben dem alten.
  2. Importieren Sie den neuen privaten Schlüssel unter einem eigenen Namen in Hawser (« + Clé »).
  3. In jedem Profil, das den alten Schlüssel benutzt: ✏️ → Reiter « Authentication » → den neuen unter « Saved SSH key » auswählen → Save. Der Verwendungszähler in der Schlüsselansicht sagt Ihnen, wie viele Profile noch offen sind.
  4. Öffnen Sie auf jedem Server eine Sitzung zur Kontrolle.
  5. Löschen Sie den alten Schlüssel in Hawser und entfernen Sie danach seine Zeile aus authorized_keys auf den Servern.

Löschen

Die rote Schaltfläche 🗑️ fragt nach – « Delete key », « Delete "<Name>" ? » –, entfernt den Schlüssel und schreibt den Tresor neu. Die Meldung « Deleted "<Name>" » bestätigt; scheitert das Schreiben (« Delete failed »), erscheint der Schlüssel wieder in der Liste.