[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.

Android SDK (DDMS) unter MAC OS X 10.6 Snow Leopard

Nach einem Update auf Snow Leopard musste ich Feststellen, das mein Android SDK nicht mehr so wollte wie ich.

>ddms
45:16 E/ddms: shutting down due to uncaught exception
45:16 E/ddms: java.lang.UnsatisfiedLinkError: /Users/tw/Desktop/eclipse/android-sdk-mac_x86-1.5_r3/tools/lib/libswt-pi-carbon-3236.jnilib:  no suitable image found.  Did find:  /Users/tw/Desktop/eclipse/android-sdk-mac_x86-1.5_r3/tools/lib/libswt-pi-carbon-3236.jnilib: no matching architecture in universal wrapper
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1878)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1771)
at java.lang.Runtime.loadLibrary0(Runtime.java:823)
at java.lang.System.loadLibrary(System.java:1045)
at org.eclipse.swt.internal.Library.loadLibrary(Library.java:123)
at org.eclipse.swt.internal.carbon.OS.<clinit>(OS.java:20)
at org.eclipse.swt.widgets.Display.createDisplay(Display.java:943)
at org.eclipse.swt.widgets.Display.create(Display.java:923)
at org.eclipse.swt.graphics.Device.<init>(Device.java:118)
at org.eclipse.swt.widgets.Display.<init>(Display.java:754)
at org.eclipse.swt.widgets.Display.<init>(Display.java:745)
at com.android.ddms.UIThread.runUI(UIThread.java:330)
at com.android.ddms.Main.main(Main.java:97)

Das liegt daran, das seit Snow Leopard Java in normalerweise mit der 64 Virtual Maschine von Java gestartet wird. In diesem Fall kann DDMS aber nur mit der 32 Bit Version. Die Lösung ist ganz einfach, edietiere die Datei android-sdk-mac_x86-1.5_r3/tools/ddms und ändere folgendes:

[cc lang=“bash“]

if [ `uname` = „Darwin“ ]; then
os_opts=“-XstartOnFirstThread“

[/cc]

auf

[cc lang=“bash“]

if [ `uname` = „Darwin“ ]; then
os_opts=“-XstartOnFirstThread -d32″

[/cc]

und schon läuft die Sache wieder rund.

Snow Leopard OS X 10.6 GUID Update Problem

Heute habe ich mein Snow Leopard erhalten. Nach einem Time Machine Full-Backup wollte ich dann mal loslegen und den Schnee Leoparden installieren. Alle Anwendungen geschlossen, DVD eingelegt und gewartet. Anschließen die DVD geöffnet und „Mac OS X Installation“ angewählt. „Fortfahren“ und „Akzeptieren“ geklickt und schon stutzig geworden. Warum prankt an meinem Volume ein kleines gelbes Ausrufungszeichen? Volume angewählt und folgendes gelesen:

„tw“ kann nicht verwendet werden, da die GUID-Partitionstabelle nicht verwendet wird.

Ändern Sie mithilfe des Festplatten-Dienstprogramms das P

artitionsschema. Wählen Sie das

Volume, klicken Sie auf den Titel „Partition“, wählen Sie das Volume-Schema und klicken Sie auf „Optionen“.

Installationsfenster von Snow Leopard

Installationsfenster von Snow Leopard

Was war passiert? Ich hatte letztens einen Plattencrash und eine neue Platte eigebaut. Diese auf die schnelle Partitioniert und auf das Volume mein Time Machine Backup restored. Dabei scheine ich irgendwas falsch gemacht zu haben. Ergo muss ich meine MacBook jetzt direkt von der CD starten (Das Festplattendienstprogramm im laufenden System bringt euch hier nix.). Also, CD rein, Rechner ausschalten und direkt nach dem einschalten die „C“ Taste gedrückt halten. Das ganze dauert eine halbe ewigkeit, doch dann startet das Installationsprogramm von der CD.

Das gleiche Spiel zeigt sich auch nach dem Starten con CD. Also, wählen wir mal hier von der CD „Dienstprogamme“ und „Festplatten-Dienstprogramm …“. Hier wähl ich jetzt mein Volume aus, und stelle fest das auch da nix geht. Was ein Dreck! Da steht nur ganze nett:

„Diese Partition kann nicht geändert werden.“

