[Howto/Tutorial] Dropbear ssh für Android cyanogenmod konfigurieren

Du möchtest also per ssh auf dein Telefon. Das ist prinzipiell ab der Version 4.0.2 der cyanogenmod Software auf deinem Telefon möglich. Ab dieser Version ist der dropbear ssh server mit dabei. Dieser nutzt im Build von cyanogen das Verzeichnis /data/dropbear/.

Du musst nun folgendes tun:

Einen ssh key mit PuTTY oder Linux erzeugen. Für Putty gibts hier eine Anleitung.

Jetzt muss Du den ssh public key als Datei speichern und authorized_keys Datei auf der sdkarte speichern.

Jetzt kommen die Sachen im Terminal deines Telefons:

Werde root:

su - 

Lege das Verzeichnis /data/dropbear und /data/dropbear/.ssh an:

mkdir -p /data/dropbear/.ssh  

Kopiere die die Datei authorized_keys nach /data/dropbear/.ssh

cp /sdcard/authorized_keys /data/dropbear/.ssh/

Setze nun die richtigen Rechte:

chmod -R 644 /data/dropbear

Erzeuge nun einen passenden Hostkey (das kann einen moment dauern):

dropbearkey -t rsa -f /data/dropbear/dropbear_rsa_hostkey

Optional kannst Du noch einen dss key erzeugen:

dropbearkey -t dss -f /data/dropbear/dropbear_dss_host_key

Jetzt musst Du Dir noch ein passendes Profil anlegen:

echo >>/data/dropbear/.profile "PATH=/usr/bin:/usr/sbin:/bin:/sbin \
:/system/sbin:/system/bin:/system/xbin:/system/xbin/bb:/data/local/bin"

echo >>/data/dropbear/.profile "export PATH"

Fertig!

Jetzt kannst Du den dropbear Server das erste mal starten:

dropbear -v -F

Wenn alles gut ist siehst Du folgendes (oder so ähnlich):

TRACE: enter loadhostkeys
TRACE: enter buf_get_priv_key
TRACE: enter rsa_key_free
TRACE: leave rsa_key_free: key == NULL
TRACE: enter buf_get_rsa_priv_key
TRACE: enter buf_get_rsa_pub_key
TRACE: leave buf_get_rsa_pub_key: success
TRACE: leave buf_get_rsa_priv_key
TRACE: leave buf_get_priv_key
TRACE: enter buf_get_priv_key
TRACE: enter dsa_key_free
TRACE: enter dsa_key_free: key == NULL
TRACE: enter buf_get_dss_pub_key
TRACE: leave buf_get_dss_pub_key: success
TRACE: leave buf_get_priv_key
TRACE: leave loadhostkeys
[6343] Sep 18 11:53:35 Not forking
TRACE: listensockets: 1 to try
TRACE: listening on ':22'
TRACE: enter dropbear_listen
TRACE: dropbear_listen: all interfaces
TRACE: leave dropbear_listen: success, 1 socks bound

Nun kannst Du das erste mal ein ssh auf dein Telefon machen. In einem anderen Artikel beschreibe ich wie man den Dienst beim booten startet. Hattest Du nun die Hoffnung auf ein Login unterwegs möglich ist, muss ich dich leider, zumindestens für T-Mobile, entäuschen. Du bekommst im T-Mobile Netz keine öffentliche IP, sondern eine Private (NAT). Damit ist es nicht möglich von aussen auf dein Telefon zuzugreifen.

Ein Teil dieses Artikels ist im übrigen dem Wiki hier entnommen.

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.

Mein kleines „root“ Script

Mein kleines root script

Dieses Script nutze ich als fauler Mensch um root auf einem anderen Rechner zu werden.

[cc lang=“bash“]
#!/bin/sh

#FG=white
#BG=black
XTS=/usr/X11R6/bin/xtermset
MYNAME=$(basename $0)

TARGET=$1
test -z $TARGET && TARGET=localhost
test -x $XTS && $XTS -n „$MYNAME auf $TARGET“ -T „$MYNAME auf $TARGET“
ssh -A -X -l $MYNAME $TARGET
test -x $XTS && $XTS -n „$USER auf $HOSTNAME“ -T „$USER auf $HOSTNAME“
[/cc]

Dazu benötigt man xtermset. Dieses gibt es bei SuSE als mit dabei, bei anderen Distributionen muss man es ggf. selbst bauen. Bei meinem Fedora musst ich ;-)