Puncte:1

ISO personalizat cubic care execută scriptul shell la pornire

drapel ae

Încerc să personalizez un Ubuntu ISO cu Cubic pentru a rula câteva script-uri shell atunci când utilizatorul Live se conectează. Am urmat o grămadă de tutoriale cu o mulțime de instrucțiuni și, în cele din urmă, am făcut-o să funcționeze la un moment dat. Din păcate, nu reușesc să recreez configurația și, mai rău, am șters ISO anume crezând că nu voi avea nevoie de el. Până acum, mi-am mutat scripturile shell în directorul /etc/skel prin mediul chroot din Cubic și am modificat crontab adăugând o comandă @reboot. După aceea, l-am lăsat pe Cubic să-mi creeze ISO și l-am trimis pe un USB. L-am pornit, dar mi-am dat seama că scripturile nu fuseseră executate.Am verificat directorul de acasă (din moment ce acolo ar trebui să meargă conținutul /etc/skel) și toate scripturile mele au fost prezente. Cum pot face asta să funcționeze?

drapel us
Este necesar ca scriptul dvs. să ruleze ca root? Aveți nevoie de acest script pentru a rula la fiecare conectare? Acest script trebuie să ruleze numai pentru utilizatorul mediului live (adică „ubuntu”) sau ar trebui să ruleze și pentru alți utilizatori (adică dacă creați utilizatori noi în timp ce utilizați mediul live)? Este necesar ca acest script să ruleze și în sistemul *instalat* (adică după ce ați instalat sistemul de operare din ISO live)?
n00dles avatar
drapel ae
@PJSingh Ei bine, unele dintre scripturi implică montarea dispozitivelor atașate. Va trebui să fie root.Nu, scripturile trebuie rulate numai după prima conectare și numai pentru utilizatorul live. Deși, dacă este posibil, vă rugăm să explicați procesul de rulare pentru mai mulți utilizatori. Cat despre ultima intrebare, nu am intentia de a instala permanent, deci nu.
Puncte:1
drapel us

În loc de a folosi cron, puteți utiliza un script de pornire automată pentru a vă conecta la mașina de la distanță.

Ar trebui să configurați autentificarea bazată pe cheie pe mașina de la distanță, astfel încât să nu fie necesară nicio interacțiune a utilizatorului.

