Fare un ssh-add su ssh / slogin se la chiave non è in ssh-agent?


10

Quando eseguo Gnome, ssh-agent eseguirà ssh-add su slogin / ssh se l'identità non è caricata. Voglio imitare questo comportamento su shell remote, ma tutto ciò che trovo suggerisce di eseguire ssh-add al login. Voglio eseguire ssh-add solo se successivamente eseguo slogin / ssh sulla shell remota, non tutte le volte che eseguo l'accesso.

Risposte:


9

Ho elaborato una soluzione per questo tramite la shell bash.

Aggiungi 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 $@
}

7

In realtà c'è un modo ancora più semplice. ssh-add -lrestituisce vero (0) se ci sono chiavi e falso (1) altrimenti, quindi la tua prima funzione può essere sostituita con questa:

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

 


1

Ancora più semplice nella parte «questa è una sessione interattiva»

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

0

Le versioni più recenti di OpenSSH possono aggiungere la chiave all'agente al primo utilizzo, se abilitato AddKeysToAgent yesin ~/.ssh/config.

(L'ho imparato da https://superuser.com/a/1114257/42546 . Non sono sicuro di quale sia l'etichetta StackOverflow corretta per far fronte alle risposte su vari siti StackExchange.)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.