VNC-Verbindung durch ssh-Tunnel mit dynamischer DNS herstellen

Aus Siduction Wiki DE
Wechseln zu: Navigation, Suche

Deutsche Version

In diesem Beispiel wollen wir unseren Rechner zu Hause von unserem Laptop unterwegs steuern oder jemandem aus der Ferne etwas auf dem heimischen Desktop zeigen.

Der Rechner zu Hause ist in dem Fall der Server, sowohl für ssh als auch für VNC, das Laptop ist der Client.


Dynamische DNS

Erst mal besorgen wir uns eine dynamische DNS. In meinem Fall bei www.dnsdynamic.org.

Anschließend sorgen wir dafür daß diese laufend aktuell gehalten wird:

apt-get install ddclient

Jetzt die Konfigurationsdatei(en) von ddclient anpassen.

/etc/default/ddclient

run_dhclient="false"
run_ipup="false"
run_daemon="true"
daemon_interval="60"

/etc/ddclient.conf

protocol=dyndns2
if=wlan0
use=web 
web=myip.dnsdynamic.com #wirklich "myip.dns..." nicht $meineIP.dns... " 
server=www.dnsdynamic.org
login=DeineEmailadresse
password='Dein Passwort bei dnsdynamic.org'
daemon=60
pid=/var/run/ddclient.pid
DeinedynamischeDNS.dnsdynamic.com 

Das sollte der erste Schritt gewesen sein.

Herstellen der ssh-Verbindung

Voraussetzung für die nächsten Schritte ist daß openssh und der Gnuprivatsphärenwächter (z.B. kgpg, gnupg-agent...) installiert sind.

Jetzt erzeugen wir uns auf dem Client -als user- für die initiale ssh-Verbindung mittels:

ssh-keygen

ein privates/öffentliches Schlüsselpaar. Der private Schlüssel (Datei id_rsa) verbleibt im Ordner /home/$USER/.ssh. Den public key (Datei id_rsa.pub) entnehmen wir diesem Ordner, kopieren diese Datei auf den Server nach /home/$USER/.ssh und benennen sie in authorized_keys um. Sollte bereits eine Datei dieses Namens vorhanden sein fügen wir den Schlüssel (Inhalt der Datei id_rsa.pub) stattdessen einfach dort ein. Die Datei /etc/ssh/sshd_config auf dem Server sollte aus Sicherheitsgründen wie folgt bei diesen Einstellungen abgeändert werden.

PermitRootLogin no
AuthorizedKeysFile	/home/$user/.ssh/authorized_keys #$user durch den tatsächlichen user ersetzen!
PasswordAuthentication no
UsePAM no

Damit wird erreicht daß keine Passwort-Authentizierung sondern nur die Authentizierung über den sicheren Private/Public-Key erfolgt und root sich nicht direkt einloggen kann. Werden root-Rechte gebraucht kann diese der User nach dem login erlangen.

Oft wird eine Verlegung des ssh-Ports in die oberen Bereiche (>50000) empfohlen um bei einem Portscan etwas sicherer zu sein:

nano /etc/ssh/sshd_config

Die Zeile "Port 22" in Port XXXXX ändern (z.B. 54545), speichern und dann ein:

 systemctl restart ssh

Wir können den Erfolg kontrollieren:

systemctl status ssh

Es sollte folgende Zeile in der Meldung erscheinen:

$Date $Hostname sshd[$pid] Server listening on 0.0.0.0 port 54545

Nicht vergessen, falls erforderlich, auch den betreffenden Port im Router für die TCP-Verbindung durchzuschleifen.

Der Client kann die Verbindung dann mit

ssh $USER@$meine.dynamische.DNS -p 54545

herstellen und bereits auf der Textoberfläche des Servers agieren. Wird die grafische Oberfläche nicht gebraucht ist dies eine sichere Wartungsmöglichkeit. $USER ist durch den Benutzer auf dem Server, der "übernommen" werden soll zu ersetzen. Dieser muß existieren.

Verlassen wird die Verbindung mit

exit

Wir wollen aber auch die grafische Oberfläche sehen:

VNC-Verbindung

Auf der Server-Seite:

apt-get install x11vnc

Auf der Clientseite:

apt-get install xtightvncviewer

Ab jetzt erfolgen alle Aktionen vom Client aus:

ssh -C -L 5901:localhost:5900 $USER@Deine.dynamische.DNS -p 54545

Beim ersten Aufruf jeder DNS bzw IP erfolgt hier eine Rückfrage die mit "yes" zu beantworten ist, wenn man die Verbindung herstellen will.