În instrucțiunile de mai jos, înlocuiți următoarele valori după cum este necesar.

  • LOCAL - adresa IP sau numele de gazdă al computerului dvs. local (unde rulați Cubic)
  • LA DISTANTA - adresa IP sau numele de gazdă al computerului la distanță
  • n00dles - numele de utilizator pe computerul local și/sau pe computerul de la distanță
  • REMOTE_LOCATION_PATH - calea directorului pe care doriți să-l montați pe computerul de la distanță
  1. Generați chei publice și private pentru mașina dvs. locală.

    Aceste taste vor fi folosite în ISO personalizat. Fiți conștienți de implicațiile de securitate. Oricine obține un dispozitiv USB personalizat se va putea conecta la mașina dvs. de la distanță.

    Executați următoarele comenzi pe mașina dvs. locală (de exemplu, nu în Cubic).

    cd ~
    ssh-keygen -t rsa
    

    Acceptați setările implicite. Ieșirea va arăta cam așa.

    Se generează perechea de chei rsa publică/privată.
    Introduceți fișierul în care să salvați cheia (/home/n00dles/.ssh/id_rsa): 
    Introduceți expresia de acces (gol fără expresie de acces):
    Introduceți din nou aceeași expresie de acces:
    Identificarea dvs. a fost salvată în /home/n00dles/.ssh/id_rsa
    Cheia dvs. publică a fost salvată în /home/n00dles/.ssh/id_rsa.pub
    Amprenta cheie este:
    SHA256:G48dcTOXpUhzWxuzwn8pgdOTP9WmlLtXBCJkkiSEywk n00dles@LOCAL
    Imaginea aleatorie a cheii este:
    +---[RSA 3072]----+
    | xxxxxx x xxx|
    | x x xxxxxxxxxx|
    | x x xxxxxxx|
    | x xxxxxx|
    | x x x xxxx|
    | x x xxx|
    | x x x x x|
    | x |
    | x |
    +----[SHA256]-----+
    
  2. Configurați autentificarea de la distanță.

    Copiați cheia publică pe mașina de la distanță. Fiți conștienți de implicațiile de securitate. Acest lucru va permite conexiuni la distanță de pe orice computer folosind cheia privată corespunzătoare.

    ssh-copy-id -i .ssh/id_rsa.pub utilizator@gazdă
    

    Creaza un nou gazde_cunoscute fișier pe care îl veți copia în ISO personalizat. Acest lucru va permite mediului Live să se conecteze la mașina de la distanță fără a solicita utilizatorului să confirme.

    Faceți backup temporar pentru curentul dvs gazde_cunoscute fişier. Amintiți-vă să înlocuiți n00dles@REMOTE și REMOTE_LOCATION_PATH după cum este necesar.

    mv ~/.ssh/known_hosts ~/.ssh/known_hosts.original
    
    # Conectați-vă la mașina de la distanță pentru a crea automat un nou fișier `known_hosts`.
    sudo mkdir /mnt/remote
    sshfs [email protected]:/REMOTE_LOCATION_PATH/ /mnt/remote/
    
    Amprenta cheii ECDSA este SHA256:XXXX.
    Sigur doriți să continuați conectarea (da/nu/[amprenta])? da
    
    # Demontați mașina de la distanță.
    fusermount -u /mnt/remote
    sudo rmdir /mnt/remote
    
    # Salvați noul fișier known_hosts.
    mv ~/.ssh/known_hosts ~/
    
    # Reveniți fișierul original known_hosts.
    mv ~/.ssh/known_hosts.original ~/.ssh/known_hosts
    
  3. Personalizați ISO folosind Cubic.

    Lansați Cubic și faceți următoarele pe pagina Terminal.

    A te asigura sshfs este instalat astfel încât să ne putem conecta la mașini la distanță.

    apt install sshfs
    

    Copiați cheile și cele noi gazde_cunoscute fișier la sistemul de operare personalizat.

    cd /etc/skel
    mkdir .ssh
    chmod u=rwx,g=,o= .ssh
    cd .ssh
    

    Deschideți un browser de fișiere, cum ar fi Nautilus și navigați la local ~/.ssh director.

    Selectați id_rsa și id_rsa.pub și trageți-le în fereastra Cubic pentru a le copia în directorul curent, /etc/skel.ssh.

    Deschideți un browser de fișiere, cum ar fi Nautilus și navigați la directorul dvs. de acasă.

    Selectați noul gazde_cunoscute fișier și trageți-l în fereastra Cubic pentru a-l copia în directorul curent, /etc/skel/.ssh.

    Asigurați-vă că permisiunile sunt setate corect pentru aceste fișiere; este foarte important. În Cubic, executați următoarele:

    chmod u=rw,g=,o= id_rsa
    chmod u=rw,g=r,o=r id_rsa.pub
    chmod u=rw,g=r,o=r cunoscute_gazde
    
    ls -la
    
    -rw------- 1 rădăcină rădăcină 2602 7 iunie 09:35 id_rsa
    -rw-r--r-- 1 rădăcină rădăcină 566 7 iunie 09:35 id_rsa.pub
    -rw-r--r-- 1 root root 222 7 iunie 09:35 know_hosts
    

    Creați un punct de montare pentru locația de la distanță, asigurați-vă că poate fi folosit de toți utilizatorii și adăugați un link numit la distanta în directorul principal al fiecărui utilizator.

    mkdir /mnt/remote
    chmod a+rw /mnt/remote
    ln -s /mnt/remote /etc/skel/Remote
    
  4. Creați un script pentru a monta locația de la distanță.

    nano /opt/mount_remote.sh
    

    Adăugați următoarele la script. Amintiți-vă să înlocuiți n00dles@REMOTE și REMOTE_LOCATION_PATH după cum este necesar.

    #!/bin/bash
    # Montează locația de la distanță.
    # Pentru a monta, utilizați: sshfs [email protected]:/REMOTE_LOCATION_PATH/ /mnt/remote
    # Pentru a demonta, utilizați: fusermount -u /mnt/remote
    pentru i în {1..5}; do
        if mountpoint /mnt/remote; atunci
            echo „[email protected]:/REMOTE_LOCATION_PATH este montat.”
            pauză
        altfel
            # Încercați să montați locația la distanță pe /mnt/remote
            echo "Încercați # $i să montați [email protected]:/REMOTE_LOCATION_PATH."
            dormi $i
            sshfs [email protected]:/REMOTE_LOCATION_PATH/ /mnt/remote
        fi
    Terminat
    if mountpoint /mnt/remote; atunci
        echo „Montat cu succes [email protected]:/REMOTE_LOCATION_PATH.”
    altfel
        echo „Nu se poate monta [email protected]:/REMOTE_LOCATION_PATH.”
    fi
    

    Tip CTRLX, Y, introduce pentru a salva fișierul.

    Puteți utiliza variabile de mediu, cum ar fi $HOME în scenariu, dacă trebuie.

    Faceți scriptul executabil.

    chmod +x /opt/mount_remote.sh
    
  5. Creați un fișier de pornire automată care va rula pentru fiecare utilizator după autentificare.

    nano ~/mount_remote.desktop
    

    Pentru XUbuntu 20.04+ sau versiuni mai vechi de Ubuntu, adăugați următoarele la fișier.

    [Intrare pe desktop]
    Codificare=UTF-8
    Versiunea=0.9.4
    Tip=Aplicație
    Nume=mount_remote
    Comentariu=Montați locația la distanță
    Exec=/opt/mount_remote.sh
    OnlyShowIn=XFCE;
    RunHook=0
    StartupNotify=fals
    Terminal=fals
    Ascuns=fals
    

    Pentru Ubuntu 20.04+, adăugați următoarele la fișier.

    [Intrare pe desktop]
    Tip=Aplicație
    Exec=/opt/mount_remote.sh
    Ascuns=fals
    NoDisplay=fals
    X-GNOME-Autostart-enabled=adevărat
    Nume[en_US]=Montați telecomanda
    Nume = Mount Remote
    Comment[en_US]=Montați locația la distanță
    Comentariu=Montați locația la distanță
    

    Tip CTRLX, Y, introduce pentru a salva fișierul.

    Poti sa adaugi Terminal=adevarat la *.desktop fișier în scopuri de depanare, dar locația la distanță va fi imediat demontată odată ce fereastra terminalului se închide automat.

  6. Mutați fișierul de pornire automată în locația corectă. Aveți două opțiuni.

    • Dacă doriți să utilizați un fișier autostart global, mutați-l în /etc/xdg/autostart.

      mv ~/mount_remote.desktop /etc/xdg/autostart
      
    • Dacă doriți ca fiecare utilizator să aibă propria copie a fișierului de pornire automată, mutați-l în /etc/skel/.config/autostart. (Utilizatorii vor putea șterge acest fișier, deoarece va fi plasat în folderul lor principal).

      mkdir -p /etc/skel/.config/autostart
      mv ~/mount_remote.desktop /etc/skel/.config/autostart
      
  7. Continuați să vă personalizați sistemul de operare și să generați un nou ISO.

  8. Testare

    Dacă utilizați numele gazdei de la distanță în loc de adresa IP, atunci când testați ISO generat, asigurați-vă că rezoluția DNS funcționează. În VirtualBox, de obicei, setez rețeaua să folosească „Adaptor Bridge” în loc de adaptorul „NAT” implicit.

