távoli parancsfuttatás linuxon

Adott a szitu, hogy több gépes szerverkörnyezetben szeretnénk egy gépről vezérelni a dolgokat, esetleg egy scripttel szeretnénk minden gépen minden komponenst elindítani/leállítani. Lehetne Java-san ügyeskedni, de minek túlbonyolítani a dolgot, a következő workflow működik (linuxon):

  1. Legyen ssh hozzáférés minden gépre (meglepő, mi ?!?)

  2. Generáljunk ssh kulcsot, és másoljuk szét a publikus párt a slave-ekre (nyomjuk bele az authorized_keys fájlba), a masteren (amin a távirányítószkript fog futni) meg legyen meg a privát.

  3. Ha sudo-zni kéne egy command futtatásához, akkor a sudoers fájlban / visudo-val kapcsoltathatjuk ki rá a password kérést

  4. Figyeljünk, hogy a sudoers fájlban ne legyen benne a távoli sudozás letiltása.

  5. Távoli parancsfuttatás:

    ssh user@hostname 'cmd'
    ssh user@hostname 'sudo cmd'



Mindegyik ponthoz rengeteg leírás áll rendelkezésre, ezért csak négy apró megjegyzés:

  • baromira figyeljünk a kulcsok, a .ssh könyvtár és az authorized_keys fájl jogosultságára; ha túl megengedő, akkor nem fog működni. Debugolásban segít az ssh '-v' kapcsolója.

  • sudoers fájlt sose szerkesszük közvetlenül, a visudo levalidálja mentés előtt, ezért használjuk inkább azt

  • Ha nem akarunk vi-jal szívni a visudo használatakor:

    export EDITOR=nano


  • A következő sor a sudoers fájlban éri el azt, hogy "ssh user@hostname 'sudo cmd'" parancs nem lesz engedélyezve, tehát a távoli parancsfuttatás.

    Defaults requiretty

    Ezt kikommentezve vagy kitörölve hívhatunk sudo-t távolról.

Adott a szitu, hogy pl. ffmpeg-et újrafordítás nélkül átvigyem egyik gépről a másikra (linuxosról linuxosra, és most épp Red Hat-esről Red Hat-esre). A binárist simán átkopizom, a gond csak az, hogy ha shared libraryt / shared object-et is használ, akkor azt nem fogja megtalálni, valami hasonló hibaüzenetet ad futtatáskor:

ffmpeg: error while loading shared libraries: libmp3lame.so: cannot open shared object file, or some other library.

Az üzenet egyértelmű, rá is találunk az eredeti gépen a /usr/local/lib alatt, hát fogjuk és áthozzuk ezeket is. De ennyitől még a hibaüzenet megmarad. Ugyanis a következő konfigurációra is szükség van az /etc/ld.so.conf fájlban:

jbuzi@gep:~$ cat /etc/ld.so.conf
include ld.so.conf.d/*.conf
/usr/local/lib

Plusz, le kell futtatni az "ldconfig" parancsot is, hogy újrahúzza a configba beírt könyvtár/könyvtárak tartalmát.
Ezután már tudja a rendszerünk, hogy miket kell memóriába tölteni program indításkor.
top