Aby uruchomić, ssh-agent
muszę użyć
eval $(ssh-agent)
Dlaczego mam do eval
wyjścia ssh-agent
?
Dlaczego nie jest tak zaprojektowany, że mogę go po prostu uruchomić?
Uwaga: Backticks (`) są usuwane, ponieważ są przestarzałe. Możesz na przykład przeczytać więcej na ten temat tutaj .
man
strona, na początek ...ssh-agent
że jest „zaprojektowany w ten sposób”, jest to unix / linux, ponieważssh-agent
działa w potomnym procesie powłoki. Procesy potomne nie mogą modyfikować procesów macierzystych. Ale funkcja może: ponieważ działa w bieżącym procesie. Więc można napisać funkcję:do_set_ssh_agent() { eval
ssh-agent; }
i które mogą być uruchamiane po prostu jako:$ do_set_ssh_agent
. Ale „programy” nie są (zazwyczaj) instalowane jako „funkcje” w systemie Linux / UNIX; zamiast tego programy są instalowane jako pliki, które, jak wspomniano, działają w procesie potomnym. (Skrypty zaopatrzenia są wyjątkiem, ale ssh-agent jest binarny.)Odpowiedzi:
ssh-agent
wypisuje zmienne środowiskowe, które musisz połączyć:Dzwoniąc
eval
natychmiast ładujesz te zmienne do swojego środowiska.Jeśli
ssh-agent
nie możesz tego zrobić sam ... Zwróć uwagę na wybór słowa. Nie „nie”, „ nie ”. W Uniksie proces może modyfikować tylko własne zmienne środowiskowe i przekazywać je dzieciom. Nie może modyfikować środowiska procesu nadrzędnego, ponieważ system na to nie zezwala. To dość podstawowy projekt bezpieczeństwa.Można obejść
eval
stosującssh-agent utility
gdzieutility
jest twoja powłoka logowania, Twój menedżer okien lub cokolwiek innego, co musi mieć zmienne środowiskowe SSH set. Jest to również wspomniane w instrukcji.źródło
eval
, używającssh-agent utility
gdzieutility
jest twoja powłoka logowania, menedżer okien lub cokolwiek innego, co wymaga ustawienia zmiennych środowiskowych SSH. Jest to również wspomniane w instrukcji. Żadne narzędzie zewnętrzne nie może nigdy ustawiać zmiennych w środowisku wywołującym.