SSH Web (webshell)

SSH Web Gateway mit dem OpenSource Tool shellinabox

Der eigentlich für den direkten Konsolenzugriff über Web gedachte Dienst shellinabox lässt sich hervorragend dazu verwenden ein Gateway für SSH-Verbindungen herzustellen. Dies ist vor allem, dann interessant wenn des Öfteren Maschinen aus Netzen die keine Verbindungen zu Port 22 oder manuell definierten Ports über 1024 zulassen, gewartet werden müssen.

Aus Sicherheitsgründen sollten Sie so einen Dienst nur auf einer eigenen Maschine (z.B. virtuell) einrichten, für das zugrunde liegende System eigene sonst nicht verwendete Passwörter definieren und den shellinabox-Daemon nur mit eingeschränkten Rechten starten.

Der Service lässt sich unter https://tools.bartlweb.net/websshausprobieren.

Die HTML-Implementierung funktioniert in allen modernen Browsern und lässt sich via Apache mod_proxy ins Netz bringen. Die Eingabe von Sonderzeichen macht allerdings in Firefox Probleme, daher empfehle ich die Nutzung unter Chrome. Wer dennoch auf Firefox angewiesen ist kann zumindest mathematische Symbole anstelle der normalen Tasten über das Nummernpad eingeben.

Installation

Richten Sie eine eigene Linux-Installation für den Service ein. Dann laden Sie sich die aktuelle Version von shellinabox unter http://code.google.com/p/shellinabox/ herunter. Entpacken Sie den Inhalt des Archivs und kompilieren bzw. installieren Sie das Tool mit den im Verzeichnis des Quellcodes ausgeführten Befehlen ./configuremake undmake install.

Autostart und Startparameter

Um shellinabox mit der gewünschten Konfiguration zu starten benötigen wir ein Wrapper-Skript die wir z.B. in das Home-Verzeichnis (hier/home/webssh/start_shellinabox.sh) unseres Benutzers, unter dem wir shellinabox ausführen wollen (hier webssh), legen. Darin rufen wir das Tool shellinabox auf und konfigurieren es wie folgt:

  • --background: Im Hintergrund als Dienst starten.
  • --service: Wir bieten unserer nachfolgendes Shelllskript als Service an. Dabei wird der Service nach dem folgenden Schema definiert /:<username>:<group>:HOME:'<script>'
    • <username> / <group>: Username und Gruppe des Nutzers, mit dessen Rechte das angegebene Skript ausgeführt wird.
    • HOME: Definiert das Home-Verzeichnis des angegebenen Benutzers als zu verwendendes Arbeitsverzeichnis.
    • <script>: Pfad zum Skript, dessen Ausgabe bei Aufruf des Dienstes über die Weboberfläche angezeigt wird.

Daraus ergibt sich der folgende Inhalt für unser Wrapper-Skript:

#!/bin/sh
/usr/local/bin/shellinaboxd --background --service=/:webssh:webssh:HOME:'/home/webssh/shellinabox_sshwrapper.sh'

Damit der shellinabox-Daemon nun bei jedem Start ausgeführt wird, rufen wir das angelegte Skript über die Crontab-Datei des Nutzers webssh auf.

@reboot /home/webssh/start_shellinabox.sh >> /dev/null 2>&1

SSH-Service Shellskript

Die Ausgabe des folgenden Shellskripts wird dem Nutzer bei Aufruf der Weboberfläche angezeigt. Hier fragen wir nach den Parametern des Remotehosts (Hostadresse, Hostport und Benutzername), fangen Anfragen an interne IPs ab und starten die eigentliche SSH-Verbindung. Um SSH-Verbindungen nicht aufgrund von wechselnden Hostkeys zu blockieren, akzeptieren wir unbekannte Hosts automatisch und verwerfen diese durch Speichern in /dev/null.

Kopieren Sie den nachfolgenden Code in die Datei/home/webssh/shellinabox_sshwrapper.sh.

#!/bin/bash
 
#
# get host
#
 
read -p "SSH remote host (hostname or ip address): " host;
 
if [ -z "$host" ]; then
    echo ""
    echo ""
    echo "A hostname or ip address of the remote host is required."
    echo ""
    echo ""
    exit
fi
 
if [ "$host" == "localhost" ] || [[ "$host" = "127.0.0."*  ]] || [[ "$host" = "0.0.0.0"  ]] || [[ "$host" = "10."*  ]] || [[ "$host" = "192.168."*  ]]; then
    echo ""
    echo ""
    echo "Connections to internal network devices are not supported."
    echo ""
    echo ""
    exit
fi
 
#
# get port
#
 
read -p "SSH remote port [22]: " port;
 
if [ -z "$port" ]; then
    port=22;
fi
 
if [[ -n ${port//[0-9]/} ]]; then
    echo ""
    echo ""
    echo "Port must be a number between 0 and 65535."
    echo ""
    echo ""
    exit
fi
 
#
# get username
#
 
read -p "SSH remote username: " username;
 
if [ -z "$username" ]; then
    echo ""
    echo ""
    echo "A username of the remote host is required."
    echo ""
    echo ""
    exit
fi
 
#
# execute ssh command
#
 
echo ""
echo ""
exec ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p $port $username@$host;


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值