ControlMaster – egy hasznos SSH trükk “powerusereknek”

Az alábbi okosság a következő esetekben jöhet jól:

  • Valami miatt több SSH kapcsolatot szeretnénk nyitni egy hosztra egyszerre (akár mert több dolgot csinálnánk a gépen mi magunk párhuzamosan, akár mert valami automatizált folyamatnak/szkriptnek kell indítgatnia több lekérdezést a másik hoszton SSH-n pl.).
  • Nagy a hálózati késleltetés a gépünk és a cél hoszt közt.
  • Legfőképp pedig, ha az előző kettő eset egyszerre áll fenn.

Van egy “session multiplexing” működési módja az SSH kapcsolódásnak (feltéve, ha a használt kliens ezt a funkciót támogatja, erről bővebb infó egy mátrixban itt – én most itt az OpenSSH-val való használatot írom le), hogy az első SSH kapcsolat létrejötte után, a kliens létrehoz egy “Unix socket leíró” fájlt, kinevezi a kapcsolatot “master”-nek, és innentől fogva bármely további SSH kapcsolat nyitás esetén nem fog új, külön TCP kapcsolatot nyitni a kliens mindegy egyes új SSH kapcsolatnak, hanem a socketet használva a master kapcsolaton keresztül fog menni az összes SSH kapcsolat adatfolyama az adott hosztra. Ez a gyakorlatban azt jelenti, hogy az első kapcsolat létrejötte után, a többi már nem kíván sem új TCP kapcsolat felépítést, sem autentikációt.

A dolog beállítása úgy megy, hogy létrehozunk (ha még nem lenne) egy ~/.ssh/config fájlt és beleírjuk ezt a pár sort:



Host *
ControlMaster auto
ControlPersist yes
ControlPath ~/.ssh/cm_socket/%r@%h:%p

Az első sorral létrehozunk egy “hoszt sztanzát” (definiálunk egy hosztot, vagy többet, amire az utána lévő beállítások vonatkozni fognak), esetünkben minden hosztra vonatkoztatjuk a beállítást. Második sorban bekapcsoljuk a ControlMaster funkciót, amiről a bejegyzés szól. Ennek értéke lehet még autoask, melynek esetén a kapcsolat nyitáskor a kliens megkérdezni, hogy szeretnénk-e használni a már élő, master kapcsolatot, illetve no, amivel értelemszerűen kikapcsoljuk. A harmadik sorban a ControlPersist bekapcsolásával azt állítjuk be, hogy ha a mindenkori master kapcsolat megszakad, és még van egy, vagy több másik SSH munkafolyamat, akkor valamelyik automatikusan átvegye a master szerepét. Ugyanezzel az opcióval lehetőség van megadni “IdleTimeout” időt is, másodpercben. Ez esetben nem marad életben a master “örökre”, ha nincs rajta forgalom, csak míg a megadott idő le nem jár. Negyedik sorban a ControlPath-szal kell megadni, hogy a kliens hol hozza létre a multiplexinghez szükséges “Unix socket leíró” fájlt. (Ennek az útvonala, ha nem létezik, hozzuk létre kézzel.) És ennyi.

Ha olyan egyedi eset áll fenn, mikor mégsem szeretnénk használni a ControlMastert, a “-S none”, vagy a “-o ControlMaster=no” kapcsolóval ki lehet kapcsolni az aktuális kapcsolódásnál.

Vannak azonban esetek, amikor egyáltalán nem javasolt a használat:

  • Túl nagy adatmennyiség mozgatásakor (pl. 20-30 konkurrens rsync-es másolás), lévén egyetlen csövön szeretnénk túl sok mindent átnyomni.
  • Tunneling esetén. Szintén beállíthatjuk a config fájlban, hogy az ilyen kapcsolatoknál ne használja a multiplexinget:


[tunnels]
ssh = ssh -o ControlMaster=no
If you enjoyed this post, please consider leaving a comment or subscribing to the RSS feed to have future articles delivered to your feed reader.
This entry was posted in Egyéb and tagged . Bookmark the permalink. Post a comment or leave a trackback: Trackback URL.

Post a Comment

Your email is never published nor shared. Required fields are marked *

*
*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>