Shellinabox mit service SSH

B

bilbo_b

Guest
Ich bin gerade dabei mein Freetz auf das minimal notwendige abzuspecken. Was ich aber wirklich noch brauche ist, Shellinabox. Eines vorweg. Shellinabox läuft auf der 7390. Ich habe aktuell keine weiteren Optionen oder Services für dieses Paket konfiguriert. Greife ich auf https://adresse.freetz:4200/ zu, komme ich somit bei Shellinabox raus und es bietet mir den Login auf der Shell der Box an. Ich hätte aber gerne das ich statt der Loginshell den Service SSH auf eine IP im gleichen Netz nutzen kann. Daher hatte ich versucht bei den Optionen im Feld "Service" folgendes einzugeben: "/:SSH:192.168.12.3". Starte ich dann Shellinabox neu bekomme ich folgendes zu sehen:
Code:
192 login:
Das alleine schaut schon seltsam aus, hätte ich doch hier eher die ganze IP Adresse erwartet. Versuche ich mich einzuloggen bekomme ich folgendes zu sehen:
Code:
my_ssh_username
WARNING: Ignoring unknown option -a                                                                                                                                                                                                                                            
Dropbear v2015.71                                                                                                                                                                                                                                                              
Session closed.
Wenn ich aber auf der Login Shell direkt bin (also Shellinabox ohne Serviceangabe), kann ich mich problemlos mit dem Befehl "ssh 192.168.12.3" auf den Rechner verbinden. Was mache ich falsch? Liegt das an Dropbear? An Shellinabox? An meiner Konfiguration?
 
Moins


Wenn der SSH Server, aus der Sicht von shellinaboxd, auf localhost läuft,
dann reicht...
Code:
shellinaboxd -t -b -p 4222 -s'/:SSH'
...zum Starten, und: "http://server:4222"
...zum Verbinden.

Eventuell ist es auch besser einen Hostnamen zu verwenden.
Code:
shellinaboxd -t -b -p 4222 -s'/:SSH:fritz.box'
siab_ssh_01.png

Oder wie wärs mit einer IPv6 für localhost?
Code:
shellinaboxd -t -b -p 4222 -s'/:SSH:::1'
Code:
SHLVL=1                                                                                             
SSH_CLIENT='::1 59356 22'
SSH_CONNECTION='::1 59356 ::1 22'
SSH_TTY=/dev/pts/7
 
Zuletzt bearbeitet:
Wenn ich im Feld Service in der Freetz Config für Shellinabox deine Werte eingebe, startet shellinabox nicht mehr. Laut Fehlermeldung wird weder der Hostname localhost, noch ein anderer erkannt. Das versteh ich nicht.
 
Eventuell hast du ein: \"Maskierungsproblem\"
Denn Gänsefüsse und Hochkommata verhalten sich, gerade in Skripten, unterschiedlich.
...oder das MIPS SIAB verhält sich anders.

Dann müsst ich mal meine Version auf der Box probieren.
Ich mein, da hatte ich ein ähnliches Problem. :gruebel:
...betraf aber wohl eher die Zertifikate. :confused:

...Moment...

In der Konsole mit der Debugausgabe bekomme ich mit...
Code:
shellinaboxd --version
[B]ShellInABox version 2.10 (revision 239)[/B]
shellinaboxd -t -p 4222 -s'/:SSH'
...diese Fehlermeldung...
Code:
Check failed at shellinabox/session.c:173 in newSessionKey(): (fd = NOINTR(open("/dev/urandom", O_RDONLY))) >= 0
...wenn die Adresse im Webbrowser aufgerufen wird.
Und shellinaboxd beendet sich unvermutet.
:noidea:
 
Zuletzt bearbeitet:
Die Abfrage mit "192 login:" kommt noch aus ShellInABox selbst, dort soll der Nutzername ermittelt werden, der für den SSH-Zugriff auf den anderen Host verwendet werden soll.

Die verwendete ShellInABox-Version ist nicht zufällig schon älter als 9 Monate?

Wenn ich im Feld Service in der Freetz Config für Shellinabox deine Werte eingebe, startet shellinabox nicht mehr.
Das wäre ein zweiter Hinweis auf eine zu alte Version.

Es gab ein Problem bei der Auswertung der Service-Parameter (Ticket 2736), die hier verwendete Version sollte in jedem Falle die notwendigen Patches bereits gesichert enthalten, bevor man weiter nach einem Problem sucht.

Erst wenn das eine aktuelle Version ist, wird es interessant wie die Kommandozeile für den (internen) Start aussieht, wenn Shellina auf einen SSH-Service trifft.

Da es auf einer normalen FRITZ!Box gar keine unprivilegierten Benutzer gibt, macht die zusätzliche Verwendung von SSH nur bedingt Sinn. Insbesondere darf man sich davon keinen Schutz irgendwelcher Kennwörter im event. nachfolgenden Login-Dialog versprechen, solange die Verbindung zwischen dem ShellInABox-Service und dem Browser nicht per TLS abgesichert ist - die SSH-Verbindung kommt nur zwischen der SIAB-Instanz auf der FRITZ!Box und dem SSH-Server auf der FRITZ!Box (oder einem anderen Host, da macht das dann auch wieder Sinn) zum Tragen.

