Webový SSH - Web-based SSH

Webový SSH umožňuje přístup Zabezpečte Shell (SSH) servery prostřednictvím standardu internetové prohlížeče. Příslušní klienti jsou obvykle založeni na JavaScript /Ajax nebo JavaScript /Webové zásuvky, a pokud pracují společně s proxy Ajax / WebSocket-to-SSH, lze je použít pro přístup k serverům SSH zezadu firewall nebo proxy který umožňuje přenos HTTP, ale neumožňuje přenos SSH.

Technologie

Weboví klienti SSH se v zásadě skládají z následujících částí:

  • Na straně klienta: Typicky JavaScript a dynamický HTML stránky se používají k zachycení stisků kláves, přenosu zpráv na / ze serveru a zobrazení výsledků v uživatelském webový prohlížeč.
  • Serverová / webová aplikace: Příchozí požadavky jsou zpracovány na webový aplikační server. Události na klávesnici jsou předávány klientovi zabezpečeného prostředí komunikujícího s připojeným SSH serveru. Terminálový výstup je buď předán klientovi, kde je převeden do HTML pomocí JavaScript nebo je přeložen do HTML serverem, než je přenesen do klienta.

Emulace terminálu na straně klienta

Webové servery SSH, které využívají emulaci terminálu na straně klienta, obvykle přenášejí surový výstup terminálu ze serveru SSH přímo do klienta. To má tu výhodu, že vyloží proces překladu terminálového výstupu do HTML na klienta. Nevýhodou této metody je, že je omezena možnostmi JavaScript a na zpracování příchozího proudu znaků spotřebuje netriviální množství CPU a paměti klienta. Spoléhá se také na klienta, aby sledoval stav terminálu a reagoval na něj únikové sekvence.

Příklad emulátoru terminálu na straně klienta: vt100.js[1]

Emulace terminálu na straně serveru

Webové servery SSH, které využívají emulaci terminálu na straně serveru, obvykle sledují obrazovku a stav terminálu v paměti a převádějí jej do HTML, buď když dojde k aktualizaci obrazovky, nebo když klient výslovně požaduje aktualizaci. Výhodou této metody je, že stav terminálu zůstává trvalý i v případě, že se uživatel připojuje ke svým existujícím relacím z jiného webového prohlížeče. Umožňuje také serveru jednat na výstupu terminálu, i když je uživatel odpojen.[2] Nevýhodou této metody je, že na serveru spotřebovává více CPU a paměti.

Příklad emulátoru terminálu na straně serveru: terminal.py[3]

Výhody

Hlavní výhody založené na webu SSH lze shrnout takto:

  • Přístupnost: Webový SSH popsaný v tomto článku nevyžaduje žádnou lokální instalaci klientského softwaru. Je tedy možné přistupovat k serverům SSH prostřednictvím webového prohlížeče odkudkoli. Protože komunikace je založena na HTTP nebo HTTPS je také možné přistupovat k serverům SSH zezadu a firewall nebo proxy který omezuje přístup k internetu pouze na porty 80 (HTTP ) nebo 443 (HTTPS ).
  • Anonymní přístup: Protože přístup SSH je tunelován prostřednictvím zprostředkovatele webový aplikační server je to tento server, který ve skutečnosti komunikuje se serverem SSH. To znamená, že server SSH bude informován pouze o IP adresa webového aplikačního serveru, přičemž zůstane skrytá IP adresa skutečného klienta.
  • Kontrolovatelnost: Protože veškerá komunikace mezi klientem a serverem SSH musí procházet přes webový aplikační server tuto komunikaci lze zaznamenat. To zabrání škodlivému klientovi v mazání protokolů o jeho aktivitách. Situace je naprosto stejná jako u tradičního serveru SSH.
  • Obnovení relací: Některé webové implementace SSH umožňují uživateli obnovit jejich relace SSH po odpojení. To není možné u tradičního klienta SSH.
  • Vložitelné: Webové implementace SSH lze vložit do jakékoli webové stránky, což umožňuje jejich integraci do jiných webových aplikací.
  • Unikátní funkce: Mnoho webových nástrojů SSH má jedinečné vlastnosti, jako je schopnost sdílet terminály s ostatními uživateli, zobrazit obrázky v terminálech a další užitečné funkce.

Důležité otázky

Je třeba vzít v úvahu následující problémy a jsou důležité při použití webového klienta SSH:

  • Bezpečnostní: Je důležité se ujistit, že HTTPS se používá při komunikaci s webový aplikační server. Jinak by všechna odesílaná data byla čitelná pomocí jednoduchého paketové čichače které by mohly odhalit citlivé informace.
  • Důvěra: Zde se dešifrují data odesílaná na webový aplikační server. To je nezbytné k předání vydaných příkazů na skutečné SSH serveru. I když provozovatelé webových řešení SSH obvykle nezaznamenávají citlivá data, data jsou jim teoreticky k dispozici v prosté formě. Je nepravděpodobné, že by to způsobilo bezpečnostní problém, když webový aplikační server a server SSH jsou spuštěny na stejném serveru nebo jsou řízeny stejnou entitou.
  • Tunelování: Na rozdíl od většiny tradičních klientů SSH založených na aplikacích se weboví klienti SSH nemohou tunelovat („vpřed“) TCP provoz. Například spuštění X relace přes webovou relaci SSH není možná. Nedostatek schopností je však způsoben problémy s implementací a není nějakým způsobem inherentní.[4]

Zdarma a open source příklady

  • Google Rozšíření Secure Shell pro Chrome a Chromium[5] spáruje emulátor terminálu JavaScript hterm s OpenSSH klientský kód běží na Nativní klient.[6] Rozšíření Secure Shell funguje s proxy servery Google HTTP-to-SSH přes háčky proxy a aplikací třetích stran nassh-relé[7] můžete použít tyto háčky k povolení rozšíření Secure Shell k navázání připojení SSH XMLHttpRequest nebo WebSocket doprava.
  • shellinabox[8] funguje jako samostatná služba nebo ve spojení s nginx poskytnout HTTPS přístup k přihlašovacímu shellu a je zabalen pro Debian a Červená čepice -odvozený Linux distribuce.
  • webssh[9] je podobné řešení napsané v Pythonu.
  • Bastillion[10] je hostovaný webový bastion s vlastními schopnostmi auditu a správy klíčů. Uživatelé se připojují k centralizovanému serveru HTTPS a připojení SSH jsou zabezpečena prostřednictvím zabezpečeného připojení WebSocket doprava.
  • Z důvodu přerušovaného síťového připojení s vypršením časového limitu připojení.[11] Mosh od MIT může být lepším řešením[12] Nejprve využívá SSH UDP z toho.[13]
  • FireSSH je zásuvný modul prohlížeče, který funguje na Firefox ESR a Waterfox.

Existují také knihovny JavaScriptu, které umožňují psát webové stránky podobné terminálu. Příkladem je terminál jQuery[14] a XTerm.js.[15]

Reference