Samstag, 18. Oktober 2014

Einfaches SSH mittels Key

SSH für Anfänger

Zuerstmal aktiviert man auf dem Zielsystem, ein Debian basierendes System ( Ubuntu, Debian, Rasbian, Rasbmc) ssh.

Tue dies auf dem Zielsystem

sudo apt-get update
sudo apt-get install openssh-server -y

Ein kleiner test sollte zeigen ob es funktioniert. Tue Dies auf dem Ausgangssystem.

ssh pi@dieipadressedeinespi

Nun kreieren wir den .ssh Ordner, er sollte auf beiden systemen vorhanden sein. Und geben ihm die richtigen permissions.
Danach werden die ssh-keys generiert. Diese können auf dem Zielsystem generiert werden. Jedoch auch auf deinem jetzigem PC.(Linux) (Mit puttygen auch auf Windows, jedoch umständlich).
Tue dies auf beiden Systemen

mkdir .ssh
sudo chmod 700 .ssh

Tue dies auf einem von beiden Systemen

ssh-keygen -t rsa -b 4096 -f .ssh/id_rsa -C pi@raspberry

(Dies Generiert 4096 Bit rsa keys im Ordner .ssh mit namen id_rsa und die den Kommentar pi@raspberry enthalten)

Ein passwort ist nicht unbedingt nötig. Jedoch möglich. Dies ist dir überlassen.

Nun muss der Public Key auf dem Zielserver deponiert werden.
Dazu gibt es mehrere Methoden.

  1. Du hast den Key direkt auf dem Zielsystem erzeugt. Musst jedoch mittels Filezilla
    den Private Key runterladen.
  2. Du nutzt SFTP verbindung zu deinem Zielsystem mittels Filezilla
    Dazu öffnest du Filezilla gibst nutzername passwort und ip adresse ein, Port ist 22.
  3. Du nutzt ssh-copy-id um ne es automatisch kopieren zu lassen.
    ssh-copy-id -i ~/.ssh/ remote_host
Bei Punkt 1+ 2 muss noch die Datei authorized_keys auf dem Zielsystem erstellen.
Und zwar mittels

mv ~/.ssh/authorized_keys

Falls sudo Rechte nötig sind einfach noch sudo !! eintippen.

sudo !!

Nun nochmal alle permissions richtig einstellen, auf dem Zielsystem

sudo chmod 600 ~/.ssh/authorized_keys

Auf dem Ausgangssystem ist die Keyfile auch zu verschieben, jedoch der Privatekey.

mv id_rsa ~/.ssh/id_rsa

sudo chmod 700 ~/.ssh
sudo chmod 600 ~/.ssh/id_rsa

Nun sollte man ein paar Dinge festhalten.
Öffne eine SSH Session zu dem Zielsystem, ohne key.Fenster1. Diese ist unsere Fallbacksession, falls etwas schiefgeht.(Falls doch etwas schiefgeht, kann man zumindest beim PI einfach die SD Karte im Ausgangssystem einstecken und da die änderungen Rückgängig machen.)
Öffne eine zweite SSH Session. Fenster2.

Nun bearbeiten wir die ssh config file.

sudo nano /etc/ssh/sshd_config
#AuthorizedKeysFile %h/.ssh/authorized_keys
AuthorizedKeysFile %h/.ssh/authorized_keys

mit strg + x schließen und speichern.

Nun auf dem Zielsystem in Fenster2.

sudo service ssh restart

Nun schließ Fenster2.
Und logge dich ein mittels dem SSH Key.
Dies dürfte genauso funktionieren wie vorher.

ssh pi@dieipadressedeinespi

Falls du kein Passwort in deiner Keyfile hast, musst du hier nichts mehr eingeben und alles hat geklappt. Ansonsten musst du dein Keypasswort eintippen.

Falls nicht probier noch auf dem Ausgangssystem mal einzutippen

Und falls es danach immernoch nicht geht, entferne auf dem Ausgangsystem die aus dem Ordner .ssh.

ssh-add -D 
ein und danach probier es erneut.

Falls dies Funktioniert können wir endgültig den root login sowie den Passwort login deaktivieren um den pi abzusichern.

sudo nano /etc/ssh/sshd_config

PasswordAuthentication yes 
PasswordAuthentication no
PermitRootLogin yes
PermitRootLogin no

