Um Verbindung mittels SSH aufzubauen bzw. solche entgegenzunehmen, wird ein SSH-Schlüssel benötigt. Für den OpenSSH-Server finden sich diese Schlüssel im Verzeichnis /etc/ssh/. Um die Schlüssel für den Server neu zu generieren, müssen die alten Schlüssel gelöscht werden:
rm /etc/ssh/ssh_host_*
Anschließend wird der OpenSSH-Server neu konfiguriert, damit neue Schlüssel erzeugt werden:
dpkg-reconfigure openssh-server
Nachdem dies geschehen ist, muss im letzten Schritt der SSH-Server neu gestartet werden:
systemctl restart ssh
Damit sind die Schlüssel ausgetauscht. Bei einem erneuten Verbindungsversuch, wird ein entsprechender Client deshalb eine entsprechende Warnmeldung ausgeben, welche dann bestätigt werden muss.
Mittels GSON von Google, können JSONs unter Java einfach in Objekte deserialisiert werden. Allerdings können bestimmte JSON-Objekte zu Problemen führen. So zum Beispiel folgende JSON-Datei:
{"default":"ABC","value":"DEF"}
Das entsprechende Java-Objekt könnte in diesem Fall wie folgt aussehen:
classData{publicStringdefault;publicStringvalue;}
Damit wäre GSON in der Lage die entsprechenden Felder aus dem JSON, den Felder in der Klasse zuzuordnen. Allerdings kann obige Klasse nicht kompiliert werden. Hintergrund hierfür ist das Feld default. Unter Java ist dies ein Schlüsselwort und kann somit nicht als Feldname genutzt werden. Unter Sprachen wie C# könnte hier mit einer Verbatim-Zeichenkette gearbeitet werden:
publicString@default;
Allerdings bietet Java diese Möglichkeit nicht an, sodass sich hier anders beholfen werden muss. Die Lösung ist die Annotation SerializedName. Diese gibt den Namen des Schlüssels im JSON an, welcher in das entsprechende Feld deserialisiert werden soll:
Wer in den letzten Jahren einen SSH-Schlüssel generiert hat, wird meist RSA als kryptografischen Verfahren dafür genutzt haben. Mittlerweile geht die Empfehlung für neue Schlüssel mehrheitlich zu solchen, welche auf elliptische Kurven basieren. Ein solcher Schlüssel kann im Terminal über den Befehl:
ssh-keygen -t ed25519
generiert werden. Alternativ kann eine entsprechende E-Mail-Adresse für den Schlüssel definiert werden:
Die Länge des Schlüssels verglichen mit den RSA-Schlüsseln sagt allerdings direkt nichts über die Sicherheit des Schlüssels aus. Grundsätzlich sind die Ed25519-Schlüssel kürzer als vergleichbare RSA-Schlüssel. Daneben ist das Verfahren schneller und resistenter gegen Kollisionsattacken und sollte daher in Zukunft gewählt werden.
Ich nutze zu Hause ein Kochfeld vom Hersteller viva. Dieses Kochfeld verfügt unter anderem über eine Sperrfunktion, um das Kochfeld gegen unerwünschte Bedienung zu schützen. Ab und an aktiviere ich besagte Sperre aus Versehen.
Das Bedienfeld des Kochfeldes
Und dann stellt sich jedes Mal die Frage, wie genau die Sperre wieder deaktiviert werden kann. Je nach Hersteller und Modell ist die Vorgehensweise leider unterschiedlich. Bei den meisten Kochfeldern von viva löst ein längerer Druck auf das Schlüsselsymbol die Sperre, sodass der Herd anschließend wieder genutzt werden kann.
Um sich mit einem Rechner per SSH zu verbinden, kann ein Passwort oder ein kryptografisches Schlüsselpaar genutzt werden. Aus Gründen der Sicherheit sollte ein Login über SSH per Passwort im Normalfall nicht möglich sein. Stattdessen sollte sich immer über das Schlüsselpaar identifiziert werden. Dazu wird ein privater und ein öffentlicher Schlüssel generiert. Der öffentliche Schlüssel wird beim Zielserver in der Datei:
.ssh/authorized_keys
hinterlegt. Für die nötigen kryptografischen Operationen wird schließlich der private Schlüssel genutzt, welcher auf dem eigenen Rechner verbleibt. Normalerweise wird so nur ein Schlüsselpaar genutzt. Allerdings kann es durchaus vorkommen, das nicht nur ein Schlüssel, sondern mehrere unterschiedliche Schlüssel für die Verbindung zu unterschiedlichen Servern verwendet werden soll. Diese müssen dann auf dem eigenen Rechner vorgehalten werden. In diesem Fall muss der SSH-Client darüber informiert werden mit welchem Schlüssel die Anmeldung erfolgen soll. Normalerweise würde der Client wie folgt genutzt werden:
ssh root@example.com
In diesem Fall würde der Standardschlüssel aus dem ~/.ssh/-Verzeichnis genutzt werden. Soll nun ein bestimmter Schlüssel genutzt werden so muss der Parameter -i angegeben werden:
ssh -i .ssh/otherkey root@example.org
Damit kann der Schlüssel spezifiziert werden, welcher für die Verbindung genutzt werden soll. Eine andere Möglichkeit ist es für die einzelnen Server eine Konfiguration in der Datei ~/.ssh/config zu hinterlegen.