Ajaxterm

Aus Mikiwiki
Wechseln zu: Navigation, Suche

Ajaxterm ist eine VT100-kompatible Terminalemulation, die hauptsächlich aufgrund der Komplexität von Anyterm entwickelt wurde. Ajaxterm ist serverseitig in Python geschrieben, clientseitig in Javascript, und funktioniert zusammen mit dem Apache-Modul "mod_proxy" als Daemon.

Installation

Ubuntu 8.04 Hardy Heron

$ sudo apt-get install ajaxterm

Konfiguration

Die Konfiguration findet über die Datei "/etc/default/ajaxterm" statt.

Ajaxterm sollte möglichst mit den Rechten eines unprivilegierten Benutzers laufen.

Nach der Installation kann über die URL http://localhost:8022/ mit Hilfe eines Webbrowsers auf die lokale Befehlszeile zugegriffen werden. Ajaxterm ruft dazu auf dem Rechner "/bin/login" auf, danach läuft im Browserfenster eine voll funktionsfähige Terminalsitzung ab. Drei Schaltflächen im Fenster bieten Zusatzfunktionen:

  • "Color" schaltet den Farbmodus aus und wieder an.
  • "GET" wechselt zwischen den HTTP-Methoden GET und POST, wobei POST die sicherere und deshalb voreingestellt ist. Zwar wäre die GET-Methode schneller, jedoch erscheinen damit alle URLs und sogar die einzelnen Tastendrücke in der Logdatei des Webservers - zumindest für die Passworteingabe sollte also unbedingt auf POST umgeschaltet werden.
  • "Paste" erlaubt das Kopieren und Einfügen über die Zwischenablage, sofern das in den Sicherheitseinstellungen des Webbrowsers erlaubt wurde. Das ist nur möglich, wenn Javascript auf die Zwischenablage zugreifen darf.

Statt von "/bin/login" startet Ajaxterm über die Option "-c" wahlweise ein anderes Programm, sodass beispielsweise über ssh die Weiterleitung auf einen anderen Rechner möglich ist. Auf Wunsch schreibt Ajaxterm eine eigene Logdatei - über die Option "-l" auf die Standardfehlerausgabe. Da Ajaxterm Verbindungen nur über die Localhost-Netzwerkschnittstelle zulässt, ist für den Fernzugriff zusätzlich ein Webserver nötig. Hier beschrieben ist ausschliesslich die Konfiguration des Apache HTTP Server ab Version 2.

Verbindung über HTTPS

Auch wenn eine Firewall den SSH-Login über Port 22 verbietet und generell alle Ports ausser 80 (HTTP) und 443 (HTTPS) sperrt, erlaubt Ajaxterm den Fernzugriff, denn es läuft auf dem entfernten Rechner und stellt über HTTPS ein Terminalfenster im Webbrowser dar.

|----------------|                       |----------|      |-----------------------------------------------|
| CLIENT         | --- verboten: 22 ---> | FIREWALL |      | ENTFERNTER RECHNER                            |
| mit Webbrowser | --- erlaubt: 443 ---------------------> | Apache --- 8022 ---> Ajaxterm ---> /bin/login |
|----------------|                       |----------|      |-----------------------------------------------|

Dazu ist eine externe Umleitung über Apaches Proxy-Funktionen in der folgenden Art notwendig.

Listen 443
NameVirtualHost *:443

<VirtualHost *:443>
  ServerName test.xxx.yy
  SSLEngine On
  SSLCertificateKeyFile ssl/apache.pem
  SSLCertificateFile ssl/apache.pem

  # Hauptverzeichnis dieses virtuellen Hosts
  DocumentRoot /var/www/test

  # Möglichst das normale Proxyverhalten des Proxymoduls ausschalten,
  # damit keine Fremden den Webserver als offenen Proxy missbrauchen!
  ProxyRequests Off

  # Loglevel normalerweise bei "warn", loggt also recht viel mit. Um
  # weniger zu loggen empfiehlt sich "emerg".
  LogLevel warn

  # Beim Loggen sollte nur wenig mitgeloggt werden, hier nur 
  # Quell-IP-Adresse, Zeit und Status
  CustomLog /var/log/apache2/ajaxterm-access.log "%a %t %s"
  ErrorLog /var/log/apache2/ajaxterm-error.log

  # Hier die eigentlichen Weiterleitungen auf die intern laufende
  # Anwendung
  ProxyPass /ajaxterm/ http://localhost:8022/
  ProxyPassReverse /ajaxterm/ http://localhost:8022/
</VirtualHost>

Besitzt der Apache HTTP Server noch kein SSL-Zertifikat (in der Konfigurationsdatei "apache.pem"), so muss nun über einen Aufruf des Skripts "apache2-ssl-certificate" ein solches Zertifikat erstellt werden. Beim Aufruf mit dem Parameter "-new" werden verschiedene Daten abgefragt - zwingend ist dabei nur der richtige Rechnername, denn sonst beschweren sich die Webbrowser bei jedem Ladevorgang über das Zertifikat und verweigern womöglich sogar die Zusammenarbeit mit dem HTTP-Server. Das selbst signierte SSL-Tertifikat hat Nachteile gegenüber einem von einer CA ausgestellten Zertifikat. Für den Terminalzugang zum eigenen Rechner reicht es aus, beim Zugriff über den Webbrowser die Fingerabdrücke (engl. fingerprints) zu prüfen. Ist das zu unpraktisch, bleibt nur der Kauf eines Zertifikats.

Das Proxymoduls muss im Apache HTTP Server erst aktiviert werden. Unter Debian Sarge beispielsweise werden mit folgenden Befehlen gleichzeitig die SSL- und die Proxymodule aktiviert. Sobald der Apache HTTP Server Anfragen auf dem SSL-Port 443 beantwortet, funktioniert auch der Ajaxterm-Zugriff über einen URL der Form https://test.xxx.yy/ajaxterm/

$ cd /etc/apache2/mods-enabled/
$ for i in proxy.load proxy.conf ssl.load ssl.conf; \
    do ln -s ../mods-available/$i .; done
$ /etc/init.d/apache2 restart

Die Apache-Logdatei wird sehr schnell sehr gross, weshalb es in der obigen Beispielkonfiguration auf das wesentliche verkürzt ist: Es werden hier nur noch Quell-IP-Adresse, Zeit und Status der Anfrage protokolliert. Der Loglevel sollte auch aus Geschwindigkeitsgründen von "warn" zu "emerg" eingeschränkt werden.

Im Leerlauf, wenn der Benutzer keine Tasten drückt, wandern etwa ein bis drei KB pro Sekunde zwischen Server und Client hin und her. Bei der Übermittlung umfangreicher Ausgaben (z. B. von cat oder ls) ist das Verhältnis zwischen ausgegebenen und übertragenen Daten im HTTP-Modus GET etwa 1:5, d. h. das Fünffache der angezeigten Datenmenge wandert über die Leitung. Im HTTP-Modus POST verringert sich dieses Verhältnis auf knapp 1:2. Am schnellsten reagiert Ajaxterm natürlich auf dem Lovalhost-Port ohne Apache-/SSL-Umgebung.

Weblinks

Vorlage:Weblinks1