Sonntag, 2. Dezember 2018

SSH Zugang ohne Passwort und Datenzugriff via SSHFS

Man hat eine Sache erst dann richtig verstanden, wenn man sie einem anderen
so gut erklären kann, das der das auch versteht.

Das wusste ich schon lange, hat sich aber diese Woche wieder einmal bewiesen
als ich mit jemandem über das SSH Filesystem (sshfs) sprach.

Das ist eine unheimlich tolle Sache, weil man darüber ausgesprochen komfortabel
und sicher von unterwegs auf seine Daten zu Hause oder in der Firma zugreifen kann.

Der einzige Nachteil ist allerdings daß das bisher nur unter Linux so richtig gut funktioniert.
Aber es ist ja nur noch eine Frage der Zeit, bis Windows endgültig unter gegangen ist
und jeder ganz selbstverständlich einen Linux-PC benutzt. Microsoft trägt ja schon seit
langem seinen Teil dazu bei, das wir uns alle nach alternativen umsehen.

Doch genug davon. SSH und SSHFS. Was ist das, wozu braucht man das, wie installiert man das?

SSH steht für SecureShell und meint damit den Zugang per Kommandozeile auf einem Computer.
Das ist sowas ähnliches wie dieser schwarze Kasten, mit dem die wenigsten etwas anfangen können
wenn man unter Windows das Programm cmd.exe ausführt.

Die Shell unter Linux kann allerdings zu weitaus mehr benutzt werden als die doofe DOS-Box
unter Windows. Wenn wir von einem Windows-PC aus auf einen Linux-PC zugreifen wollen
benutzen wir dafür meistens PuTTY oder etwas ähnliches, wie zum Beispiel KiTTY das auf
der jeweils aktuellen Version von PuTTY aufbaut und etwas mehr kann.

Mit SSH bauen wir also eine verschlüsselte Verbindung zu einem Linux auf. Darüber kann
man nun wie ein wilder Hacker kryptische Befehle tippen und die Leute verwirren die einem
dabei zusehen.

Aber ssh kann noch viel mehr. Über eine ssh Verbindung kann man Daten quasi huckepack mit
über die Leitung schicken. Die sind dann selbstverständlich auch verschlüsselt. Und es können
alle möglichen Daten sein, Fotos, Videos, Dokumente, Telefonate, eine Pizza Bestellung
oder auch mal die Baupläne zu einer Atomkraftanlage... oder was immer James Bond sonst
gerade so ergattert hat,

Echte Profis machen sowas natürlich über eine VPN-Verbindung, was im Grunde sogar fast
das gleiche aber dennoch lange nicht das selbe ist. Das würde jetzt aber zu weit führen, diesen
Unterschied auch noch zu erklären. Nur soviel, einen SSH-Tunnel kann man generell schneller,
leichter, einfacher und meist auch billiger einrichten als eine VPN-Verbindung.

Aber ich glaube die meissten die hier mitlesen wissen ohnehin schon besser als ich was SSH ist.

SSH login ohne Passwort

Linux

$ ssh-keygen -t rsa

den Dateinamen eingeben den der Private key und Public key enthalten soll
Beispiel: <name-Startrechner>-<name-Zielrechner> 
Also: start-ziel

Es entstehen:
start-ziel          der Secret key, der auf der Quelle bleibt
start-ziel.pub   der Public  key, der zum Ziel übertragen wird.

Den Public Key mittels SecureCopy (SCP) auf das Ziel übertragen
und zur Datei ~/.ssh/authorized_keys hinzufügen

$ scp start-ziel* <user>@<Zielrechner>:~/.ssh

per SSH auf den Zielrechner einloggen und die *.pub Datei per cat zu authorized_keys hinzufügen

$ cat ~/.ssh/start-ziel.pub >>~/.ssh/authorized_keys

Zugang vom Startrechner zum Zielrechner dann beim nächsten mal mit Hilfe des Secret Key

$ ssh -i ~/.ssh/start-ziel <Zielrechner>

aus Gründen der Bequemlichkeit ein Alias zur .bash_aliases hinzufügen

$ joe ~/.bash_aliases

alias ziel="ssh -i ~/.ssh/start-ziel" $1 $2 $3 $4 $5

Speichern und dann aktivieren via

source ~/.bash_aliases

Die Datei .bash_aliases wird beim nächsten Neustart automatisch von der .bashrc abgearbeitet

Windows:
PuTTYgen starten und damit den Public Key & Secret Key erstellen
Den Pubkey am besten gleich ins Clipboard kopieren und den Secret Key 
unter einem eindeutigen Namen abspeichern. 

Zum Beispiel <name-StartPC-nameZielPC>.ppk 
also in etwa Startpc-ZielPC.ppk

Die Dateiendung .ppk hängt PuTTYgen beim speichern des Secret-Key dabei selbst an.

Jetzt auf ein letztes mal per Name & Passwort via PuTTY auf den Ziel-PC wechseln und 
dort die Datei authorized_keys editieren. Dabei vor dem einfügen unbedingt darauf achten, 
daß das WordWrapping abgeschaltet ist, weil sonst beim einfügen der Public Key hinten 
abgeschnitten wird und in die nächste Zeile rutscht. Dann funktioniert das ganze nämlich nicht.
Abschalten des Wordwrapping beim joe mit Strg-T und dann w

$ joe ~/.ssh/authorized_keys

hier den Key aus dem Clipboard einfügen und die Verbindung zum Zielrechner beenden.
Damit für den nächsten Login der Secret Key und nicht das Passwort verwendet wird,
muss der Eintrag in PuTTY darauf vorbereitet werden.

Dein Eintrag für den Zielrechner also in PuTTY an zwei stellen bearbeiten

1. Saved Sessions --> <ZielrechnerName> unter Category: Connection -> SSH -> Auth die ppk-Datei <Zielrechner.ppk>
ins Loginprofil übernehmen und abspeichern
2. unter Connection --> Data bei Login details den Auto-login usernamen eintragen

sshfs installieren

$ sudo apt install sshfs

Gruppe fuser erstellen 

$ sudo groupadd fuser

aktuellen user zur gruppe fuser hinzufügen 

$ sudo usermod -aG fuser <user>

unbedingt REBOOT! sonst geht's wirklich nicht. Ich hab's probiert.

Nächster Schritt: 
Die Verzeichnisse anlegen, wo das Ziel einmontiert werden soll.

$ mkdir /media/zielpc/data

Die Verzeichnisrechte anheben, weil's sonst schief geht. 

$ chmod 777 /media/zielpc
$ chmod 777 *

Das müssen wahrscheinlich nicht 777 sein, ich war nur zu Faul mir darüber Gedanken zu machen.

An dieser Stelle habe ich mir zwei kleine Skripte zum connect und disconnect erstellt.

$ joe connect

#!/bin/sh
sshfs <user>@<ziel>:/mnt/data /media/zielpc/data -o IdentityFile=~/home/<user>/.ssh/start-ziel

$ joe disconnect

#!/bin/sh
fusermount -u /media/zielpc/data

Jetzt noch zack die Shellskripte startfähig machen mit

$ chmod +x connect
$ chmod +x disconnect

und schon kann es los gehen mit der wilden Datenschubserei :-)