Para correr ssh-agent
tengo que usar
eval $(ssh-agent)
¿Por qué tengo que eval
la salida de ssh-agent
?
¿Por qué no está diseñado para que pueda ejecutarlo?
Nota: Los Backticks (`) se eliminan porque están en desuso. Puedes leer más sobre esto aquí, por ejemplo .
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.)Respuestas:
ssh-agent
genera las variables de entorno que necesita para conectarse: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 dessh-agent utility
dóndeutility
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.fuente
eval
usando el lugarssh-agent utility
dondeutility
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. Ninguna utilidad externa puede establecer variables en el entorno de llamada.