IdentitiesOnly in ssh_config

Der OpenSSH-Client bietet die Möglichkeit mehrere Keys zu verwalten. Das ist nützlich, wenn man z.B. für unterschiedliche Server unterschiedliche Keys verwendet. Oder bei gitolite einen Key für Shell-Zugriff besitzt und einen für die git-Repositories selbst wobei nur letzterer auf den Command-Line-Wrapper gitolite-shell gemappt ist.

Für diesen Zweck richtet man in der Datei ~/.ssh/config zwei Hosts mit unterschiedlichen Keys (“Identities” genannt) ein:

Host hostgit
  Hostname git.example.com
  IdentityFile ~/.ssh/id_git

Host hostshell
  Hostname git.example.com
  IdentityFile ~/.ssh/id_shell

Leider ist mit dieser Konfiguration alleine nicht sichergestellt, daß der angegebene Key verwendet wird. Es kann nach wie vor vorkommen, daß genau der falsche Key dem Server geschickt wird. Das liegt daran, daß der ssh-agent eine eigene Logik hat, welche Keys er auswählt und die IdentityFile – Angaben lediglich diese Keys der Liste der möglichen Keys hinzufügen.

Um nun wirklich die Auswahl auf den eingebeben Key einzuschränken, benötigt man die Einstellung IdentitiesOnly – entweder host-spezifisch oder für alle Hosts. In letzterem Fall muß aber für jeden Host explizit ein Key angebenen sein:

Host hostgit
  Hostname git.example.com
  IdentityFile ~/.ssh/id_git
  IdentitiesOnly yes
Host *
  IdentitiesOnly yes