Nach Hause telefonieren!

Ich habe ein Gerät mit Debian aufgesetzt, von dem ich noch nicht weiss, wo es mal landen wird. Also wollte ich, dass es nach Hause telefoniert, sobald es online geht und mir eine Shell gibt.

Das Konzept:

  • Ethernet-Interface(s) auf DHCP
  • ssh Tunnel zu meinem Rechner zuhause mit remote Port forwarding und automatischem ssh-Login über key-authentication
  • Telnet server (doppelt ssh ginge auch, aber warum?)
  • Script, das alle 5 Minuten versucht, nach Hause (feste IP oder dyndns-Hostname) zu telefonieren und es bleiben lässt, wenn der Tunnel steht
  • telnet auf localhost und den getunnelten Port öffnet eine shell auf dem entfernten Gerät

So geht’s:

  • remote tunneling in der sshd_config erlauben (danach sshd neu starten):
# Allow remote port forwarding
GatewayPorts yes
  • Schlüsselpaar auf dem remote host anlegen und verteilen
ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/lalala/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/lalala/.ssh/id_rsa.
Your public key has been saved in /home/lalala/.ssh/id_rsa.pub.
The key fingerprint is:
4a:ad:04:26:3c:ae:df:0d:e7:3b:3c:77:54:45:b3:97
The key's randomart image is:
+--[ RSA 2048]----+
|          .oo.   |
|         .  o.E  |
|        + .  o   |
|     . = = .     |
|      = S = .    |
|     o + = +     |
|    . . o + o .  |
|           . o   |
|                 |
+-----------------+
scp ~/.ssh/id_rsa.pub lalala@callhomeip:.ssh/lalala.pub
    - und dort -
cat .ssh/lalala.pub >> .ssh/authorized_keys
  • telnet server installieren (apt)
  • service telnet2323 TCP auf Port 2323 in /etc/services anlegen
  • inetd oder xinetd anpassen:
telnet2323             stream  tcp     nowait  telnetd /usr/sbin/tcpd  /usr/sbin/in.telnetd
  • script auf dem remote host schreiben
#!/bin/bash
# callhome script

RUNS=$(netstat -p | fgrep 2323 | wc -l)

if [ $RUNS -ge 1 ]; then
   exit 0
fi

ssh -f -nNT -R 2323:localhost:2323 lalala@callhomeip

  • cronjob schreiben, der das script alle 5 Minuten aufruft
  • telnet auf localhost port 2323
  • Ethernet Interface in /etc/network/interfaces (oder wo auch immer das auf Deiner Distri ist) auf hotplug und DHCP stellen

Das gute ist: Das funktioniert auch hinter NAT und man muss wirklich nicht wissen, wo das Gerät aufgebaut wird. Das Script kann man sicher auch schöner bauen, aber es muss ja nur ein Mal funktionieren. Danach kann man eine „normale“ IP-Config und einen ssh-Zugang auf das Gerät konfigurieren.

Advertisements
Nach Hause telefonieren!

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s