Ansonsten sieht bei der Angabe von "SSH" als Service die Kommandozeile zum Aufruf so aus (aus service.c):
Code:
      "ssh -a -e none -i /dev/null -x -oChallengeResponseAuthentication=no "
          "-oCheckHostIP=no -oClearAllForwardings=yes -oCompression=no "
          "-oControlMaster=no -oGSSAPIAuthentication=no "
          "-oHostbasedAuthentication=no -oIdentitiesOnly=yes "
          "-oKbdInteractiveAuthentication=yes -oPasswordAuthentication=yes "
          "-oPreferredAuthentications=keyboard-interactive,password "
          "-oPubkeyAuthentication=no -oRhostsRSAAuthentication=no "
          "-oRSAAuthentication=no -oStrictHostKeyChecking=no -oTunnel=no "
          "-oUserKnownHostsFile=/dev/null -oVerifyHostKeyDNS=no "
Das ist keine Kommandozeile, die sich für den Aufruf von "dropbear" anbietet, wenn dort die unterstützten Optionen nur so aussehen:
Code:
Dropbear server v2014.65 https://matt.ucc.asn.au/dropbear/dropbear.html
Usage: dropbear [options]
-b bannerfile   Display the contents of bannerfile before user login
                (default: none)
-r keyfile  Specify hostkeys (repeatable)
                defaults:
                dss /etc/dropbear/dropbear_dss_host_key
                rsa /etc/dropbear/dropbear_rsa_host_key
                ecdsa /etc/dropbear/dropbear_ecdsa_host_key
-R              Create hostkeys as required
-F              Don't fork into background
-E              Log to stderr rather than syslog
-m              Don't display the motd on login
-w              Disallow root logins
-s              Disable password logins
-g              Disable password logins for root
-B              Allow blank password logins
-j              Disable local port forwarding
-k              Disable remote port forwarding
-a              Allow connections to forwarded ports from any host
-p [address:]port
                Listen on specified tcp port (and optionally address),
                up to 10 can be specified
                (default port is 22 if none specified)
-P PidFile      Create pid file PidFile
                (default /var/run/dropbear.pid)
-i              Start for inetd
-W <receive_window_buffer> (default 24576, larger may be faster, max 1MB)
-K <keepalive>  (0 is never, default 0, in seconds)
-I <idle_timeout>  (0 is never, default 0, in seconds)
-V    Version
Nun weiß ich ja nicht, ob und wie Freetz an der Stelle "ssh" nach "dropbear" verlinkt, aber ohne ein passendes Wrapper-Skript zum "Umsortieren" der Parameter würde ich jetzt nicht erwarten, daß man das 1:1 austauschen kann (habe es aber auch noch nie versucht).
 
Uiii das Freetz Image ist vom 23.01 mit vorherigem svn up. shellinabox --version gibt ShellInABox version 2.10 (revision 239) aus. Laut make menuconfig ist es aber 2.14.
 
Zuletzt bearbeitet von einem Moderator:
Das sollte der Trunk sein. Soweit ich weiß, sind dort die aktuellsten Applikationen enthalten. Falls ich mich irre, kann ich auch versuchen auf ein anderes Build auszuweichen. Wichtig ist nur, das die 7390 komplett abgedeckt ist.

Update: Yepp ist der Trunk. In der aktuellen Freetz-stable 2.0 ist keine FW für 7390 6.3x enthalten...
 
Zuletzt bearbeitet von einem Moderator:
Ich habe mir das einmal angesehen ... der Service "SSH" wird vermutlich wirklich nur mit OpenSSH auf der Box funktionieren. Ansonsten müßte man für den Aufruf von "dropbearmulti" als "ssh" noch die Parameter beim Aufruf im SIAB-Quelltext anpassen (Datei service.c ab Zeile 152).

Solange nicht mehrere Benutzer die FRITZ!Box als "Sprungbrett" für SSH-Zugriffe ohne SSH-Client verwenden sollen (das wäre das Szenario, wo man SIAB als Frontend für SSH benutzt), wäre der Aufruf mit einer "normalen" Service-Definition einfacher oder man muß sich dann eben doch unter dem Namen "ssh" irgendwo vor dem Link auf "dropbearmulti" im PATH ein passendes Wrapper-Skript ablegen, das zwischen OpenSSH und Dropbear den Aufruf übersetzt.

