Warum die Ausgabe von ssh-agent auswerten?

67

Zum laufen muss ssh-agentich benutzen

eval $(ssh-agent)

Warum muss ich evaldas 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 .

jx12345
quelle
Wer sagt, dass Sie eval verwenden müssen? Was diktiert das? Ein bisschen mehr Kontext würde helfen.
0xSheepdog
9
@ 0xSheepdog die manSeite, für den Anfang ...
Jasonwryan
Die Anwendungsfälle sind anscheinend in der Manpage dokumentiert. Was "warum ist es auf eine bestimmte Art gestaltet" betrifft ... zuckt die Achseln .
0xSheepdog
5
Wiederholend, es ist nicht so, ssh-agentdass es "so entworfen" ist, es ist Unix / Linux, weil es ssh-agentin 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.)
Michael

Antworten:

79

ssh-agent gibt die Umgebungsvariablen aus, die Sie für die Verbindung benötigen:

shadur@proteus:~$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-492P67qzMeGA/agent.7948; export SSH_AUTH_SOCK;
SSH_AGENT_PID=7949; export SSH_AGENT_PID;
echo Agent pid 7949;
shadur@proteus:~$ 

Durch einen Aufruf evalladen Sie diese Variablen sofort in Ihre Umgebung.

Warum ssh-agentkann 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, evalindem Sie verwenden, ssh-agent utilitywo utilitysich Ihre Anmeldeshell befindet, Ihren Fenstermanager oder was auch immer, um die SSH-Umgebungsvariablen festzulegen. Dies wird auch im Handbuch erwähnt.

Shadur
quelle
Danke, das erklärt klar, was los ist und ich bekomme das, aber warum ist es so entworfen, anstatt so entworfen, dass es automatisch die Variablen zur Umgebung hinzufügt? Fügt es irgendeine Art Flexibilität hinzu ???
JX12345
4
@ jx12345 Sie können das umgehen, evalindem Sie verwenden, ssh-agent utilitywo utilitysich 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.
Kusalananda
@ kusalananda Richtig; Fühlen Sie sich frei, dies als Bearbeitung hinzuzufügen. Ich gehe jetzt ins Bett oder ich mache es selbst.
Shadur
5
@ jx12345 Weil es Variablen zu seiner eigenen Umgebung hinzufügen kann, aber der Umgebung Ihrer Shell keine Variablen hinzufügen kann, weil es nicht Ihre Shell ist.
user253751
3
@ jx12345 Zur Verdeutlichung: Wenn ich env-Variablen zu meinem übergeordneten Prozess hinzufügen oder ändern kann, kann dies möglicherweise Auswirkungen auf den übergeordneten Prozess usw. bis zu PID 1 haben. Dies wird als "Rechteerweiterung" bezeichnet und ist aus Sicherheitsgründen eine sehr schlechte Sache Standpunkt.
Shadur