Para correr ssh-agenttengo que usar
eval $(ssh-agent)
¿Por qué tengo que evalla 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 .

manpágina, para empezar ...ssh-agentes que esté "diseñado de esta manera", es unix / linux, porque sessh-agentejecuta 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() { evalssh-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-agentgenera las variables de entorno que necesita para conectarse:Al llamar
eval, carga inmediatamente esas variables en su entorno.En cuanto a por qué
ssh-agentno 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
evaluso dessh-agent utilitydóndeutilityestá 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
evalusando el lugarssh-agent utilitydondeutilityestá 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.