Wie kann ich mir den SSH-Key meines Servers anzeigen lassen?

Manchmal will man sich auf einen Server per SSH einloggen und bekommt dann eine Man-In-The-Middle Warnung und fragt sich, ob es wirklich ein Man-In-The-Middle ist, oder man nur wieder vergessen hat, ob sich der SSH-Schlüssel des Servers geändert hatte?

In diesem Fall sollte man die angezeigte Schlüssel-ID des ssh-client mit dem echten auf dem Server vergleichen. Die Schlüsel-ID des Servers bekommt man in der Warnung des ssh-clients direkt angezeigt. Aber wie geht das auf dem Server?



Knowledge Center Home
Cloud Hosting
Cloud Servers
Rackspace Cloud Essentials 3 – Checking a server’s SSH host fingerprint with the web console

Feedback
Let us know what you think of our Knowledge Center!
Rackspace Community

Learn about Rackspace products, ask questions, and share your knowledge in our Rackspace Community.
Rackspace Cloud Essentials 3 – Checking a server’s SSH host fingerprint with the web console

Article ID: 1109
Last updated on May 20, 2013
Authored by: Jered Heeschen

Contents:

Explaining the host key
Why the host key might change
A dire warning
How to check
The web console
In the Control Panel
In the console
The best way
The not-best way
Write it down
Completing the connection – maybe
First-time connection
Host key has changed
Linux and Mac OS X
Windows and PuTTY
Summary

Explaining the host key

One of the fundamentals of SSH is that it uses a „fingerprint“ generated using a server’s unique „host key“ to identify the server to a client. You may have seen a warning sometime related to the host fingerprint, either that it can’t be verified or that it has changed.

The host key is randomly generated when the SSH server is set up and is used to identify the server you’re connecting to. Warnings about it are more than just a devilish developer’s effort to inconvenience us (though it’s difficult to rule that motivation out entirely).

No, the host key is actually central to the security provided by SSH when you make a connection to your server. If someone malicious tries to set up a program to intercept your connection and steal your login credentials – a „man in the middle“ attack – then the only warning you’ll get is your SSH client complaining that the host key has changed.
Why the host key might change

The more innocent explanations for a changed host key include recompiling or upgrading SSH, rebuilding the server, or just using a different address to get to the same host. When your system stores the host key it records it by address, so even if „localhost“ and „127.0.0.1“ point to the same server an SSH client will treat them as entirely different entries.

Thus, sometimes that message is expected. But even an expected warning doesn’t mean that there couldn’t be a man-in-the-middle attack in progress. It sounds a little paranoid, but that’s good security for you – anything can happen, at any time, and the more you do to rule out any variables the better.

So let’s look at when and how to check the host fingerprint without using an SSH connection. We’ll do it by going in through the server’s web console.
A dire warning

First we’ll look at the error message that probably brought you to this article, a warning that the host’s identification has changed:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx.
Please contact your system administrator.
Add correct host key in /home/demo/.ssh/known_hosts to get rid of this message.
Offending key in /home/demo/.ssh/known_hosts:15
RSA host key for 1.2.3.4 has changed and you have requested strict checking.
Host key verification failed.

The warning can be summed up as: The fingerprint that identifies the SSH server is different from what it was the last time you connected to it. Expected or not, you’ll want to check on that.
How to check

If you have your server’s SSH fingerprint written down somewhere you can compare it to what SSH shows you to make sure you’re connecting to the right machine. Most of us don’t write that down, but it’s a pretty good idea to do so if you connect from multiple machines or from unfamiliar computers (like from a consulting client’s desktop or server).

If you don’t have the host fingerprint handy you can use the control panel’s web console to find it.
The web console

The web console lets you connect to your server as if you were, well, sitting at the console. If anything weird is going on with SSH it won’t interfere with you connecting directly to the console through the Cloud Control Panel.
In the Control Panel

You can connect to the web console for your server through the Cloud Control Panel. If you need assistance opening the web console, see this article.

If you don’t have a username and password to use (if you’ve disabled passwords for all accounts, for example) you can use the Cloud Control Panel to reset your server’s root password. Then you can use the new credentials to get in.
In the console

Now that you’re on the server it’s time to get that host key fingerprint.
The best way

The official way to get that fingerprint is to run the „ssh-keygen“ command against the server’s public key, as in:

ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key.pub

The „-l“ option tells ssh-keygen you want to list the fingerprint, and the „-f /etc/ssh_host_rsa_key.pub“ part tells ssh-keygen where it can find the host’s public key file. That location is typical for Linux servers, but you may need to poke around a bit to find the file if it’s not in that default location.

The output should be reminiscent of the fingerprint your SSH client showed you earlier:

2048 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx /etc/ssh/ssh_host_rsa_key.pub (RSA)

The first number indicates the strength of the key (in this case, 2048 bits). The fingerprint follows, along with the location of the key it analyzed and the type of key it’s using (usually RSA).

CodeIntel für Sublime Text 2

Das CodeIntel Modul https://github.com/SublimeCodeIntel/SublimeCodeIntel ist ein wirklich empfehlenswertes PlugIn für Sublime Text. Die Erkennung der Funktionen und Klassennamen hat in meinen Projekten auf Anhieb funktioniert. Die Tastenkominationen findet man unter Info und Tastenkombinationen

OS-X
„Jump to Symbol Declaration“ => Control+Command+Alt+Up (mit der Maus Control+Click)
„Autocomplete“ => Shift+Command+Space

Linux
„Jump to Symbol Declaration“ => Control+Command+Alt+Up (mit der Maus Command+Click)
„Autocomplete“ => Shift+Control+Space

Einfacher SSH MySQL Tunnel

Manchmal muss man sich nur kurz mit einer MySQL auf einem entfernten Server verbinden. Leider ist eine verschlüsselte SSL-Verbindung mit MySQL nicht schnell und in einigen Serverkonfigurationen gar nicht möglich. Wenn man allerdings einen SSH Zugang auf dem Server hat, dann steht der sicheren Verbindung eigentlich nur noch ein einziger Konfigurationsparameter im SSH-Demon entgegen.
Im SSH-Demon muss die Option AllowTcpForwarding auf „yes“ gestellt sein. Ist dies der Fall, dann kann die Verbindung mit einer SSH-Shell geöffnet werden und dann in einer anderen Shell auf den gewählten Port zugegriffen werden.


1.te Shell
server01$ ssh -fNg -L 3308:127.0.0.1:3306 user01k@server02
user01@server02's password: [Einfach Passwort eingeben]
server02$ <== Verbindung ist offen und kann jetzt in einer zweiten Shell/Prozess verwendet werden. Wird diese Verbindung geschlossen ist auch der "MySQL-Tunnel" geschlossen! 2.te Shell server01$ mysql -h 127.0.0.1 -P 3308 -p dbuser02 db02 ACHTUNG: Verwendet niemals localhost beim mysql-client immer 127.0.0.1, ansonsten ignoriert der mysql client die Portangabe! An diese Fehlersuche erinnere ich mich immer noch und dieser "Fehler" liegt schon einige Tage zurück!
Enter password: [Einfach MySQL Passwort eingeben]
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 35845406
Server version: 5.0.95-log Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> show tables;
+--------------------------------------------+
| Tables_in_db02 |
+--------------------------------------------+
| countries |

PHP Fastcache

Unterschiedliche Server und unterschiedliche PHP-Cache Methoden? Dann ist PHP Fast Cache eine gute Alternative.

Damit erhält man einen einheitlichen Zugriff auf folgende Cache Module:

  • Files
  • MemCache
  • MemCached
  • APC
  • WinCache
  • X-Cache
  • PDO with SQLite

Das Modul findet man zum Download unter GitHub phpfastcache

Javascript Dateien automatisch zusammenfassen

Da ein Browser immer nur eine begrenzte Anzahl von gleichzeitigen Requests durchführt, ist es sinnvoll viele JavaScript Dateien zu einer einzigen Datei zusammenzufassen. Es gibt mehrere Tools, die diese Aufgabe durchführen können. Für bestehende System kann folgendes Tool eingesetzt werden, das die Zusammenfassung für HTACCESS Regeln und ein PHP-Skript durchführt..

http://rakaz.nl/code/combine

Wie überprüfe ich die aktuelle MySQL Konfiguration auf Fehler

Es gibt kein direkten Syntaxcheck, aber interessanterweise wird beim Aufruf der ‚Hilfe‘ com MySQL Demaon (–help) zusätzlich die Syntax intern überprüft, weil die Laufzeitparameter in der Hilfe ausgegeben werden 😉 Der Trick ist nun nur, noch den Pfad des MySQL Deamon zu ermitteln.


# which mysqld
/usr/sbin/mysqld
# /usr/sbin/mysqld --help

Der Deamon kann auch unter libexec, also nicht im Pfad liegen!
/usr/libexec/mysqld bzw. /usr/local/libexec/mysqld

Den Tipp habe ich von http://www.mysqlperformanceblog.com/2008/02/12/how-to-check-mysql-config-files/

ffmpeg-php bei github

Nachdem ich mal wieder ffmpeg-php installieren wollte und es wieder sehr viele Compilierungsfehler bei der SVN ffmpeg-php Version von SourceForge gab, entdeckte ich, dass es nun eine Fortführung des „angestaubten“ Projektes unter GitHub gibt!

GitHub ffmpeg-php

Super und vielen Dank an Tony2001 😉

Mercurial – Korruptes Repository

Aufgrund eines Plattencrash war ein HG(Mercurial)-Repository beschädigt. Eine Datei im fehlte im HG-Store Verzeichnis. Aufgrund dieses Fehlers konnte das Repository nicht mehr geclont werden, obwohl die „reale“ Datei im Dateisystem noch existierte.

Die Fehlermeldung lautete bei einem „hg clone repository“ folgendermassen:

httpdocs/static/hp_animation/en.png.i@99f16d456d18: no match found!

Im Datastore sah das Verzeichnis so aus:

drwxr-xr-x 2 4096 2013-04-12 17:16 .
drwxr-xr-x 6 4096 2013-04-12 17:16 ..
-rw-r--r-- 1 243 2013-04-12 17:16 arrow.png.i
-rw-r--r-- 1 1390 2013-04-12 17:16 de.png.i
-rw-r--r-- 1 0 2013-04-12 17:16 en.png.i

Wenn die Datei noch existiert, dann kann man diese HG-Index Datei „manuell“ nach dieser Anleitung neuanlegen.


# hg verify
checking changesets
checking manifests
crosschecking files in changesets and manifests
checking files
data/httpdocs/static/hp_animation/en.png.i@4713: missing revlog!
4713: empty or missing httpdocs/static/hp_animation/en.png
httpdocs/static/hp_animation/en.png@4713: 99f16d456d18 in manifests not found
8773 files, 4715 changesets, 14795 total revisions
3 integrity errors encountered!
(first damaged changeset appears to be 4713)

Wichtig in dieser Ausgabe ist die Versionsnummer. In meinem Fall 4713, also clont man die Version n-1 => 4712

Lösung:

hg clone -r 4712 broken fixed
cp broken/httpdocs/static/hp_animation/en.png fixed/httpdocs/static/hp_animation/en.png
cd fixed
hg add httpdocs/static/hp_animation/en.png
hg ci -m "Correct httpdocs/static/hp_animation/en.png"
cd ..
cp fixed/.hg/store/data/httpdocs/static/hp__animation/en.png.i cp broken/.hg/store/data/httpdocs/static/hp__animation/en.png.i
cd broken
hg up
hg verify

Bemerkung: der doppelte Unterstrich im Pfad ist der Pfadkorrektur im Mercurial-Store geschuldet