Robisz ssh-add po ssh / slogin, jeśli klucz nie jest w ssh-agent?

10

Kiedy uruchamiam Gnome, ssh-agent uruchomi ssh-add na slogin / ssh, jeśli tożsamość nie zostanie załadowana. Chcę naśladować to zachowanie na zdalnych powłokach, ale wszystko, co znajduję, sugeruje uruchomienie ssh-add podczas logowania. Chcę uruchomić ssh-add tylko wtedy, gdy później uruchomię slogin / ssh na zdalnej powłoce, nie przy każdym logowaniu.

Pete Ashdown
źródło

Odpowiedzi:

9

Opracowałem rozwiązanie tego problemu za pomocą powłoki bash.

Dodaj do .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
źródło
7

Jest jeszcze prostszy sposób. ssh-add -lzwraca true (0), jeśli istnieją klucze, a false (1) w przeciwnym razie, więc pierwszą funkcję można zastąpić następującą:

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

 

Relsqui
źródło
1

Jeszcze prostsze w części „To jest sesja interaktywna”

ssh-add -l &> /dev/null || ssh-add ~/.ssh/my_id
użytkownik1458574
źródło
0

Nowsze wersje OpenSSH można dodać klucz do środka przy pierwszym użyciu, jeśli włączysz AddKeysToAgent yesw twojej ~/.ssh/config.

(Nauczyłem się tego od https://superuser.com/a/1114257/42546 . Nie jestem pewien, jaka jest właściwa etykieta StackOverflow do kopiowania odpowiedzi w różnych witrynach StackExchange.)

Marius Gedminas
źródło