ssh key erstellen

Linux) (ssh) ist ein relativ sicheres Netzwerkprotokoll f├╝r verschl├╝sselte Netzwerkverbindung f├╝r Kommandozeile Daten├╝bertragung per SFTP. Unter Linux) Ist 'Ssh' Als Konsolenprogramm Meist Eh Dabei, Unter Klzzwxh:0001 Kann Man Per ((P:Putty ssh genauso nutzen. Entweder man logt sic pers Passortabfrage ein oder nutzt das sicherere (=) und bequemere einloggen, bei der sich sein client mit einm Schl├╝ssel identifiziert. {DIV(align=>left, width=>25%, float=>right, class="umijabox")}{DIV} In den folgenden Beispielen ist 'bob' der user, 'localerrechner' Ein Computer von dem man arbeitet und

Schl├╝ssel

Man sollte nach M├Âglichkeit RSA Schl├╝ssel mit einer L├Ąnge von 2048 Bit verwendet werden. Alternativ kann auch ein 1024 Bit DSA Schl├╝ssel eingesetzt werden.

├ťberpr├╝fen

Habe ich eigentlich einen Schl├╝ssel? Diese Frage l├Ąsst sich recht einfach beantworten, dazu einfach auf dem Rechner eine Shell aufmachen und folgendes eintippen: {CODE()} bob@localerrechner:~$ ssh-keygen -l

Daraufhin wird man gefragt welche Datei verwendet werden soll, hier sollte schon das richtige Verzeichnis und die richtige Datei angegeben sein, so dass das dr├╝cken der ENTER Taste ausreicht: {CODE()} Enter file in which the key is (/home/bob/.ssh/id_rsa): {CODE} {DIV(class="cmdoutput")} 2048 a6:70:11:6b:6f:35:1c:25:9a:34:97:f1:04:dc:0f:af /home/bob/.ssh/id_rsa.pub {DIV} In der n├Ąchste Zeile erscheint dann die Information zu dem vorhandenen Schl├╝ssel. In diesem Beispiel handelt es sich um einen Schl├╝ssel f├╝r RSA Verschl├╝sselung mit einer Schl├╝ssell├Ąnge von 2048 Bit. Weiterhin wird noch der Fingerprint des Schl├╝ssels ausgegeben, und die Datei welche analysiert worden ist.

Hier wird der ├Âffentliche Schl├╝ssel untersucht, und wir nehmen an dass es zu dem ├Âffentlichem Schl├╝ssel auch einen privaten Schl├╝ssel gibt. ├ťberpr├╝fen l├Ąsst sich das, in dem das gleiche Verzeichnis in dem sich der ├Âffentliche Schl├╝ssel befindet auf eine ├Ąhnliche Datei ohne des Suffix's .pub befindet: {CODE()} bob@localerrechner:~$ ls -l ~/.ssh/id_rsa {CODE} {DIV(class="cmdoutput")} -rw------- 1 bob bob 1675 9. Jun 18:21 /home/bob/.ssh/id_rsa

Da uns jetzt das Verzeichnis, in dem die Schl├╝ssel gespeichert werden, bekannt ist, k├Ânnen wir es auf weitere Schl├╝ssel untersuchen: {CODE()} bob@localerrechner:~$ ls -l ~/.ssh/ {CODE} {DIV(class="cmdoutput")} insgesamt 60 -rw-r--r-- 1 bob bob 178 31. Jul 00:01 config -rw------- 1 bob bob 672 16. Aug 12:05 id_dsa -rw-r--r-- 1 bob bob 601 16. Aug 12:05 id_dsa.pub -rw------- 1 bob bob 1675 9. Jun 18:21 id_rsa -rw-r--r-- 1 bob bob 1246 20. Jun 20:49 id_rsa.keystore -rw-r--r-- 1 bob bob 393 9. Jun 18:21 id_rsa.pub -rw------- 1 bob bob 18584 10. Aug 15:38 known_hosts -rw-r--r-- 1 bob bob 15270 6. Mai 19:29 known_hosts.old {DIV} Der aufgef├╝hrten Auflistung kann entnommen werden dass noch ein DSA Schl├╝ssel im Verzeichnis vorhanden ist: id_dsa und id_dsa.pub. Detailierte Information zum Schl├╝ssel l├Ąsst sich nun wie folgt herausfinden: {CODE()} bob@localerrechner:~$ ssh-keygen -l -f ~/.ssh/id_dsa.pub {CODE} {DIV(class="cmdoutput")} 1024 0e:e7:40:c9:c1:d8:d9:50:fa:9b:b5:64:66:58:b2:9b /home/bob/.ssh/id_dsa.pub {DIV} Hier handelt es sich um eine 1024 Bit langen DSA Schl├╝ssel.

Sollten die vorherigen Schritte zu keinem Erfolg / keiner Informatin gef├╝hrt haben, so wurde noch kein Schl├╝ssel auf dem Rechner angelegt.

Schl├╝ssel Erzeugen

Ein Schl├╝ssel kann mit dem Programm ssh-keygen erzeugt werden. Beim Aufruf wird noch der Typ der Verschl├╝sselung angegeben (DSA/RSA) und anschlie├čend mit Enter best├Ątigt: {CODE()} bob@localerrechner:~$ ssh-keygen -t dsa {CODE} {DIV(class="cmdoutput")} Generating public/private dsa key pair. Enter file in which to save the key (/home/bob/.ssh/id_dsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/bob/.ssh/id_dsa. Your public key has been saved in /home/bob/.ssh/id_dsa.pub. The key fingerprint is: 0e:e7:40:c9:c1:d8:d9:50:fa:9b:b5:64:66:58:b2:9b bob@localerrechner {DIV} Je nachdem f├╝r welchen Zweck der Schl├╝ssel angelegt wird, kann ein Passwort/passphrase f├╝r den Schl├╝ssel vergeben werden. Wenn der Schl├╝ssel f├╝r die Authentifizierung auf entfernten Rechnern verwendet werden soll, dann lassen wir das Passwort weg.

Beim erzeugen des RSA Schl├╝ssel mit einer L├Ąnge von 2048 Bit, geht man wie folgt vor: {CODE()} bob@localerrechner:~$ ssh-keygen -t rsa -b 2048 {CODE} {DIV(class="cmdoutput")} Generating public/private rsa key pair. Enter file in which to save the key (/home/bob/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/bob/.ssh/id_rsa. Your public key has been saved in /home/bob/.ssh/id_rsa.pub. The key fingerprint is: a6:70:11:6b:6f:35:1c:25:9a:34:97:f1:04:dc:0f:af bob@localerrechner

Sicherheitsl├Âcher

"Ich habe zwar einige Schl├╝ssel im meinem Verzeichnis doch wei├č ich leider nicht ob diese sicher sind?" -- Aufgrund eines Sicherheitslochs in der SSL Bibliothek wurden einige unsicher Schl├╝ssel erzeugt. Debian bietet mit dem Paket openssh-blacklist eine Ansammlung von Fingerprints von betroffenen Schl├╝sseln. Um zu ├╝berpr├╝fen ob die eigenen Schl├╝ssel hiervon betrofen sind kann wie folgt vorgegangen werden: {CODE()} bob@localerrechner:~$ ssh-vulnkey -v {CODE}

/etc/ssh/ssh_host_rsa_key

/etc/ssh/ssh_host_rsa_key:1: Not blacklisted: RSA 2048 ec:96:23:44:0f:cd:7f:74:4c:52:44:2a:6d:a6:0d:94 root@localerrechner

/etc/ssh/ssh_host_dsa_key

/etc/ssh/ssh_host_dsa_key:1: Not blacklisted: DSA 1024 39:38:42:05:49:37:dd:34:46:c3:2c:d3:96:2a:1f:ba root@localerrechner

/home/bob/.ssh/id_rsa

/home/bob/.ssh/id_rsa:1: Not blacklisted: RSA 2048 a6:70:11:6b:6f:35:1c:25:9a:34:97:f1:04:dc:0f:af /home/bob/.ssh/id_rsa.pub

/home/bob/.ssh/id_dsa

/home/bob/.ssh/id_dsa:1: Not blacklisted: DSA 1024 0e:e7:40:c9:c1:d8:d9:50:fa:9b:b5:64:66:58:b2:9b /home/bob/.ssh/id_dsa.pub e {DIV} Wenn nichts zur├╝ck gegeben wird oder der Dateiname mit dem Zusatz "Not blacklisted", so ist nichts ├╝ber die Verwundbarkeit dieser Schl├╝ssel bekannt. Wie der Ausgabe im vorherigen Listing zu sehen ist, wurden auch die Systemschl├╝ssel ├╝berpr├╝ft. Sollte hier eine Meldung mit dem Status "COMPROMISED" oder "Unknown (blacklist file not installed)" so fehlt entweder die ben├Âtigte Blacklistdatei oder aber der Schl├╝ssel ist verwundbar und sollte schnellstm├Âglich neu generiert werden.

known_hosts

Wie finde ich heraus ob ich unsicheren Rechnern vertraue? Die Vertrauensw├╝rdigkeit eines Systems wird durch die Ablage des Schl├╝ssels in die ~/.ssh/known_hosts Datei hergestellt. Wenn der Schl├╝ssel dort eingetragen ist, wird keine Warnung mehr von SSH herausgegeben falls eine Verbindung mit dem System hergestellt wird. Es kann durchaus passieren dass die Datei known_hosts alte Eintr├Ąge Enth├Ąlt welche mittlerweile als unsicher gelten. Dies l├Ąsst sich wie folgt herausfinden: {CODE()} bob@localerrechner:~$ cat ./.ssh/known_hosts | ssh-vulnkey -v - {CODE} {DIV(class="cmdoutput")} -:1: Not blacklisted: RSA 1024 a4:c0:99:fb:1c:fb:88:2c:13:36:cd:a2:d3:1a:b7:5d - -:2: Not blacklisted: RSA 1024 a4:c0:99:fb:1c:fb:88:2c:13:36:cd:a2:d3:1a:b7:5d - -:3: COMPROMISED: RSA 2048 f8:e4:a7:49:7b:cc:72:03:f7:c0:47:51:de:c7:88:52 - -:4: COMPROMISED: RSA 2048 f8:e4:a7:49:7b:cc:72:03:f7:c0:47:51:de:c7:88:52 - -:5: Not blacklisted: RSA 1024 a4:c0:99:fb:1c:fb:88:2c:13:36:cd:a2:d3:1a:b7:5d - -:6: Not blacklisted: RSA 1024 a4:c0:99:fb:1c:fb:88:2c:13:36:cd:a2:d3:1a:b7:5d - -:7: Not blacklisted: RSA 1024 a4:c0:99:fb:1c:fb:88:2c:13:36:cd:a2:d3:1a:b7:5d - -:8: Not blacklisted: RSA 1024 a4:c0:99:fb:1c:fb:88:2c:13:36:cd:a2:d3:1a:b7:5d - -:9: Not blacklisted: RSA 1024 a4:c0:99:fb:1c:fb:88:2c:13:36:cd:a2:d3:1a:b7:5d - -:10: COMPROMISED: RSA 2048 f8:e4:a7:49:7b:cc:72:03:f7:c0:47:51:de:c7:88:52 - -:11: COMPROMISED: RSA 2048 f8:e4:a7:49:7b:cc:72:03:f7:c0:47:51:de:c7:88:52 - -:12: Not blacklisted: RSA 1024 a4:c0:99:fb:1c:fb:88:2c:13:36:cd:a2:d3:1a:b7:5d - -:13: Not blacklisted: RSA 1024 a4:c0:99:fb:1c:fb:88:2c:13:36:cd:a2:d3:1a:b7:5d - -:14: COMPROMISED: RSA 2048 f8:e4:a7:49:7b:cc:72:03:f7:c0:47:51:de:c7:88:52 - -:15: COMPROMISED: RSA 2048 f8:e4:a7:49:7b:cc:72:03:f7:c0:47:51:de:c7:88:52 - -:16: COMPROMISED: RSA 2048 e7:ab:03:c9:1a:ee:72:43:29:6a:c6:d9:67:1f:38:0e - -:17: Not blacklisted: RSA 1024 a4:c0:99:fb:1c:fb:88:2c:13:36:cd:a2:d3:1a:b7:5d - -:18: Not blacklisted: RSA 1024 a4:c0:99:fb:1c:fb:88:2c:13:36:cd:a2:d3:1a:b7:5d - -:19: COMPROMISED: RSA 2048 f8:e4:a7:49:7b:cc:72:03:f7:c0:47:51:de:c7:88:52 - -:20: Not blacklisted: RSA 1024 a4:c0:99:fb:1c:fb:88:2c:13:36:cd:a2:d3:1a:b7:5d - -:21: COMPROMISED: RSA 2048 f8:e4:a7:49:7b:cc:72:03:f7:c0:47:51:de:c7:88:52 - -:22: Not blacklisted: RSA 1024 a4:c0:99:fb:1c:fb:88:2c:13:36:cd:a2:d3:1a:b7:5d - -:23: COMPROMISED: RSA 2048 f8:e4:a7:49:7b:cc:72:03:f7:c0:47:51:de:c7:88:52 - -:24: Not blacklisted: RSA 1024 df:db:e5:3a:bc:83:70:e7:ea:ee:ad:07:64:78:01:06 - -:25: Not blacklisted: RSA 1024 df:db:e5:3a:bc:83:70:e7:ea:ee:ad:07:64:78:01:06 - -:26: Not blacklisted: RSA 1024 a4:c0:99:fb:1c:fb:88:2c:13:36:cd:a2:d3:1a:b7:5d - -:27: COMPROMISED: RSA 2048 f8:e4:a7:49:7b:cc:72:03:f7:c0:47:51:de:c7:88:52 - -:28: Not blacklisted: RSA 1024 df:db:e5:3a:bc:83:70:e7:ea:ee:ad:07:64:78:01:06 - -:29: Not blacklisted: RSA 1024 a4:c0:99:fb:1c:fb:88:2c:13:36:cd:a2:d3:1a:b7:5d - -:30: Not blacklisted: RSA 1024 a4:c0:99:fb:1c:fb:88:2c:13:36:cd:a2:d3:1a:b7:5d - -:31: Not blacklisted: RSA 1024 a4:c0:99:fb:1c:fb:88:2c:13:36:cd:a2:d3:1a:b7:5d - -:32: COMPROMISED: RSA 2048 f8:e4:a7:49:7b:cc:72:03:f7:c0:47:51:de:c7:88:52 - -:33: Not blacklisted: RSA 1024 a4:c0:99:fb:1c:fb:88:2c:13:36:cd:a2:d3:1a:b7:5d - -:34: Not blacklisted: RSA 1024 a4:c0:99:fb:1c:fb:88:2c:13:36:cd:a2:d3:1a:b7:5d - -:35: Not blacklisted: RSA 1024 a4:c0:99:fb:1c:fb:88:2c:13:36:cd:a2:d3:1a:b7:5d - -:36: Not blacklisted: RSA 1024 df:db:e5:3a:bc:83:70:e7:ea:ee:ad:07:64:78:01:06 - -:37: Not blacklisted: RSA 1024 a4:c0:99:fb:1c:fb:88:2c:13:36:cd:a2:d3:1a:b7:5d - -:38: Not blacklisted: RSA 1024 a4:c0:99:fb:1c:fb:88:2c:13:36:cd:a2:d3:1a:b7:5d - -:39: Not blacklisted: RSA 1024 a4:c0:99:fb:1c:fb:88:2c:13:36:cd:a2:d3:1a:b7:5d - -:40: Not blacklisted: RSA 1024 a4:c0:99:fb:1c:fb:88:2c:13:36:cd:a2:d3:1a:b7:5d - -:41: Not blacklisted: RSA 1024 a4:c0:99:fb:1c:fb:88:2c:13:36:cd:a2:d3:1a:b7:5d - -:42: COMPROMISED: RSA 2048 f8:e4:a7:49:7b:cc:72:03:f7:c0:47:51:de:c7:88:52 - -:43: COMPROMISED: RSA 2048 f8:e4:a7:49:7b:cc:72:03:f7:c0:47:51:de:c7:88:52 - -:44: COMPROMISED: RSA 2048 f8:e4:a7:49:7b:cc:72:03:f7:c0:47:51:de:c7:88:52 - -:45: COMPROMISED: RSA 2048 f8:e4:a7:49:7b:cc:72:03:f7:c0:47:51:de:c7:88:52 - -:46: Not blacklisted: RSA 1024 a7:28:65:88:78:cb:40:5c:ae:57:60:dc:1d:c1:ba:54 - -:47: Not blacklisted: RSA 1024 a7:28:65:88:78:cb:40:5c:ae:57:60:dc:1d:c1:ba:54 - -:48: Not blacklisted: RSA 1024 a7:28:65:88:78:cb:40:5c:ae:57:60:dc:1d:c1:ba:54 - -:49: Not blacklisted: RSA 1024 df:db:e5:3a:bc:83:70:e7:ea:ee:ad:07:64:78:01:06 - -:50: Not blacklisted: RSA 1024 df:db:e5:3a:bc:83:70:e7:ea:ee:ad:07:64:78:01:06 - -:51: Not blacklisted: RSA 1024 df:db:e5:3a:bc:83:70:e7:ea:ee:ad:07:64:78:01:06 - -:52: Not blacklisted: RSA 1024 df:db:e5:3a:bc:83:70:e7:ea:ee:ad:07:64:78:01:06 - -:53: Not blacklisted: RSA 1024 df:db:e5:3a:bc:83:70:e7:ea:ee:ad:07:64:78:01:06 - -:54: Not blacklisted: RSA 1024 df:db:e5:3a:bc:83:70:e7:ea:ee:ad:07:64:78:01:06 - -:55: Not blacklisted: RSA 1024 df:db:e5:3a:bc:83:70:e7:ea:ee:ad:07:64:78:01:06 - -:56: Not blacklisted: RSA 1024 df:db:e5:3a:bc:83:70:e7:ea:ee:ad:07:64:78:01:06 - -:57: Not blacklisted: RSA 1024 df:db:e5:3a:bc:83:70:e7:ea:ee:ad:07:64:78:01:06 - -:58: Not blacklisted: RSA 2048 42:2e:26:b7:b7:d5:65:7d:be:d4:03:2f:3c:60:4e:87 - {DIV} Es sind einige Fingerprints zu sehen welche als unsicher eingestufft werden. Diese Eintr├Ąge sollten aus der Datei entfernt werden. Wie das am einfachsten geht wei├č ich noch nicht. Man kann sich allerdings die Info auch in komprimierter Form anzeigen lassen. Zeige alle unsicheren Fingerprints der Datei known_hosts: {CODE()} bob@localerrechner:~$ cat ./.ssh/known_hosts | ssh-vulnkey -v - | grep COMPROMISED |cut -f5 -d " " | uniq {CODE} {DIV(class="cmdoutput")} f8:e4:a7:49:7b:cc:72:03:f7:c0:47:51:de:c7:88:52 e7:ab:03:c9:1a:ee:72:43:29:6a:c6:d9:67:1f:38:0e {DIV} Jetzt wei├č ich auch wie man diese Schl├╝ssel auch automatisch entfernt. ACHTUNG die nachfolgende CODE Zeile entfernt Vertraunsw├╝rdige Hosteintr├Ąge in der known_hosts Datei. F├╝r die richtigkeit des Codes kann ich keine Garantie ├╝bernehmen. {CODE()} bob@localerrechner:~$ for i in cat ~/.ssh/known_hosts | ssh-vulnkey -v - | grep COMPROMISED |cut -f2 -d ":" | uniq ; do sed -i "$i d" ~/.ssh/known_hosts; done

Danke auch an Caspar Clemens Mierau mit seinem Blog-Post known_hosts mit SED korrigieren.

SSH Versionen

Eine ├ťbersicht ├╝ber die SSH Versionen.

und das alles wie immer auch f├╝r Encrypt:Ssh

Schl├╝sselwirrwarr

Jetzt hat zwar jeder seinen Schl├╝ssel erzeugt, jedoch will jedes Tool unterschiedliche Formate der Schl├╝ssel haben. Man k├Ânnte zwar immer wieder ein neues Schl├╝sselpaar erzeugen f├╝hrt aber aus meiner Sicht nicht zum Ziel. Ich m├Âchte lieber einen Schl├╝ssel in unterschiedlichen Formaten haben. Die nachfolgenden zwei Zeilen convertieren den privaten RSA SSH Schl├╝ssel in das PEM Format. Anschlie├čend wird aus dem privaten PEM Schl├╝ssel der ├Âffentliche PEM Schl├╝ssel erzeugt. {CODE()} bob@localerrechner:~$ openssl rsa -in ./id_rsa -outform pem > id_rsa.pem bob@localerrechner:~$ openssl rsa -in id_rsa.pem -out id_rsa_pub.pem -outform PEM -pubout

Verschl├╝sseln:

{CODE()} bob@localerrechner:~$ openssl rsautl -encrypt -inkey id_rsa_pub.pem -pubin -in TEST.txt -out TEST.rsa

Entschl├╝sseln:

{CODE()} bob@localerrechner:~$ openssl rsautl -decrypt -inkey id_rsa.pem -in TEST.rsa -out decrypted.txt

key-forwarding

Mit ssh-agent-forwarding auf unix (auch mac) und windows kann man mit seinem lokalen key auch auf einem entfernten server arbeiten (zB git pull und push etc).