¿Hay alguna manera conveniente de garantizar que todos los inicios de sesión de un usuario determinado (es decir, yo) utilicen el mismo agente ssh? Pirateé un guión para que esto funcionara la mayor parte del tiempo, pero sospeché todo el tiempo que había alguna forma de hacerlo que me había perdido. Además, desde entonces ha habido avances sorprendentes en la tecnología informática, como por ejemplo este sitio web.
Entonces el objetivo aquí es que
- cada vez que inicio sesión en el cuadro, independientemente de si es a través de SSH, o en una sesión gráfica iniciada desde gdm / kdm / etc, o en una consola:
- si mi nombre de usuario no se está
ssh-agent
ejecutando actualmente , se inicia uno, se exportan las variables de entorno y sessh-add
llama. - de lo contrario, las coordenadas del agente existente se exportan en las variables de entorno de la sesión de inicio de sesión.
- si mi nombre de usuario no se está
Esta facilidad es especialmente valiosa cuando la caja en cuestión se usa como un punto de relevo cuando se ssh
ingresa en una tercera caja. En este caso, evita tener que escribir la frase de contraseña de la clave privada cada vez que ingresa y luego desea, por ejemplo, hacer git push
o algo.
El script que se proporciona a continuación hace esto de manera confiable, aunque falló recientemente cuando X se bloqueó y luego comencé otra sesión gráfica. Es posible que haya habido otros problemas en ese caso.
Aquí está mi guión de malo-es-bueno. Lo obtengo de mi .bashrc
.
# ssh-agent-procure.bash
# v0.6.4
# ensures that all shells sourcing this file in profile/rc scripts use the same ssh-agent.
# copyright me, now; licensed under the DWTFYWT license.
mkdir -p "$HOME/etc/ssh";
function ssh-procure-launch-agent {
eval `ssh-agent -s -a ~/etc/ssh/ssh-agent-socket`;
ssh-add;
}
if [ ! $SSH_AGENT_PID ]; then
if [ -e ~/etc/ssh/ssh-agent-socket ] ; then
SSH_AGENT_PID=`ps -fC ssh-agent |grep 'etc/ssh/ssh-agent-socket' |sed -r 's/^\S+\s+(\S+).*$/\1/'`;
if [[ $SSH_AGENT_PID =~ [0-9]+ ]]; then
# in this case the agent has already been launched and we are just attaching to it.
##++ It should check that this pid is actually active & belongs to an ssh instance
export SSH_AGENT_PID;
SSH_AUTH_SOCK=~/etc/ssh/ssh-agent-socket; export SSH_AUTH_SOCK;
else
# in this case there is no agent running, so the socket file is left over from a graceless agent termination.
rm ~/etc/ssh/ssh-agent-socket;
ssh-procure-launch-agent;
fi;
else
ssh-procure-launch-agent;
fi;
fi;
Por favor, dime que hay una mejor manera de hacer esto. Además, por favor, no discutas las inconsistencias / fallas (por ejemplo, poner var
cosas etc
); Escribí esto hace un tiempo y desde entonces he aprendido muchas cosas.