ssh-agent
genera las variables de entorno que necesita para conectarse:
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:~$
Al llamar eval
, carga inmediatamente esas variables en su entorno.
En cuanto a por qué ssh-agent
no puede hacer eso por sí mismo ... Tenga en cuenta la palabra elección. No "no", " no puedo ". En Unix, un proceso solo puede modificar sus propias variables de entorno y pasarlas a los hijos. No puede modificar el entorno de su proceso padre porque el sistema no lo permitirá. Este es un diseño de seguridad bastante básico.
Podrá sortear el eval
uso de ssh-agent utility
dónde utility
está su shell de inicio de sesión, su administrador de ventanas o cualquier otra cosa que necesite tener configuradas las variables de entorno SSH. Esto también se menciona en el manual.
man
página, para empezar ...ssh-agent
es que esté "diseñado de esta manera", es unix / linux, porque sessh-agent
ejecuta en un proceso secundario del shell. Los procesos secundarios no pueden modificar los procesos principales. Pero una función puede: porque se ejecuta en el proceso actual. Por lo que podría escribir una función:do_set_ssh_agent() { eval
ssh-agent; }
y que podría funcionar simplemente como:$ do_set_ssh_agent
. Pero los "programas" no están (típicamente) instalados como "funciones" en Linux / Unix; en cambio, los programas se instalan como archivos, que, como se mencionó, se ejecutan en un proceso secundario. (Los scripts de aprovisionamiento son una excepción, pero ssh-agent es binario.)