Ich benutze Agent-Weiterleitung, es funktioniert gut. Der ssh-Client teilt jedoch alle registrierten (ssh-add) Schlüssel mit dem Remote-Server. Ich habe persönliche Schlüssel, die ich nicht mit dem Remote-Server teilen möchte. Gibt es eine Möglichkeit zu beschränken mit Schlüsseln weitergeleitet werden?
Ich habe mehrere github-accounts und aws accounts. Ich möchte nicht alle ssh-Schlüssel teilen.
Sieht so aus, als ob es mit OpenSSH 6.7 möglich ist - es unterstützt die Unix-Socket-Weiterleitung. Wir könnten sekundären ssh-agent mit bestimmten Schlüsseln starten und seinen Socket an den entfernten Host weiterleiten. Leider ist diese Version zum Zeitpunkt des Schreibens nicht für meine Server / Client-Systeme verfügbar.
Ich habe eine andere mögliche Lösung gefunden, mit socat und Standard-SSH-TCP-Weiterleitung.
Anfragen an ssh Agent gehen so:
%Vor%socat
muss auf dem Remote-Host installiert sein. Aber es sieht so aus, als wäre es möglich einfach vorkompilierte Binärdateien hochzuladen (ich habe es unter FreeBSD getestet und es funktioniert). ssh-add
hinzugefügt werden, die Weiterleitung erfordert 2 zusätzliche Prozesse (socat), die ausgeführt werden müssen, mehrere ssh-Verbindungen müssen manuell verwaltet werden. Also, diese Antwort ist wahrscheinlich nur ein Beweis des Konzepts und keine Produktionslösung.
Mal sehen, wie es geht.
Führen Sie einen neuen ssh-agent aus. Es wird für Schlüssel verwendet, die nur auf Remote-Hosts angezeigt werden sollen.
%Vor% Es druckt einige Variablen. Setze sie nicht: Du verlierst deinen Haupt-ssh-Agenten. Setzen Sie eine andere Variable mit dem vorgeschlagenen Wert von SSH_AUTH_SOCK
:
Stellen Sie dann die Weiterleitung von einem TCP-Port zu unserem ssh-agent-Socket lokal her:
%Vor% socat
wird im Hintergrund ausgeführt. Vergiss nicht kill
, wenn du fertig bist.
Fügen Sie einige Schlüssel mit ssh-add
hinzu, führen Sie sie jedoch mit der modifizierten Umgebungsvariablen SSH_AUTH_SOCK
:
Verbinden Sie sich mit dem Remote-Host mit Port-Weiterleitung. Ihr main (nicht sekundärer) ssh-Agent wird für die Authentifizierung auf HostA verwendet (wird aber nicht von ihm zur Verfügung gestellt, da wir ihn nicht weiterleiten).
%Vor%Stellen Sie auf dem entfernten Host die Weiterleitung von ssh-agent socket zum selben TCP-Port wie auf Ihrem Heim-Host her:
%Vor% socat
wird im Hintergrund ausgeführt. Vergiss nicht kill
, wenn du fertig bist. Es wird nicht automatisch beendet, wenn Sie die ssh-Verbindung schließen.
Auf Remote-Host-Set Umgebungsvariable für ssh zu wissen, wo Agent-Socket (aus dem vorherigen Schritt) ist. Dies kann in derselben ssh-Sitzung oder parallel dazu erfolgen.
%Vor%Es ist jetzt möglich, Schlüssel des sekundären Agenten auf dem Remote-Host zu verwenden:
%Vor%Die Schlüssel selbst werden nicht geteilt, indem Sie Ihren Agenten weiterleiten. Was weitergeleitet wird, ist die Möglichkeit, den ssh-agent auf Ihrem lokalen Host zu kontaktieren. Entfernte Systeme senden Challenge-Anforderungen über den Weiterleitungstunnel. Sie fordern die Schlüssel nicht selbst an.
Siehe Ссылка für eine grafische Erklärung.
Tags und Links linux github amazon-web-services ssh ssh-keys