Conn — skript pro pripojovani k ruznym serverum

script-iconSpravci systémů, „supporťáci“, mívají často na starosti více serverů. V mém případě se v současné chvíli pod mou správou nachází na asi 50 zákazníků po celém světě.  K zákazníkům vedou vetšinou různé SSH cesty, mají různé IP adresy a hesla. Přičemž se zákazníci mění, někteří přibývají, jiní odchází (ti nejsou problém) a další co chvíli mění hesla. Abych si ulehčil svou práci a urychlil připojování na servery k zákazníkům, vytvořil jsem skript, který toto řeší za mě. Rád bych vám představil skript conn. (Stáhnout)

Skript samotný je po správné konfiguraci schopen připojit uživatele z jeho vlastního počítače (Linuxový stroj) na koncový stroj u zákazníka. V našem prostředí to nejčastěji funguje pod timto flow:

Notebook engineera > Firemni step-stone server  > VPN do site zakaznika > Zakaznikuv step-stone server (UDF) > cílový server

Tento flow se mení jen výjimečně. Co jsou požadavky:

  1. skript musí být s to vytvorit SSH spojení z mého notebooku až na cílový server
  2. skript musí přitom automaticky vytvořit „cestou“ ssh tunel po libovolném portu
  3. jednoduché přidání nového zákazníka
  4. skript je napsán tak, že je jednoduchá distribuce v rámci teamu (v případě, že někdo přidá či upraví zákazníka, musí být tato změna jednoduše distribuovatelná a propagovatelná)
  5. skript musí být s to se „popasovat“ s různými typy systémů (HP-UX, Linux, OpenVMS,…) a promptů….
  6. protože jsem líný, tak pracuje i se bash-completition (BC). Přidání nového zákazníka musí být opět jednoduše propagovatelné i do BC funkce

Jak se skript používá

Použití je jednoduché:

conn CUSTOMER [PORT]

Kde CUSTOMER je jednoduše v mém případě jméno zákazníka, ale může to být vlastně jakékoli označení pro cílový server. O tom, jak přidat cílový server (zákazníka) také napíšu za  chvilku.

Parametr CUSTOMER je povinný, bez něj skript pouze vypíše nápovědu. Pokud je zákazník nadefinovaný, skript vás připojí na cílový server. Mimo uživateli vytvořené zákazníky je možné použít ještě parametry --update, --backup a --redeploy, které se použijí v případě aktualizace, zabalení a instalace skriptu.

Skript vždycky otevírá tunel na výchozím portu (nastavitelné v konfiguračním souboru). Pokud chcete otevřít tunel na portu jiném, je nutné přidat třetí parametr a to číslo portu PORT.

Jak skript nainstalovat

Instalaci jsem se pokusil maximálně zjednodušit. Přesto je treba dodržet 5 kroků:

Krok nula: nainstalujte si expect

  1. Stáhněte a uložte archiv conn.tar.gz do /tmp/conn.tar.gz . Bohužel tato cesta je nezbytná a napevno daná.
  2. skript conn , který se nachází v archivu, uložte na místo,  kde budete mít jako uživatel právo zápisu (pro pozdější jednoduchou aktualizaci) a kam povede i promená PATH.

    Může to byt např. ~/.bin/conn

  3. Vytvořte ~/.connrc soubor a vložte následující informace:
    #Location of expect scripts must be set here
    CONNPATH=~/.connscript
    #Default forwarded port is set here
    DEFPORT=12345
    #Bash completition file location with the filename itself
    COMPLETITION=~/.completition
    • CONNPATH ukazuje na adresář, ve kterém budou umístěné soubory s uživatelskými připojovacími skripty.
    • DEFPORT je výchozí číslo portu, který se bude tunelovat.
    • COMPLETITION doporučuji nechat a neměnit – ukazuje na soubor s informacemi pro BASH completition.
  4. Na konec souboru ~/.bashrc vložte řádek:
    source ~/.completition

    resp. hodnotu dané proměnné, kterou jste uvedli do connrc souboru.

  5. Přesvědčete se, že existuje soubor /tmp/conn.tar.gz a spusťte příkaz
    conn --redeploy

    Po kterém bude provedena instalace všech zbývajících souborů na své místo.

Jak přidat nového zákazníka (server)

Skript je navržen pro maximální jednoduchost. V adresáři, kam vede proměnná CONNPATH, vytvořte nový soubor, který se bude jmenovat dle příslušného cílového zákazníka/serveru. V tomto souboru bude minimálně následující:

#!/bin/expect
source conn-general
connect-general IPADDR UZIVATEL HESLO $port
interact

Jádrem skriptu je routina, kterou jsem nazval connect-general. První řádek říká, že se má vše provést pomocí programu expect. Druhý řádek načte všechny potřebné podfunkce a proměnné. A čtvrtý řádek předá řízení uživateli — vám. Důležitý je právě třetí řádek:

