Mehrere SSH-keys

bolshi

bolshi

Aktives Mitglied
Thread Starter
Dabei seit
13.03.2009
Beiträge
775
Reaktionspunkte
19
Moin,
ich möchte meine Server via SSH auf Authentifizierung mittels Public-Key-Verfahren umstellen. Nu sind's einige. Sobald ich "ssh-keygen -b 4096" eingebe, sehe ich im .ssh-Verzeichnis drei Dateien: id_rsa, id_rsa.pub und known_hosts. Jetzt hab ich mir mal die known_hosts angeschaut. Da steht ne ganze Menge drin.
In der id_rsa.pub steht ein Schlüssel. Ist es sicherheitstechnisch ok, wenn alle Server mit demselben Schlüssel arbeiten?
 
Nein, ist es nicht. Pro Server ein Public/ Private Key Pair. Jeder Private Key ist mit einer Passphrase zu schützen. Auf dem jeweiligen Host darf nur der eine, für den Zugriff gedachte Public Key drinstehen.

Public Key Auth macht man nicht um sich das Leben einfacher zu machen, sondern den Zugriff besser abzusichern.
 
  • Gefällt mir
Reaktionen: zagdul, bolshi und dg2rbf
Hab mir den ersten generierten Schlüssel in der id_rsa.pub angeschaut. Sieht sehr anonym aus. Bei x Servern stellt sich mir die Frage: Gibt's eine Möglichkeit, dass ich jedem Kind einen Namen derart gebe, dass ich in der id_rsa.pub adhoc ablesen kann, wer wo hingehört?
 
Nein, ist es nicht. Pro Server ein Public/ Private Key Pair. Jeder Private Key ist mit einer Passphrase zu schützen. Auf dem jeweiligen Host darf nur der eine, für den Zugriff gedachte Public Key drinstehen.

Public Key Auth macht man nicht um sich das Leben einfacher zu machen, sondern den Zugriff besser abzusichern.
Hmm, mal ne Frage hierzu.

Klar, man soll prinzipiell verschiedene Accounts mit verschiedenen Passwörter sichern, damit wenn ein Passwort kompromittiert wurde, nicht mehrere Accounts betroffen sind.

Bei public-private key pairs finde ich das aber ehrlich gesagt nicht mehr unbedingt erforderlich.

Passwörter kannst du durch verschiedene Methoden remote knacken. Da braucht es keinen Zugriff auf deinen lokalen Rechner.

Der pubkey ist ja erst mal für einen Angreifer völlig wertlos. Um an den private key zu kommen, muss er sich aber (wie auch immer) Zugang zum lokalen Rechner verschaffen. Wenn er diesen dann aber hat, dann bringt es in meinen Augen doch keinerlei Sicherheitsgewinn, wenn ich in ~/.ssh mehrere key pairs rumliegen habe. Der Angreifer nimmt sie einfach alle mit.

Oder übersehe ich da jetzt was?
 
  • Gefällt mir
Reaktionen: cyberfeller, thorstenhirsch, mj und eine weitere Person
Hab mir den ersten generierten Schlüssel in der id_rsa.pub angeschaut. Sieht sehr anonym aus. Bei x Servern stellt sich mir die Frage: Gibt's eine Möglichkeit, dass ich jedem Kind einen Namen derart gebe, dass ich in der id_rsa.pub adhoc ablesen kann, wer wo hingehört?

der ssh-keygen hat doch eine möglichkeit einen comment in das keyfile zu schreiben.
da kannst ja z.b. den host namen hinterlegen.
es geht wohl auch einfach mit einem texteditor:
https://serverfault.com/questions/442933/add-comment-to-existing-ssh-public-key

abgesehen davon kannst dem keygen auch sagen wie die datei heißen soll.
das id_verfahren ist der standard name.
 
  • Gefällt mir
Reaktionen: bolshi und dg2rbf
... in meinen Augen doch keinerlei Sicherheitsgewinn, wenn ich in ~/.ssh mehrere key pairs rumliegen habe. Der Angreifer nimmt sie einfach alle mit.