So manchmal könnte man ja kotzen, die Partition wurde mit dem Festplatten Dienstprogramm einfach angelegt. Also muss ich wohl damit leben alle meine Daten zu grillen, eine neue Partition mit einer GUID Tabelle anzulegen (geht unter Optionen beim Volume Schema). Mein Backup zurückspielen, und dann updaten.

Ich wünsche euch mehr Glück!

UPDATE: Nach der Neupartitionirung mit einer GUID Partition und einem restore meines Time Machine Backups, klappt das Update jetzt. Ich habe dabei noch Festgestellt, das ein Restore von der 10.6 Snow Leopard DVD erheblich schneller geht als von der 10.5 (5 zu 3 Stunden).

Solitaire

Heute und in Zunkunft will ich hier mal alle Android Apps vorstellen, die mir so über den Weg laufen. Aufgrund der späten Stunde habe mich mir was recht einfaches Ausgesucht. Die Applikation Solitaire.

Diese App vereint auf recht einfache Weise die Kartenspiele „Solitair“, „Spider“, „Freecell“ und „Forty Thieves“ in einer App. Die Bedienung aller Spiele ist gleich, Ihr könnt mit der Finger die Karten ziehen und loslassen, mit einem Klick auf den Stapel eine neue Karte ziehen (oder drei) und mit der Back Taste eure letzten Taten ungeschehen machen.

Hier habe ich einige Screenshots für euch vorbereitet. Das Spiel läuft im übrigen nur im Querformat.

Das Menü:

Das Menu der Solitair App

Das Menu der Solitair App

Im Menu habt Ihr wie hier zu sehen, die Möglichkeit ein neues Spiel zu starten, das Spiel in dem Ihr grad seit neu zu starten, Optionen zum Spiel zu verändern, zu Speichern und zu Beenden oder eingach gleich zu Beenden, ohne zu Speichern.

Wählt Ihr ein neues Spiel habt Ihr wie oben schon gesagt vier Stück zur Auswahl:

Android App Solitair Spieleauswahl

Android App Solitair Spieleauswahl

Die einzelnen verfügbaren Spiele möchte ich auch gerne zeigen:

Solitair:

Die Solitair App - Das Spiel Solitair

Die Solitair App - Das Spiel Solitair

Spider:

Die App Solitair - Das Spiel Spider

Die App Solitair - Das Spiel Spider

Freecell:

Die App Solitair - Das Spiel Freecell

Die App Solitair - Das Spiel Freecell

Forty Thieves:

Die Solitair App - Das Spiel Forty Thieves

Die Solitair App - Das Spiel Forty Thieves

Alles in allem gefällt mir die App sehr gut, läut stabil ist einfach und gut bedienen und hat den ganz klassischen charme des Windows Solitairs.

Netcat

Netcat ist ein sehr nützliches Tool für viele Gelegenheiten. Ich persönlich benutze es meistens nur um den Durchsatz eines Netzwerkes zu testen wenn ich mir nicht sicher bin ob Performanceprobleme auf das Netwzerk, oder die Software zurückzuführen sind.

Dazu muss man auf dem Zielrechner netcat (oft auch nc) starten:

netcat -l <Port> > <Dateiname>

Und natürlich auf der sendenden Maschiene ein entsprechendes Netcat starten damit auf dem Zielhost empfangen werden kann:

netcat <Zieladresse> <Port> < <Dateiname>

Wenn man die Zeit des des Befehl auf der sendenden Maschine misst, kann man daraus den Durchsatz errechnen, dieser kommt meist nahe der praktischen Leistungsgrenzen der Netzwerkverbindung, da dort weder Kompression noch aufwändige Protokolle overhead erzeugen.

Backup mit Netcat

Weiterhin kann man ganz nette Backups mit Netcat machen. Z.b. ganze Partitionen, oder ganze Platten. Partitionen kann man hinterher schön mounten, deswegen finde ich das praktischer. Will man eine Partition mit netcat über das Netzwerk wegsichern, macht man folgendes:

Auf dem Quellrechner:

dd if=/dev/<partition> | netcat/nc <Zieladresse> <Port> 

Auf dem Zielrechner:

netcat/nc -l <Port> > <Dateiname>

Und schon hat man ein file in dem die Partion enthalten ist. Diese kann man nun ein bischen aufpeppen.