Ein versuchter Aufruf des SSH-Clients (--service /:SSH:192.168.130.2) aus SIAB heraus sieht jedenfalls im strace-Protokoll so aus:
Code:
4908  execve("/bin/ssh", ["ssh", "-a", "-e", "none", "-i", "/dev/null", "-x", "-oChallengeResponseAuthenticatio"..., "-oCheckHostIP=no", "-oClearAllForwardings=yes", "-oCompression=no", "-oControlMaster=no", "-oGSSAPIAuthentication=no",
 "-oHostbasedAuthentication=no", "-oIdentitiesOnly=yes", "-oKbdInteractiveAuthentication=y"..., "-oPasswordAuthentication=yes", "-oPreferredAuthentications=keybo"..., "-oPubkeyAuthentication=no", "-oRhostsRSAAuthentication=no", "-oRSAAu
thentication=no", "-oStrictHostKeyChecking=no", "-oTunnel=no", "-oUserKnownHostsFile=/dev/null", "-oVerifyHostKeyDNS=no", "-oLogLevel=QUIET", "[email protected]"], ["TERM=xterm", "COLUMNS=190", "LINES=54", "TZ=CET-1CEST-2,M3.5.0/02:00:
00,M"..., "HOME=/var/media/ftp/root", "SHELL=/bin/sh", "PATH=/bin:/usr/bin:/sbin:/usr/sb"..., "LOGNAME=root", "USER=root"] <unfinished ...>
 
OK. Verstehe. Wie würde ich denn einen solchen "normalen Serviceaufruf" absetzen müssen? Wenn ich das richtig verstehe kann ich ja ein beliebiges Kommando als Service absetzen. Beispielsweise auch htop oder was auch immer.

Update: Hab grad folgendes auf der Shell der Fritzbox versucht:
Code:
shellinaboxd -b --pidfile=/var/run/shellinaboxd.pid -c /tmp/shellinabox -p 4200 -t --css /var/media/ftp/uStor01/siab_wb.css --disable-ssl-menu --service='/:0:0:/:/usr/bin/ssh user@archraspberry'
Das hat genau das erwartete getan. Ich konnte nun im Browser direkt via SSH den Raspberry erreichen. So hatte ich mir das vorgestellt. Gebe ich aber im Freetz WebIF nun im Feld "Service" '/:0:0:/:/usr/bin/ssh user@archraspberry' an, startet Shellinabox nicht mehr. Er kann das nicht parsen. Verwende ich Anführungszeichen gehts auch nicht und auch völlig ohne Hochkomma funktioniert es nicht. Gleiches Ergebnis hab ich, wenn ich komplett alles im Feld "Andere Optionen" eingebe. Ich steh ein wenig auf dem Schlauch. Es funktioniert zwar rein theoretisch aber praktisch nicht wenn ich es im WebIF versuche.

Bin etwas ratlos.
 
Da ich kein Freetz auf der Box verwende, bin ich da nicht wirklich hilfreich ... wie sieht denn die erzeugte Konfigurationsdatei für SIAB aus (shellinabox.cfg)?

Ich würde aus dem Bauch heraus auf ein Problem mit der Speicherung der Einstellungen tippen (unescaped spaces), wenn ich diese Zeile in der rc.shellinabox sehe:
Code:
        [ -n "${SHELLINABOX_SERVICE// /}" ] && CMDLINE="$CMDLINE -s $SHELLINABOX_SERVICE"
Entweder Du paßt das Start-Skript an (das Leerzeichen in der Service-Beschreibung stört sicherlich den Aufruf, also sollte die Zeile am Ende so aussehen:
Code:
        [ -n "${SHELLINABOX_SERVICE// /}" ] && CMDLINE="$CMDLINE -s [COLOR="#FF0000"]\"[/COLOR]$SHELLINABOX_SERVICE[COLOR="#FF0000"]\"[/COLOR]"

oder auch so

        [ -n "${SHELLINABOX_SERVICE// /}" ] && CMDLINE="$CMDLINE -s [COLOR="#FF0000"]'[/COLOR]$SHELLINABOX_SERVICE[COLOR="#FF0000"]'[/COLOR]"

und es gibt sicherlich weitere Varianten, denn man könnte auch mittels

        [ -n "${SHELLINABOX_SERVICE// /}" ] && CMDLINE="$CMDLINE -s ${SHELLINABOX_SERVICE/ /\\ }"

enthaltene Leerzeichen maskieren
) oder Du verwendest beim Speichern Anführungszeichen (also ", Freetz verwendet einfache beim Speichern, so weit ich weiß) ... auch ein zusätzlicher Backslash vor dem Leerzeichen als Escape-Zeichen in der GUI-Maske könnte theoretisch funktionieren, wobei man da dann etwas experimentieren muß, damit man die richtige Anzahl ermittelt, denn beim Speichern der Einstellungen erfolgen bestimmt auch noch einige Auswertungen, die dann den resultierenden Wert schon beeinflussen.

Das ist aber eher ein Problem der SIAB-Integration in Freetz (hast Du eigentlich das Original oder meinen Patch aus Ticket 2741 verwendet?) als eines von SIAB selbst - da mußt Du sicherlich erst einmal selbst aktiv werden und eine Lösung für Dich finden.
 

Neueste Beiträge

Statistik des Forums

Themen
244,858
Beiträge
2,219,642
Mitglieder
371,571
Neuestes Mitglied
FritzFunk
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.