Danach sichern, und ssh service neustarten.

sudo service ssh restart

Das wars. Viel spaß bei dem Passwortlosen login mittels Keyfile.
Die privatekeyfile kann man natürlich auch umbenennen.

Samstag, 24. Mai 2014

USB to tty connection, or how to connect your Pi with RS232

First of all get yourself a USB to TTY cable. For example like this one here: Adafruit.

Dont try to buy it on ebay from China. It may cost 3 € less and even if they say it gets delivered in 5 business days, you will have to wait much longer. And have to pay customs. In my particular case, the Case had to pay nothing, but first the swiss customs checked it and after that even the german customs. Just buy it from your local vendor and support small business owners.

Connect it correctly with your Pi:

 red, free, black, white, green
Just do it right. The little piece of Paper telling you what is what, is called the Raspberry Leaf, go and print one for yourself.

Now the important Part:
What operating System do you run? If you are using Windows 8, (no driver for you). I would suggest you to use a live cd of Ubuntu. Or another PC.

I myself am using Ubuntu Linux so, my commands would not completly apply to the Windows guys. Be advised and just use Putty.

So fire up your Terminal and here you go:

install screen on Ubuntu:

 sudo apt-get install screen -y  

Next open your terminal and type in:
 ls dev/tty*  

Now search the Output for something like /dev/ttyUSB0 and use it in the next command:
 screen -L /dev/ttyUSB0 115200  

This is it.
You have established a serial connection to your Rasberry Pi, via a USB to TTY or USB to R232 adapter.
Now you can start using your pi, even if you dont have a ethernet-cable.

Samstag, 1. März 2014

Raspberry Pi backup and restore on Linux

Backup your Raspberry pi on (insert distro here)

Just 2 commands are needed for a fast and easy backup of your precious sd card.
Do it every once in a while and more importantly before huge changes.

 sudo dd bs=4M if=/dev/mmcblk0 of=/home/username/backupdirectory/image`date +%d%m%y`.img  

 sudo dd bs=4M if=/home/username/backupdirectory/image`yourneededdate`.img of=/dev/mmcblk0  

Thats it. Now you will habe to wait a long time. But if you want to check the progress of dd use these commands.

Get the pid of did(process id) 
 pidof dd  

You will get a number. I will call it #.

Then interrupt it with this command. It will give out how much has already been copied and automatically continue.

 sudo kill -USR1 #  

Or if you want to compress your Backup, do it this way. But i won't recommend this solution anymore, because i myself had problems using it for restoring. In the end before you push it onto the sdcard your pc still has to uncompress it. So spare some data, and maybe only use the 3. command, uncompress and use the 2. again.:

 sudo dd bs=4M if=/dev/mmcblk0 | gzip > /home/username/backupdirectory/image`date +%d%m%y`.gz   
 sudo gzip -dc /home/username/backupdirectory/image`yourneededdate`.gz | sudo dd bs=4M of=/dev/mmcblk0   
Thats it.

Even better SSH-keypair security with Linux

How to protect your private keys

Falls ihr dieses Tutorial auf deutsch braucht. Einfach einen Kommentar hinterlassen oder mich anschreiben.

Previously I showed you how to generate your own SSH-Keypair and how to use it with Putty. Since I switched to Ubuntu, i can show you how to make it even easier. Generate your ssh-keypair and push it up to your server or your rpi. But lookout, you cannot use these keys in the Taskerapp i showed you. So just skip the critical part.
You could also generate the keypair on your server, but it seems more convenient to do it on your own machine and push it to the server.
  • To prevent failure first log into your remote machine without a ssh key and leave this terminal window open at all time. This way you can protect yourself against failure and undo your changes:
 ssh username@hostadress   
  • On your local machine do this:
 sudo apt-get update && sudo apt-get install openssh-client  
 mkdir ~/.ssh   
 chmod 700 ~/.ssh  
  • Create the keypair on your local machine. Type in a password if you want to protect your keys. But you may just leave it blank and hit enter.
 ssh-keygen -t rsa -b 4096 -f .ssh/id_rsa -C pi@raspberry  
 umask 0077  