Dadurch wird ein Eintrag in /home/$USER/.ssh/known_hosts erzeugt, so daß zukünftige Verbindungen ohne Rückfrage erfolgen können.

Der Client ist jetzt auf dem Server eingeloggt und startet dort den VNC-Server:

x11vnc -geometry 1024x568 #geometry auf die Auflösung des client anpassen

Dieses Konsolenfenster bleibt jetzt offen bis die Sitzung beendet ist.

Neues Fenster öffnen:

xtightvncviewer :1

Der Desktop des Servers erscheint auf die angegebene Auflösung heruntergerechnet auf dem Schirm des Client.

Ich möchte hier auch noch auf diesen Beitrag [Fernwartung_mit_x11Vnc] hinweisen.


English Version

In this example we want to control our desktop at home with our laptop away or show someone somewhere outside our screen at home.

In this case the computer at home is the server, either for ssh as for VNC also, the laptop is the client.

Dynamic DNS

First we acquire a dynamic DNS, in this example at www.dnsdynamic.org.

Afterward we ensure to keep it continually updated:

apt-get install ddclient

Now adjust the configuration file(s) of ddclient.

/etc/default/ddclient

run_dhclient="false"
run_ipup="false"
run_daemon="true"
daemon_interval="60"

/etc/ddclient.conf

protocol=dyndns2
if=wlan0
use=web 
web=myip.dnsdynamic.com #Really "myip.dns..." not $myIP.dns... " 
server=www.dnsdynamic.org
login=YourEmailAddress
password='$Your password at dnsdynamic.org'
daemon=60
pid=/var/run/ddclient.pid
$YourDynamicDNS.dnsdynamic.com 

Now the first step should be done.

Establish a ssh-connection

Prerequisite for the next steps is that openssh and gnuprivatguard (eg kgpg, gnupg-agent ...) are installed.

Now we produce ourself on the clientside -as user- for the initial ssh connection by:

ssh-keygen

a privat/public keypair.

The private key (file id_rsa) remains in the folder /home/$USER/.ssh. The public key (file id_rsa.pub) we take from the above folder, copy this file into the servers folder /home/$USER/.ssh and rename it to authorized_keys. If there already a file with this name exists, we simply copy (add) the key (content of the file id_rsa.pub) instead in there.

The file /etc/ssh/sshd_config on the server should be altered for safety reasons in the following settings:

PermitRootLogin no
AuthorizedKeysFile /home/$user/.ssh/authorized_keys #$user is to be replaced with the actual user
PasswordAuthentication no
UsePAM no

This ensures that no password authentication, but only authentication by the secure private/public key process can be used and direct root login is forbidden. If root acces is necessary the user can get root after login.

Often a relocation of the ssh port to the upper ranges (> 50000) is recommended to be a bit safer in case of a portscan:

nano /etc/ssh/sshd_config

Change line "Port 22" to "Port XXXXX" (e.g. 54545), save/exit and:

 systemctl restart ssh

We may check the result:

systemctl status ssh

The following line should come up within the resulting message:

$Date $Hostname sshd[$pid] Server listening on 0.0.0.0 port 54545

Do not forget to set a passthrough for TCP connections for this port on your router, if necessary

The client may establish a connection now with:

ssh $USER@$my.dynamic.DNS -p 54545

and act on console interface on the server. If no GUI is needed this is a secure option for maintenance. $USER is to be replaced with the username on the server which should be "taken over". This user must exist on the server. $my.dynamic.dns of course must be replaced with the dynamic dns you acquired in the above chapter.

Leave the connection with

exit

But we also want to enter the graphical surface:

VNC connection

On the server:

apt-get install x11vnc

On client:

apt-get install xtightvncviewer

Until now all actions are to be pushed from the client:

ssh -C -L 5901:localhost:5900 $USER@$my.dynamic.DNS -p 54545

On the first call of ervery DNS or IP a query comes up which is to be answered with "yes" if a connection should be established.

This generates an entry in /home/$USER/.ssh/known_hosts so further connections can be established without checking back again.

The client now is logged in on the server and starts the VNC server there with:

x11vnc -geometry 1024x568 #adapt geometry to the resolution of the client

This console window stays open till the end of the session.

Open a new console window:

xtightvncviewer :1

The desktop of the server appears to the specified resolution downscaled at the screen of the client.

You may have a look to this wiki also -sorry, german only until now-[Fernwartung_mit_x11Vnc]