Zum laufen muss ssh-agent
ich benutzen
eval $(ssh-agent)
Warum muss ich eval
das ausgeben ssh-agent
?
Warum ist es nicht so konzipiert, dass ich es einfach ausführen kann?
Hinweis: Backticks (`) wurden entfernt, da sie veraltet sind. Hier können Sie zum Beispiel mehr darüber lesen .
man
Seite, für den Anfang ...ssh-agent
dass es "so entworfen" ist, es ist Unix / Linux, weil esssh-agent
in einem Kindprozess der Shell läuft. Untergeordnete Prozesse können übergeordnete Prozesse nicht ändern. Aber eine Funktion kann: weil sie im laufenden Prozess läuft. So könnten Sie eine Funktion schreiben:do_set_ssh_agent() { eval
ssh-agent; }
und ausgeführt werden könnte einfach so:$ do_set_ssh_agent
. Aber "Programme" werden in Linux / Unix (normalerweise) nicht als "Funktionen" installiert. Stattdessen werden Programme als Dateien installiert, die wie erwähnt in einem untergeordneten Prozess ausgeführt werden. (Sourcing-Skripte sind eine Ausnahme, aber ssh-agent ist binär.)Antworten:
ssh-agent
gibt die Umgebungsvariablen aus, die Sie für die Verbindung benötigen:Durch einen Aufruf
eval
laden Sie diese Variablen sofort in Ihre Umgebung.Warum
ssh-agent
kann ich das nicht selbst tun? Nicht "will nicht", " kann nicht ". In Unix kann ein Prozess nur seine eigenen Umgebungsvariablen ändern und sie an untergeordnete Elemente weitergeben. Es kann nicht seine Mutter Prozess Umwelt ändern , weil das System es nicht erlaubt. Dies ist ein ziemlich einfaches Sicherheitsdesign.Sie können das Problem umgehen,
eval
indem Sie verwenden,ssh-agent utility
woutility
sich Ihre Anmeldeshell befindet, Ihren Fenstermanager oder was auch immer, um die SSH-Umgebungsvariablen festzulegen. Dies wird auch im Handbuch erwähnt.quelle
eval
indem Sie verwenden,ssh-agent utility
woutility
sich Ihre Anmeldeshell befindet, Ihren Fenstermanager oder was auch immer, um die SSH-Umgebungsvariablen festzulegen. Dies wird auch im Handbuch erwähnt. Kein externes Dienstprogramm kann jemals Variablen in der aufrufenden Umgebung festlegen.