drapel us
În răspunsul de mai sus, presupun că ai nevoie doar de scriptul tău pentru a rula ca root pentru a monta locația de la distanță. Deoarece acest lucru se poate face fără root, scriptul din acest răspuns nu rulează cu privilegii root.
n00dles avatar
drapel ae
Bună @PJSingh, mulțumesc pentru răspunsul detaliat. Am vrut să testez dacă rularea automată funcționează mai întâi înainte de a încurca cu montarea. Deoarece nu există nicio modalitate de a verifica dacă scripturile au fost chiar apelate, am creat un script de testare în /opt ca /opt/test.sh. Conținutul a fost shebang la prima linie și o comandă tactilă pentru a crea un fișier „it_worked.txt” în directorul principal. Și apoi, am făcut chmod-ul și am creat fișierul de pornire automată. Ideea a fost că, dacă scriptul este apelat după ce utilizatorul live se conectează, aș vedea „it_worked.txt” în directorul meu de acasă. Problema este că nu am făcut-o. Ce ar putea fi în neregulă?
drapel us
Ați creat un fișier `/etc/skel/.config/autostart/mount_remote.desktop` corespunzător? Dacă testați prin crearea unui ISO personalizat folosind cubic, fișierul `*.desktop` ar trebui să fie în `/etc/skel/.config/autostart`. Dacă testați pe sistemul dvs. local, fișierul ar trebui să fie plasat în `~/.config/autostart` și puteți testa prin deconectare și din nou. De asemenea, aș sugera să utilizați căi complete, nu căi relative, în `test .sh` (deci ceva de genul `touch /home/ubuntu/it_worked.txt`).
n00dles avatar
drapel ae
Am urmat punctul 5 din răspunsul tău la scrisoare. Fișierul .desktop se află în directorul /etc/skel/.config/autostart.Deoarece a fost în scopuri de testare, am rulat mai multe comenzi tactile doar pentru a fi sigur. Iată conținutul „test.sh”. Liniile au fost separate prin „ ### ” --> #!/bin/bash ### sleep 2 ### sudo touch „/etc/skel/it_worked_1.txt” ### sudo touch „$HOME/it_worked_2. TXT". Niciunul dintre fișiere nu a fost creat după pornire. Am rulat scriptul manual și a funcționat. Așa că greșesc ceva în rularea automată.
drapel us
Nu știu dacă scriptul va avea acces la `$HOME`. Scriptul dumneavoastră nu va avea permisiuni de scriere pentru `/etc/skel/`; de aceea am făcut ca `/mnt/remote` să poată fi scris în pasul 3. În fișierul dvs. `*.desktop`, setați `Terminal=true`. Adăugați `sleep 10` ca ultima linie a scriptului. În acest fel, veți vedea un pop-up de terminal când rulează scriptul și veți avea la dispoziție 10 secunde pentru a citi rezultatul înainte ca terminalul să se închidă automat, astfel încât să puteți depana. Utilizarea poate folosi comenzi echo pentru a imprima rezultatul pe măsură ce rulează scriptul. De exemplu, puteți face `echo $HOME`.
n00dles avatar
drapel ae
Am schimbat Terminalul în true și am schimbat scriptul pentru a crea „it_worked.txt” la /mnt/test. Nu a mers. Și o fereastră de terminal nu a apărut timp de 10 secunde după pornire. Care ar putea fi problema?
drapel us
Văd problema. Formatul fișierului de pornire automată s-a schimbat. Utilizați noul aspect „Pentru Ubuntu 20.04+” prezentat la pasul 5. De asemenea, vă sugerez să plasați fișierul autostart în `/etc/xdg/autostart`, așa cum se arată în pasul 6.
drapel us
Apropo, am testat, iar variabila de mediu `$HOME` este disponibilă pentru script când se execută.
n00dles avatar
drapel ae
Bună, @PJSingh, a făcut acele modificări a făcut truc! Totul funcționează conform intenției, vă mulțumesc pentru tot ajutorul acordat. Mai aveam o întrebare cubică. Având în vedere cum știți cum să vă ocoliți, ați putea să aruncați o privire?https://askubuntu.com/q/1344916/1287755

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.