Bin ich bei dir. Ich mach jetzt mal 5 Server mit demselben key pair und beobachte den Kram ein Jahr lang :)
 
Verstehe gerade nicht was du machen willst.

Du hast mehrere Server. Auf diese willst du von deiner lokalen Workstation zugreifen, oder nicht? Dein Problem ist jetzt, dass deine lokale known_hosts-Datei unübersichtlich ist?

Außerdem: Wenn du gerade am Umstellen bist, solltest du gleich auf Ed25519 setzen.
 
Du hast mehrere Server. Auf diese willst du von deiner lokalen Workstation zugreifen, oder nicht? Dein Problem ist jetzt, dass deine lokale known_hosts-Datei unübersichtlich ist?

er hat mehrere server und wollte einen key pro server erstellen, um den überblick nicht zu verlieren, welcher key für welchen ist, wolle er wissen wie man das am besten erkennt.
 
  • Gefällt mir
Reaktionen: ElectricWizard
Ok. Dann verstehe ich das Problem aber trotzdem nicht. Die Keys der Server befinden sich ja auf dem Server. Die habe ich ja nicht lokal alle in einem Ordner rumliegen.
 
wenn ich in ~/.ssh mehrere key pairs rumliegen habe.
Oder übersehe ich da jetzt was?

Ja: Du sollst auf deiner Workstation nur die Public Keys der Server liegen haben, auf die du zugreifst. Die Private Keys der Server haben dadrauf gar nichts verloren.

Die Sache ist auch die, wenn du z.B. von einem zweiten Rechner auf eine Teilmenge deiner Server zugreifen willst (z.B. von dem Mac im Hobbykeller will ich nur auf meine "Spielraspis" zugreifen), dann benötigst du unterschiedliche Login-Keys.
 
Vielleicht sollte der eine oder andere sich noch mal intensiver mit Priv-Pub Key Auth auseinandernehmen.

  • pro Server ein Keypair
  • jedes Keypair hat eine andere Passphrase
  • in der authorized_keys liegt nur Public Key des für diesen Server erstellten Keypairs
Wenn in der authorized_keys mehrere public Keys stehen, dann hat jeder dieser Keys Zugang. Dein Angreifer muss die also nur irgendeinen deiner Keys mopsen. Machst du es aber so wie ich es vorgeschlagen habe, dann braucht er genau den einen private Keys, der zu dem public Key passt.
 
  • Gefällt mir
Reaktionen: dg2rbf
Ja: Du sollst auf deiner Workstation nur die Public Keys der Server liegen haben, auf die du zugreifst. Die Private Keys der Server haben dadrauf gar nichts verloren.
Ich habe doch keine privaten keys der Server auf meinem MacBook. Das key pair wird doch auf meinem lokalen MacBook erstellt und der public key und nur der kommt auf den Server und steht dort in authorized_keys. Der private key ist doch nur auf dem MacBook und dort m muss er ja auch sein, sonst funktioniert das ja nicht.

Vielleicht sollte der eine oder andere sich noch mal intensiver mit Priv-Pub Key Auth auseinandernehmen.

  • pro Server ein Keypair
  • jedes Keypair hat eine andere Passphrase
  • in der authorized_keys liegt nur Public Key des für diesen Server erstellten Keypairs
Wenn in der authorized_keys mehrere public Keys stehen, dann hat jeder dieser Keys Zugang. Dein Angreifer muss die also nur irgendeinen deiner Keys mopsen. Machst du es aber so wie ich es vorgeschlagen habe, dann braucht er genau den einen private Keys, der zu dem public Key passt.

Das ist schon mir schon klar wie das funktioniert. Kannst mir ruhig glauben.

Aber warum soll nun die Sicherheit des Servers besser sein, wenn ich für jeden Server, auf den ich mich einlogge, ein eigenes key pair erzeuge?

