Führen Sie ein ssh-add für ssh / slogin durch, wenn sich der Schlüssel nicht in ssh-agent befindet?


10

Wenn ich Gnome ausführe, führt ssh-agent ssh-add bei slogin / ssh aus, wenn die Identität nicht geladen ist. Ich möchte dieses Verhalten auf Remote-Shells nachahmen, aber alles, was ich finde, schlägt vor, ssh-add beim Anmelden auszuführen. Ich möchte ssh-add nur ausführen, wenn ich anschließend slogin / ssh auf der Remote-Shell ausführe, nicht jedes Mal, wenn ich mich anmelde.

Antworten:


9

Ich habe eine Lösung dafür über die Bash-Shell erarbeitet.

Zu .bashrc hinzufügen:

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

Es gibt tatsächlich einen noch einfacheren Weg. ssh-add -lGibt true (0) zurück, wenn Schlüssel vorhanden sind, andernfalls false (1), sodass Ihre erste Funktion durch folgende ersetzt werden kann:

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

 


1

Noch einfacher im Teil "Dies ist eine interaktive Sitzung" hinzufügen

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

0

Neuere Versionen von OpenSSH können den Schlüssel bei der ersten Verwendung zum Agenten hinzufügen, wenn Sie dies AddKeysToAgent yesin Ihrem aktivieren ~/.ssh/config.

(Ich habe dies von /superuser//a/1114257/42546 gelernt . Ich bin mir nicht sicher, wie die richtige StackOverflow-Etikette lautet, um Antworten auf verschiedenen StackExchange-Websites zu verarbeiten.)

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.