Files
WPanda/GEMINI_user_sudo.md
2025-12-16 14:51:17 +01:00

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:

  1. Jelentkezz be a szerverre egy sudo joggal rendelkező felhasználóval.

  2. Nyisd meg a sudoers fájlt szerkesztésre a visudo paranccsal. Ez a parancs ellenőrzi a szintaxist mentés előtt, megelőzve a hibákat.

    sudo visudo
    
  3. 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

  1. Mentsd el és zárd be a fájlt.
    • nano szerkesztő esetén: Ctrl+X, majd Y (vagy I), végül Enter.
    • vi szerkesztő esetén: Esc, majd írd be :wq és Enter.

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!