Backup mit Tricks

Will man das ganze noch ein bischen verfeineren, schribt man bevor man ein solches Backup macht erstmal den restlichen space mit „0“ voll. Das geht ganz einfach mit:

cd <Verzeichnis auf der Partition>
dd if=/dev/zero of=lala.txt

Das hat den Sinn, das der freie Platz mit nullen überschrieben wird und sich so besser komprimieren läßt.

Aufpassen muss man bei der root Partition, da muss man ein wenig Platz freilassen. Das kann man mit der Angabe bs=1m und count=<mb frei – 50>. So vermeidet man das das System unansprechbar wird.

Anschließend komprimieren wir die Ausgabe des dd durch folgende Angabe:

Quellrechner:

dd if=/dev/<Partition> | gzip -9 -c | netcat <Zieladresse> <Port>

Damit wird das ganze dann „on the fly“ komprimiert. Das kostet zwar CPU Zeit, spart aber viel Platz. Auf dem Zielsystem braucht man eigentlich nicht viel ändern, ich würde als Endung einfach .gz anfügen, damit man weiß das das Image komprimiert ist.

Software Raid unter Linux

Bei den meisten Distributionen kann direkt bei der Installation eine Software Raid angelegt werden. Sehr praktisch ist dies wenn man nicht das Geld oder die Möglichkeiten hat ein Hardware-Raid zu implementieren.

Über ein cat /proc/mdstat kann man sich den aktuellen Status eines Array anschauen. Das ganze sieht dann folgendermaßen aus:

Personalities : [raid1]
md1 : active raid1 sdb1[1] sda1[0]
      104320 blocks [2/2] [UU]

md3 : active raid1 sdb2[1] sda2[0]
      8385856 blocks [2/2] [UU]

md2 : active raid1 sdb3[1] sda3[0]
      4192896 blocks [2/2] [UU]

md0 : active raid1 sdb4[1] sda4[0]
      148151360 blocks [2/2] [UU]

unused devices: <none>

Das hier gezeigte Raid Array befindet sich in einem optimalen Zustand, alle Bestandteile des Array sind up and running. Im Fehlerfall sieht das ganze dann so aus: (Anderer Rechner!)

cat /proc/mdstat
Personalities : [linear] [raid0] [raid1] [raid5] [multipath] [raid6] [raid10]
md1 : active raid1 hda14[0] sda11[2](F)
      2803200 blocks [2/1] [U_]

In diesem Fall ist die Platte/Partition sda11 gestorben/aus dem tritt geraten. Diese sollte nun entfernt und wieder hinzugefügt oder durch ein anderes Device ersetzt werden. Im ersten Fall muss man mit großer Wahrscheinlichkeit das System booten, ansonsten ist das Devie busy und läßt sich nicht aus dem Verbund lösen. Im zweiten Fall kann man einfach ein Ersatzdevice angeben und einbinden.

Im Fall zwei entfernt man das Device mit folgendem Befehl aus dem Verbund:

mdadm -r /dev/md1 /dev/sda11

ein.

Im Fall eins sollte das Device nach dem booten automatisch entfernt worden sein und man kann es mit folgenden befehl erneut hinzunehmen:

mdadm -a /dev/md1 /dev/sda11

in beiden Fällen sollte nach dieser Aktion ein Rebuild beginnen, welcher folgendermaßen aussieht:

Personalities : [linear] [raid0] [raid1] [raid5] [multipath] [raid6] [raid10]
md1 : active raid1 sda11[2] hda14[0]
      2803200 blocks [2/1] [U_]
      [>....................]  recovery =  4.7% (132096/2803200) finish=1.0min #speed=44032K/sec

Ist der Rebuild abgeschlossen kann das Array wieder benuzt werden.

Hinweis: Das erneute hinzufügen einer Platte sollte nur dann passieren, wenn man sich sicher ist, das diese nicht wirklich defekt ist. Bei der hohen Belastung des Rebuilds ist es nicht unmöglich, das die zweite Platte ebenfalls ausfällt. Generell ersetzt gerade ein Softwareraid keine Datensicherung und es ist auch kein 100%tiger Schutz gegen Hardwareausfälle! Ein günstiges Hardwareraid aber auch nicht.

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.