connect-general IPADDR UZIVATEL HESLO $port

Zde je nutné vložit IP adresu (či resolvovaný hostname) stroje, na který se chcete připojit, uživatelské jméno a heslo. Poslední položka musí zůstat nezmeněna. Takovýchto řádků může být pod sebou naskládáno tolik, kolik je potřeba, resp. kolik je nutné.

Poté, co soubor uložíte, spusťte

conn --update

čímž aktualizujete doplňovací skript v BASHi (nutné spustit novou session).

Pokročilé možnosti skriptu

Pro případy, kdy je nutné od uživatele získat (např) nějaký vstup nebo kdy bude mít stejný zákazník více serverů, je zde připravena možnost extra parametrů předávaných teprve volanému skriptu. Pokud do adresáře s expect skripty umístíte stejnojmenný soubor s příponou .sh, očekává se, že obsahuje bashovou funkci zvanou ZAKAZNIK-fnc (kde ZAKAZNIK je samozrejme opět jméno zákazníka tedy jméno souboru, který voláte). V této funkci je možné získat od uživatele podrobnější informaci a tu následně předat expect skriptu.

Vše si ukážeme na příkladě: Představme si, že náš cílový server u zákazníka ‚honza‚ není standalone, ale cluster, jehož nody se jmenují NODE1 a NODE2. Dále, aby to nebylo jednoduché, je na každý node jiný uživatel a jiné heslo. Je možné vytvořit dva soubory jménem ‚honza1‚ a ‚honza2‚. Druhá možnost ale představuje použít souboru honza.sh. V tomto skriptu se zeptáme, na který node se chceme připojit a dle toho předáme další informace do vlastního připojovacího skriptu.

Obsahem honza.sh musí být funkce honza-fnc(). Ta může vypadat například takto:

function honza-fnc() {
  read -p "What node: 1|2 > " NODE
  case $NODE in
    1) extra="172.27.60.208"; extra2=juzr; extra3=pasvord ;;
    2) extra="172.27.60.209"; extra2=franta; extra3=heslo123 ;;
    *) echo "Not a valid server, choose 1 or 2";exit 0;;
  esac
  ./honza $PORT "$extra" "$extra2" "$extra3"
}

Toto je jedna z podob funkce -fnc. Další může být s if-elif-else-fi a podobně. Důležité je posbírat potřebné informace, se kterými se spustí již skript honza. Je důležité, aby vždy byl spuštěn expect skript (tedy soubor bez .sh přípony) a hned druhý parametr byl parametr $PORT.

Vlastní obsah souboru honza by poté mohl být např.:

#!/bin/expect
source conn-general
connect-general $extra $extra2 $extra3 $port
interact

Jak vidno, vlastní expect skript se již mnoho nezmění. Jen je důležité pamatovat, že očekává parametry v pořadí:
$port $extra $extra2 $extra3.

Samozřejmě není nutné použít všechny 3 extra proměnné a mít tak např. jen různou IP adresu  a uživatele a heslo mít normálně v expect skriptu.

Jak na tu přenositelnost

Jak jsem zmínil na začátku, skript jsem napsal tak, aby změny byly lehce distribuovatelné v rámci teamu. K tomu slouží poslední, zatím nezmíněný parametr, --backup. Ten v adresáři /tmp vytvoří nový soubor conn.tar.gz, který je možné poté poslat mailem kolegům. Tento archiv neobsahuje .connrc soubor, takže nebudete šířit své vlastní nastavení. Kolegům potom stačí tento conn.tar.gz, který dostanou mailem, nahrát do /tmp a spustit conn --redeploy.

Další možností je uložení na NFS server sdílený se všemi kolegy z teamu, na kterém by mohl každý měnit soubory a skripty. U nás v práci toto řešení bohužel není možné, proto jsem zvolil tuto verzi.

Individuální účet na firemním step-stone serveru, sdílené na zákaznických serverech

Pro případ, že byste měli individuální účty na vašem step-stone serveru a sdílené účty dál i toto pořešit.

  1. Do .connrc souboru přidejte 2 řádky:
    export STEPSTONEUSER=username
    export STEPSTONEPASSWORD=password

    kde STEPSTONEUSER je váš login a STEPSTONEPASSWORD je vaše heslo.

  2. Pokud půjde vaše cesta pres firemní stepstone, připojte se k němu pomocí:
    connect-general $stepstoneuser $stepstonepassword $port

V případě, že vždy chodíte přes firemní step-stone, je možné výše zmíněný řádek odpoznámkovat (zrušit křížek) na konec souboru conn-general a všechny ostatní skripty začínat až z tohoto step-stone serveru.

Ihned po instalaci mate k dispozici ukázku conn honza.Tento samozřejmě po definování vlastních skriptů odstraňte, ať vás tam nezlobí.

V případě, že vám conn skript dělá potíže či si nejste jisti sestavením správné cesty, nebojte se ozvat do komentářů a pokusím se poradit.

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *