Mit ssh keys Programme auf entfernten Rechnern ausführen

Man kann per ssh recht sicher Programme auf anderen Rechner ausführen. Der verwendete Key kann dann nur dazu benutzt werden ein bestimmtes Programm auszuführen. Dazu erzeugt man einen ssh-key ohne Passphrase. Lässt also die Passphrase einfach leer. Und gibt als Pfad einen anderen Namen an.

[test@tn ~]$ ssh-keygen -t rsa -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (/home/test/.ssh/id_rsa): /home/test/.ssh/id
_rsa_on
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/test/.ssh/id_rsa_on.
Your public key has been saved in /home/test/.ssh/id_rsa_on.pub.
The key fingerprint is:
1f:5b:04:7b:50:f1:2c:3c:5a:db:71:df:01:8b:a1:3d test@tn.xxx.de
[test@tn ~]$ ssh-keygen -t rsa -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (/home/test/.ssh/id_rsa): /home/test/.ssh/id
_rsa_off
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/test/.ssh/id_rsa_off.
Your public key has been saved in /home/test/.ssh/id_rsa_off.pub.
The key fingerprint is:
9e:75:41:16:50:2c:e0:3d:2e:0d:c3:22:85:fa:cf:2b test@tn.xxx.de

Nun haben wir unter .ssh vier Datein mehr:
[test@tn .ssh]$ ls
id_rsa  id_rsa_off  id_rsa_off.pub  id_rsa_on  id_rsa_on.pub  id_rsa.pub

Die privaten Schlüssel id_rsa_off und id_rsa_on und die öffentlichen Schlüssel id_rsa_off.pub und id_rsa_on.pub. Wenn man nun diese beiden Schlüssel auf einem Rechner in die .ssh/authorized_keys2 einfügt, kann man davor noch bestimmte Kommandos einfügen:

[test@woanders .ssh]$ cat authorized_keys2
command="/usr/local/bin/mein_command ON",no-pty,no-port-forwarding <der öffentliche Schlüssel (id_rsa_on.pub>
command="/usr/local/bin/mein_command OFF",no-pty,no-port-forwarding <der öffentliche Schlüssel (id_rsa_off.pub>

Damit wird dann immer beim Verbinden mit einem der Schlüssel das Kommando auf dem Rechner ausgeführt. Wie verbindet man sich nun mit dem entsprechenden Key? Man übergibt dem ssh einfach mit der Option -i den entsprechenden Key.

ssh -i ~/.ssh/id_rsa_on test@woanders.xxx.de

So kann man aus Scripten heraus relativ gut Programme ausführen. Man muss allerdings erwähnen, das jemand der auf dem Rechner eingebrochen ist, auch diese Programme ausführen darf. Also vorsicht bei der Programmwahl!

Einfaches Login mit ssh keys

Manchmal möchte man einfach kein passwort eingeben müssen um von einem auf den anderen Rechner zu kommen. Oder sich einfach nicht verschiedene Passwörter merken müssen. Dazu lassen sich ssh-keys sehr einfach und schön nutzen. Als erstes muss man sich einen ssh-key erzeugen.

ssh-keygen -t rsa -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (/home/test/.ssh/id_rsa):
Created directory '/home/test/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/test/.ssh/id_rsa.
Your public key has been saved in /home/test/.ssh/id_rsa.pub.
The key fingerprint is:
9c:92:f0:fd:9e:06:8a:07:b8:1f:62:bd:bd:e9:d1:0c test@tn.xxx.de

Mit diesem Kommando haben wir einen recht sicheren 4096 Bit Key erzeugt. Daraus ergeben sich nun zwei Dateien, welche in diesem Beispiel unter .ssh des users test liegen.

[test@tn ~]$ cd .ssh/
[test@tn .ssh]$ ls
id_rsa  id_rsa.pub

Die Datei id_rsa enthält nun den privaten Schlüssel. Wie privat schon sagt, ist er der Schlüssel der geschützt werden muss. Diesen Schlüssel sollte niemand in die Finger bekommen (Auch wenn er noch mit einer Passphrase geschützt ist). Die andere Datei id_rsa.pub enthält deinen öffentlichen Schlüssel. Diesen kann man auf den anderen Rechnern verteilen. Der Inhalt ist zumindestens teilweise Menschenlesbar:

[test@tn .ssh]$ cat id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAgEA2sA2xEE48ouEq+ks2ZY0RVu6v6+tKt2T+3lOz3RVrGjSjpPcDvHgqC0fZkROoXcrxwAp
oQiAUky5n1sZBsDn5Q4JUoKOSzvA/8C2bL8dOfnrdUt89+L38SgIvFAmb7BLfZgtWI4MAZaOvwVgPrwiLCUUb7yKXuV3z2B3
iF6JQ5SMYT+6m+ILjcHo+yyN8Dfr7JbZCbdEw8yaRiM0YVgRtf06/f/nYsFSYk5oJn9bVGF6t6YczJOtW9CH4/eB0vI2O378
nlcOKKZvTfC9/kmlDijskU4QWwZxKF1zrlNRGk7oM1evWxyrnm2Qztu4+mWM4vMTkfKVQQ8/41P0TBjDigS+6Gb16aQueRyg
f6eUP+OnO+WWXGL+bpmAXW+jJs5Rlc7ITUC2ATOoXDEm1SaUs9UDVaMprolmZcxb5sJ3x4xnbx/gFSYvZb2MtPb2c/Vj6rHb
8KJM37WTsd2TDmmQNjv8n7Wy57jj2Tmqs8c3tezigy1HW0CgtRnW3vn/tHGOniGruvsC36B9oWs0x4mcNyzIg2XG0yzZNjoS
CX+YVF3nvGAan4T1Ide8mya4s5goYr1kseW+C9XsxRUdzsCvAwt1IAs6K+3OzsYB9LRWG2omINNNqt5QkkYeRYm75RhbAD53
WFKbLZVaaROc1kJiPfNnXJnY+hi3d4APDwUIN98= test@tn.xxx.de

Diesen Key kann man nun evtl. auch mit anderen auf einem anderen Rechner unter .ssh/authorized_keys2 ablegen. In der Regel wird man dann nach seiner Passphrase des SSH Keys gefragt, nicht mehr nach dem Passwort. Die Passphrase kann man auf seiner Workstation auch permanent in den Speicher laden (was zumindestens Theoretisch natürlich ein Sicherheitsrisiko ist). Dazu beötigt man einen ssh-agent. Diesen startet man folgendermaßen:

[test@tn ~]$ ssh-add .ssh/id_rsa
Enter passphrase for .ssh/id_rsa:
Identity added: .ssh/id_rsa (.ssh/id_rsa)

Ab sofort merkt sich der ssh-agent die Passphrase für einen und mann kann ohne Passwort auf verschiedene Rechner auf denen der Public key abgelegt ist.