-C is the Comment for the keyfile
-b is the bitlength of the key. I advise you to use 4096, because 1024 is already not safe anymore
-t is the type of the keyfile. We use rsa. 
-f is the output_file you can name it as you want, but be aware, that ssh always searches for the name id_rsa
  • Next we will be encrypting our private key, and overwriting the old file with it.
  • If you want to use your keys with Tasker. Skip this part
 openssl pkcs8 -topk8 -v2 des3 -in ~/.ssh/id_rsa -out ~/.ssh/ && mv ~/.ssh/ ~/.ssh/id_rsa  
 Enter Encryption Password:  
 Verifying - Enter Encryption Password:  

Just follow your orders and enter a good, and long password.
It maybe not work in every Program, but even the standard ssh command knows the PKCS#8 encryption we are using.
  • You can now stop skipping.
  • Execute these commands on a for you suitable manner. Replace remote_host with your host dyndns-adress, or ipadress like set the permissions right and dont forget to add the private keyfile.
 ssh-copy-id -i ~/.ssh/ remote_host  
 sudo chmod 700 ~/.ssh  
 sudo chmod 600 ~/.ssh/authorized_keys  
 ssh-add /path/to/file your private key  
  • On your Remote machine do these changes: 
 sudo chmod 700 ~/.ssh   
 sudo chmod 600 ~/.ssh/authorized_keys  
 sudo nano /etc/ssh/sshd_config  
 #AuthorizedKeysFile %h/.ssh/authorized_keys  
 AuthorizedKeysFile %h/.ssh/authorized_keys  
 sudo service ssh restart  
  • Now try to login with your new ssh private keyfile.
 ssh username@hostadress  
 ssh -i ~/keylocation/id_rsa username@hostadress  
  • If it works great, continue here. If not, you need to troubleshoot it and after this return again to this point and continue here.
 sudo nano /etc/ssh/sshd_config  
change and uncomment
 #Password Authentication yes  
 Password Authentication no  
 PermitRootLogin yes  
 PermitRootLogin no  
  • Restart your ssh service again and login.
 ssh username@hostadress  
 ssh -i ~/keylocation/id_rsa username@hostadress  

Have fun

Montag, 23. September 2013

Xposed Framework und vom NFC Tag entfernen Funktionen aktivieren

Zuerst einmal braucht man das Xposed Framework. Hier im XDA-Thread gibt es dazu mehr.

Was macht das Xposed Framework?

Nun zuerst einmal kann man es ab Android  4.0.3 installieren (es gibt auch eine experimentelle Version für vorherige Android versionen).
Es bietet den Vorteil, dass man an seinem Android Gerät etwas verändern kann, ohne extra eine Custom Rom zu installieren, oder eine app zu ersetzen. Es kann auf die elementarsten Dinge zugreifen, z.B. gibt es ein XPrivacy Plugin, um Apps keinen zugreif auf die eigenen Informationen zu geben oder aber einfache Dinge, wie die Möglichkeit keine Warnung beim erhöhen der Kopfhörerlautstärke zu bekommen.(sehr hilfreich)

Braucht das Xposed Framework root?


Ist root schlecht für mich?

Dank root kann man Apps wie AdAway nutzen. Einen Adblocker, der einfache Regeln für Ads festlegt, sodass diese gar nicht erst geladen werden.(klappt nicht zu 100% jedoch zu knapp 95% der Fälle die ich hatte)
Was bringt mir Root noch? Die Möglichkeit einfache Backups mittels TitaniumBackup oder anderem zu erstellen. Man kann Greenify nutzen und damit Ram sparen. USB-OTG support nachreichen. Tasker nutzen und viele Dinge automatisieren. z.B. in Verbindung mit der Secure Settings App das Lockscreen passwort Zuhause deaktivieren und unterwegs wieder aktivieren und vieles mehr.
Man muss sich root einfach wie den Administrator account unter Windows vorstellen. Man kann damit alles installieren und deinstallieren, jedoch wenn man nicht aufpasst das falsche tun. Nutze root mit bedacht, aber habe keine Angst es zu nutzen wofür es nötig ist.

Download + Installation

Der Download ist im XDA-Developers Thread zu finden, mit vielen Informationen, Warnungen und anderen Hinweisen. 
Oder aber hier die neueste Version:

Herunterladen und installieren. Root vorrausgesetzt.
Das ganze sieht dann in etwa so aus:

Einfach auf Framework klicken und diesen Bildschirm bekommen, auf dem nur noch Install/Update gedrückt wird.

