Archiv pro štítek: Expect

Přihlášení na SSH pomocí expectu

Nechci psát heslo dvakrát

Spravuji linuxové servery na kterých je zakázané přihlášení pomocí uživatele root. Přihlásit se na takového uživatele pro mne znamená:

  1. Přihlásit se pomocí SSH pomocí mého osobního účtu = 1x zadávám svoje heslo
  2. Po přihlášení napsat příkaz sudo -i a znovu zadat heslo = 1x zadávám svoje heslo

Musím tedy dvakrát po sobě zadávat stejné heslo. Proto jsem si udělal script v expectu, kterému sdělím svoje heslo pouze jednou. Script se následně pod mým loginem přihlásí na server a spustí příkaz sudo -i, kterému pošle heslo které jsem mu sdělil. V následujícím scriptu se heslo čte ze stdin, ale je možné ho načítat i ze souboru (nedoporučuji):

Vytvoření aliasu pro bash

Vytvořil jsem si taky jednoduchý bash alias proto abych do skriptu nemusel psát natvrdo svůj login. Tento wrapper vypadá následovně:

Wrapper je potřeba umístit do souboru .bash_aliases v home adresáři.

Jak se nyní přihlašovat

Nyní stačí zavolat příkaz ssh-login server.domena.tld, příkaz se zeptá jen jednou na heslo:

Po úspěšném přihlášení mi skript dovolí s root shellem interagovat.

Integrace expectu do HP Scripting Toolkitu

V práci občas používám HP Scripting Toolkit, dříve (SmartStart Scripting Toolkit). Narazil jsem na potřebu použít v něm expect. Jak ho tam dostat? Zjistil jsem, že STK je upravený SUSE Linux Enterprise Server 11 SP2:

SUSE Linux Enterprise Server 11 (x86_64)
VERSION = 11
PATCHLEVEL = 2

Takže stačí stáhnout potřebné balíčky a integrovat je do STK. Odkud je stáhnout? Využil jsem repozitáře pro openSUSE. K rozbalení balíčků do initrd používám rpm2cpio, místo něj by šlo pravděpodobě použít také tohle, ale nezkoušel jsem.

Hotovo.

HP ProCurve switch a expect

Nastavujete někdy switch pomocí seriového portu? Někdy se hodí nastavit switch automaticky. V linuxu je možné použít například program Minicom, který podporuje runscript. Přišlo mi to trošku neohrabané, tak jsem si napsal následující script v expectu:

Z bashe se zavolá script.exp ttyS1 (výše uvedený script) ten se připojí na port ttyS1 rychlostí 57600 a posílá <CR> po nastavenou dobu (proměná $loop). Pokud se scriptu v nastavené době povede připojit na switch tak ho nastaví, jinak se script ukončí a vypíše chybu a vrátí chybový kód.