Wie oben geschrieben, damit ein Angreifer überhaupt was ausrichten kann, braucht er den private key und somit also auch Zugriff auf mein lokales MacBook. Wenn er da aber Zugriff hat, dann hat er eben auch alle key pairs und kann die dann halt einfach der Reihe nach durch probieren.

Ich sehe immer noch nicht den Sicherheitsgewinn gegenüber einem einzigen key pair.
 
  • Gefällt mir
Reaktionen: mj und dg2rbf
Ich habe doch keine privaten keys der Server auf meinem MacBook. Das key pair wird doch auf meinem lokalen MacBook erstellt und der public key und nur der kommt auf den Server und steht dort in authorized_keys. Der private key ist doch nur auf dem MacBook und dort m muss er ja auch sein, sonst funktioniert das ja nicht.



Das ist schon mir schon klar wie das funktioniert. Kannst mir ruhig glauben.

Aber warum soll nun die Sicherheit des Servers besser sein, wenn ich für jeden Server, auf den ich mich einlogge, ein eigenes key pair erzeuge?

Wie oben geschrieben, damit ein Angreifer überhaupt was ausrichten kann, braucht er den private key und somit also auch Zugriff auf mein lokales MacBook. Wenn er da aber Zugriff hat, dann hat er eben auch alle key pairs und kann die dann halt einfach der Reihe nach durch probieren.

Ich sehe immer noch nicht den Sicherheitsgewinn gegenüber einem einzigen key pair.

So wie ich das verstanden habe, geht es darum den selben Pub/Private-Key für mehre Server zu verwenden. Also der Key des Servers und nicht der des MacBooks.
 
So wie ich das verstanden habe, geht es darum den selben Pub/Private-Key für mehre Server zu verwenden. Also der Key des Servers und nicht der des MacBooks.
Ok, dann bezeichnen wir das gleiche File unterschiedlich.
 
Gibt's eine Möglichkeit, dass ich jedem Kind einen Namen derart gebe, dass ich in der id_rsa.pub adhoc ablesen kann, wer wo hingehört?
das macht man üblicherweise in der config (man ssh_config).
z.b.:
Code:
Host server1.com
       User me
#      Port 2222
#      PubkeyAuthentication no

Host server2.com
       User me2
       Port 2222
#      PubkeyAuthentication no
#      RequestTTY yes

Host *
       IdentityFile ~/.ssh/%h_id_rsa

IgnoreUnknown UseKeychain
       UseKeychain yes
#IgnoreUnknown AddKeysToAgent
#      AddKeysToAgent yes
durch die zeilen "Host * \ IdentityFile …" wird dann der schlüssel anhand des hostnamens %h gewählt (hier beispielsweise server1.com_id_rsa für den ersten host server1.com; benennung der restlichen keys entsprechend).

Oder übersehe ich da jetzt was?
nö, sehe ich fast genauso. ausser, du musst schlüssel teilen, dann bekommt natürlich jeder host eigene keys.
 
  • Gefällt mir
Reaktionen: bolshi und dg2rbf
Alternativ kann man auch ssh mit dem Parameter -i aufrufen und anschließend eine identify file übergeben. Macht letztlich dasselbe wie die von @Olivetti vorgeschlagene Modifikation an der ssh_config nur eben ad hoc.

Ich habe die Empfehlungen für jeden Server einen individuellen Key zu erstellen auch noch nie wirklich verstanden - sehe das genauso wie @lisanet. Wenn jemand es schafft mir mein MacBook zu entwenden und die FileVault2-Verschlüsselung zu knacken oder wenn jemand aus der Ferne erfolgreich auf mein Dateisystem Zugriff hat spielt es keine Rolle ob ein private key für 100 Server oder 100 private keys für 100 Server entwendet werden. Der Drops ist gelutscht und der Schlüssel muss auf jedem Server einzeln zurückgezogen - also aus der authorized_keys - ausgetragen werden. Im Zweifelsfall ist man da sogar bei nur einem verwendeten Schlüssel schneller, dank ssh, for und sed.
 
  • Gefällt mir