Nun sagt einem die App dass man einmal Neustarten soll. Also machen wir das Soft reboot und Reboot spielen hier beide keine Rolle, klicke also was du willst, wobei Soft reboot schneller ist.

Nun können wir theoretisch bei Download schauen und gucken welche Module daherkommen, ohne das wir eine externe App installieren müssen. Herunterladen unter Modules noch ein Häckchen setzen und wieder neustarten.

Meine bisher aktivierten Module

NFC Tags: Aktion ausführen beim entfernen vom Tag

(beispiel solange es auf dem Auto Tag Maps und Spotify öffnen, sowie GPS aktivieren, beim entfernen, diese Apps wieder schließen, und GPS deaktivieren)
Die notwendige APK findet man in diesem Thread

Herunterladen, installieren und beim Xposed Framework aktivieren. Man kann nun lange auf NFC LockScreenOff Enabler klicken und bekommt einen Einstellungsdialog.
Nun ein letzter Reboot eh voila es ist vollbracht.

Damit das ganze auch von NFC Apps genutzt wird kann man eine Modifizierte Version von AnyTag nutzen oder aber ReTag installieren, welches in der letzten version Support hierfür bekam.

In der ReTag app noch Tag Lost! aktivieren

Viel Spaß beim Taggen.

Montag, 2. September 2013

How to control your RPi with Tasker

How to control your RPi with Tasker

A Good Question indeed.
You could have this scenario:
You own your Raspberry Pi. You have connected it to something. Maybe a wireless powerplug, or a garage door, or "insert your scenario here".
But you want to do it on the go, and you want to do it from everywhere.

Depending on your Scenario, you could try to make a Webserver and configure it how you wish to, but not everybody knows how to do that, and even if you know, you need to work on your security and all these nasty things. 
And all just because you would want to send 2 sudo commands. Lights on and Lights off.

So what could you do.

Set up your own ssh server with key authentication: click here 
You don't even need to root your Phone for this, but i recommend it. 

Just go in Tasker to create new Task - Give it a name - click on the Plus - click on Plugin - click on SSH Command - click on Configuration

Now you are good to go.
Type in your Server settings, you can use a password or a keyfile, and on top of it you can type the command you would want.

 sudo apt-get update && sudo apt-get dist-upgrade -y  

And after this just create a homescreen widget or let the task always perform, when you leave your home, or go to work, or open your music app, or whatever else comes to your mind.

At the moment the developer only supports only one server in his plugin. But it is coming for sure. Check out his Website:

Support your Devs.

Samstag, 1. Juni 2013


How to connect via ssh and rsa key

The first time I used Puttygen to generate my keys. But somehow i failed with copying my key through my open ssh session into the authorized_keys file. Everything seemed to work well. I had the right permissions and everything looked good. But... it didn't work. I just got a whole day of "Server refused our key".
Finally it worked.
I gonna show you how.

First things first. Don't use puttygen to generate your key. Use your pi.

Create your own ssh folder and navigate into it.

 mkdir ~/.ssh  
 cd ~/.ssh  

Now generate your Key. I use RSA 4096 bit keys. You may use which you please, but 1024 is/was considered as unsafe. While generating just press enter and enter your password as you please.

 ssh-keygen -t rsa -b 4096  
 mv authorized_keys
 mv id_rsa ~/privatekey  

Rename the files and move them. WinScp will be used to download the privatekey file.

Now change the rights of the .ssh folder and key file. And authorize the use of the private key.

 sudo chmod 700 ~/.ssh   
 sudo chmod 600 ~/.ssh/authorized_keys   

 sudo nano /etc/ssh/sshd_config  
 #AuthorizedKeysFile  %h/.ssh/authorized_keys  
 AuthorizedKeysFile  %h/.ssh/authorized_keys   

Now connect via WinScp or something else and download the privatekey file.
Save it and open it with puttygen. Now you can generate a Putty-useable private-key.ppk file.

Check if it works.Connect with Putty and your ppk file, use your new hostname you made in the last tutorial and enter your username,( and maybe your keyfile password) eh voila.

As far as i know i don't get the Server refused our key message, but if you do, something went wrong. If I made a mistake, tell me.

As last line of defense remove the permission to authenticate via Password:

 sudo nano /etc/ssh/sshd_config  
 PasswordAuthentication yes   
 PasswordAuthentication no  

It is also advised to remove root login permission and other things. Search around and tell me what you did.