2.9 KiB
Sudo használata nem-interaktív környezetben (pl. n8n)
A probléma
Amikor egy automatizált folyamat (mint egy n8n workflow) SSH-n keresztül egy sudo-t igénylő parancsot próbál futtatni, a következő hibaüzenetet kaphatod:
sudo: a terminal is required to read the password
Ennek oka, hogy a sudo parancs alapértelmezetten jelszót kérne, de nincs interaktív terminál, ahol ezt be tudná kérni a felhasználótól.
Fontos: Az SSH kulcsos authentikáció (jelszó nélküli bejelentkezés) nem oldja meg ezt a problémát, mivel az a bejelentkezésre vonatkozik, míg a sudo a jogosultság emelésére a bejelentkezés után.
A legjobb megoldás: sudoers fájl konfigurálása
A legszabványosabb és legbiztonságosabb megoldás az, ha a sudoers fájlban beállítod, hogy egy adott felhasználó (pl. n8nuser) jelszó nélkül is futtathasson bizonyos parancsokat.
Lépések:
-
Jelentkezz be a szerverre egy
sudojoggal rendelkező felhasználóval. -
Nyisd meg a
sudoersfájlt szerkesztésre avisudoparanccsal. Ez a parancs ellenőrzi a szintaxist mentés előtt, megelőzve a hibákat.sudo visudo -
A megnyílt szerkesztőben menj a fájl aljára, és adj hozzá egy új sort a felhasználó nevével.
1. opció: A LEGJOBB és LEGbiztonságosabb módszer
Csak azokra a konkrét parancsokra adj jelszó nélküli (NOPASSWD) jogot, amikre az automatizálásnak valóban szüksége van.
Példa egy parancsra:
# A fájl aljára add hozzá ezt a sort, a 'n8nuser'-t cseréld a te felhasználódra:
n8nuser ALL=(ALL) NOPASSWD: /usr/bin/apt-get update
Példa több parancsra (vesszővel elválasztva):
# A 'n8nuser'-t és a parancsokat cseréld a tieidre:
n8nuser ALL=(ALL) NOPASSWD: /usr/bin/apt-get update, /usr/bin/apt-get upgrade -y
2. opció: Az EGYSZERŰBB, de kevésbé biztonságos módszer
Engedélyezd, hogy a felhasználó bármilyen parancsot futtathasson jelszó nélkül. Ezt csak akkor használd, ha teljesen megbízol a rendszerben és az automatizált folyamatokban.
# A fájl aljára add hozzá ezt a sort, a 'n8nuser'-t cseréld a te felhasználódra:
n8nuser ALL=(ALL) NOPASSWD: ALL
- Mentsd el és zárd be a fájlt.
- nano szerkesztő esetén:
Ctrl+X, majdY(vagyI), végülEnter. - vi szerkesztő esetén:
Esc, majd írd be:wqésEnter.
- nano szerkesztő esetén:
Ettől kezdve az adott felhasználó a megadott parancsokat jelszókérés nélkül futtathatja a nem-interaktív SSH session alatt is.
Amit NE csinálj
A hibaüzenet említi az -S opciót, ami lehetővé teszi a jelszó "bepipelolását" (echo "jelszavam" | sudo -S parancs). Ez egy rendkívül rossz biztonsági gyakorlat, mert a jelszavadat egyszerű szövegként kellene tárolnod egy scriptben vagy workflow-ban. Ezt mindenképpen kerüld el!