¿Haciendo un ssh-add sobre ssh / slogin si la clave no está en ssh-agent?

10

Cuando estoy ejecutando Gnome, ssh-agent ejecutará ssh-add en slogin / ssh si la identidad no está cargada. Quiero imitar este comportamiento en shells remotos, pero todo lo que encuentro sugiere ejecutar ssh-add al iniciar sesión. Solo quiero ejecutar ssh-add si posteriormente ejecuto slogin / ssh en el shell remoto, no cada vez que inicio sesión.

Pete Ashdown
fuente

Respuestas:

9

Resolví una solución para esto a través de bash shell.

Añadir a .bashrc:

check-ssh-add() {
if [ "$DESKTOP_SESSION" == "" ]; then
  if [[ `ssh-add -l` != *id_?sa* ]]; then 
    ssh-add -t 5h  ## 5 hour ssh-agent expiration
  fi
fi
}

slogin() {
check-ssh-add
/usr/bin/slogin $@
}

ssh() {
check-ssh-add
/usr/bin/ssh $@
}

scp() {
check-ssh-add
/usr/bin/scp $@
}

sftp() {
check-ssh-add
/usr/bin/sftp $@
}
Pete Ashdown
fuente
7

En realidad, hay una forma aún más simple. ssh-add -ldevuelve verdadero (0) si hay claves y falso (1) de lo contrario, por lo que su primera función se puede reemplazar con esto:

check-ssh-add() {
  if ! ssh-add -l >/dev/null; then
      ssh-add -t 5h
  fi
}

 

Relsqui
fuente
1

Aún más simple en la parte "esta es una sesión interactiva" agregar

ssh-add -l &> /dev/null || ssh-add ~/.ssh/my_id
usuario1458574
fuente
0

Las versiones más recientes de OpenSSH pueden agregar la clave al agente en el primer uso, si habilita AddKeysToAgent yesen su ~/.ssh/config.

(Lo aprendí de /superuser//a/1114257/42546 . No estoy seguro de cuál es la etiqueta adecuada de StackOverflow para hacer frente a las respuestas en varios sitios de StackExchange).

Marius Gedminas
fuente