Reaktionen: dg2rbf und lisanet
Das ist, sorry, Bullshit. Aus genau dem Grund hat jeder Key eine Passphrase. Und die ist auch für jeden Key einzigartig.

Was ihr offensichtlich alle nicht versteht: Public Key Auth implementiere ich nicht um mit das Leben leichter, sondern den Zugriff sicherer zu machen.
 
  • Gefällt mir
Reaktionen: dg2rbf
Und als Ergänzung: Wenn es danach geht, dann wäre ein komplexes Kennwort sogar sicherer als Public Key Auth. In deiner Welt muss ich dir dann nur einen Mac klauen oder per Trojaner die Keys. Ein ausreichend komplexes Kennwort, welches nicht aufgeschrieben wurde ist dann sicherer. In meiner Welt müsste ich die die Keys UND die Passphrase zu jedem einzelnen Keys klauen. Das ist 2FA - ich brauche etwas (Key) und ich muss etwas wissen (Passphrase).

Davon ab unterbindet man die Anmeldung als Root per SSH und hinterlegt bei Root auch keine Public Keys. Die Anmeldung erfolgt immer und ausschließlich mit einem nicht privilegiertem Benutzer. Ein Key-Pair wird übrigens für ausschließlich EINEN Benutzer und EINEN Server verwendet.
 
  • Gefällt mir
Reaktionen: dg2rbf
In deiner Welt muss ich dir dann nur einen Mac klauen oder per Trojaner die Keys. Ein ausreichend komplexes Kennwort, welches nicht aufgeschrieben wurde ist dann sicherer. In meiner Welt müsste ich die die Keys UND die Passphrase zu jedem einzelnen Keys klauen. Das ist 2FA - ich brauche etwas (Key) und ich muss etwas wissen (Passphrase).
:D ... dein Haus, dein Auto, dein Boot. Also ok:

:cool:
In meiner Welt müsstest du bei meinem geklauten MacBook erstmal FileVault aushebeln oder wenn du das eine Key-Pair per Trojaner klaust, die Passphrase knacken. Das ist auch bei mir 2FA. Oder siehst du das etwa anders?

In deiner Welt hast du halt mehrere Key-Pairs, wobei da dann die Sicherheit eines einzelnen Key-Pairs identisch mit der Sicherheit meines einzigen Key-Pairs ist. Vorausgesetzt natürlich du hast auch FileVault auf deinem MacBook aktiviert und unsere beiden Passphrases sind beide hinreichend sicher gewählt.

Der Unterschied zwischen unseren Welten ist dann halt nur, dass der Angreifer in deiner Welt (nach dem Knacken von FileVault oder nach dem Klauen per Trojaner) sich dann einfach ein kleinwenig mehr Zeit nehmen muss um mehrere Passphrases zu knacken.

Tja, wenn der Angreifer aber schon in der Lage ist bei meinem geklauten MacBook FileVault auszuhebeln, dann sollten ihm auch mehrere passphrase-geschützte Keys keine Probleme bereiten.

Ach ja, der Angreifer konnte sich dann aj auch, wenn er schon einen Trojaner auf mein oder dein MacBook gebracht hat, das auch mit einem Keylogger schaffen und sich so die Arbeit mit der Passphrase möglicherweise etwas vereinfachen. ;)
 
  • Gefällt mir
Reaktionen: bolshi und dg2rbf
Und noch was.

Wenn du die 2FA etwas robuster machen möchtest, was gegenüber der Passphrase-Lösung meiner Ansicht nach die bessere, sicherere Variante ist, dann solltest du die 2FA auf dem Server implementieren, so dass neben dem Key der Server eben den 2. Faktor anfordert. Sollte man z.B. mit Google-Authentificator und den entsprechenden pam-modulen auf dem Server realisieren können.

:D
 
  • Gefällt mir
Reaktionen: bolshi und dg2rbf
Zurück
Oben Unten