Score:1

ISO แบบกำหนดเองแบบลูกบาศก์ซึ่งเรียกใช้เชลล์สคริปต์เมื่อเริ่มต้น

ธง ae

ฉันกำลังพยายามปรับแต่ง Ubuntu ISO ด้วย Cubic เพื่อเรียกใช้เชลล์สคริปต์สองสามตัวเมื่อผู้ใช้ Live เข้าสู่ระบบ ฉันทำตามบทช่วยสอนมากมายพร้อมคำแนะนำมากมาย และในที่สุดฉันก็ใช้งานได้จนถึงจุดหนึ่ง ขออภัย ฉันไม่สามารถสร้างการตั้งค่าใหม่ได้ และที่แย่กว่านั้น ฉันได้ลบ ISO เฉพาะออกไปโดยคิดว่าไม่ต้องการใช้ จนถึงตอนนี้ ฉันได้ย้ายเชลล์สคริปต์ไปยังไดเร็กทอรี /etc/skel ผ่านสภาพแวดล้อม chroot ใน Cubic และแก้ไข crontab โดยเพิ่มคำสั่ง @reboot หลังจากนั้น ฉันปล่อยให้ Cubic สร้าง ISO ของฉัน และแฟลชไปยัง USB ฉันบูทมันขึ้นมา แต่รู้ว่าสคริปต์ไม่ได้ถูกเรียกใช้งานฉันตรวจสอบโฮมไดเร็กทอรี (เนื่องจากเป็นตำแหน่งที่เนื้อหาของ /etc/skel ควรไป) และสคริปต์ทั้งหมดของฉันมีอยู่ ฉันจะทำงานนี้ได้อย่างไร

us flag
สคริปต์ของคุณจำเป็นต้องรันในฐานะรูทหรือไม่? คุณต้องการสคริปต์นี้เพื่อเรียกใช้เมื่อเข้าสู่ระบบแต่ละครั้งหรือไม่ สคริปต์นี้จำเป็นต้องเรียกใช้เฉพาะสำหรับผู้ใช้ในสภาพแวดล้อมจริง (เช่น "ubuntu") หรือควรเรียกใช้สำหรับผู้ใช้รายอื่นด้วย (เช่น หากคุณสร้างผู้ใช้ใหม่ในขณะที่ใช้งานสภาพแวดล้อมจริง) สคริปต์นี้จำเป็นต้องทำงานในระบบ *ติดตั้ง* ด้วยหรือไม่ (เช่น หลังจากที่คุณติดตั้งระบบปฏิบัติการจาก ISO ที่ใช้งานจริง)
n00dles avatar
ae flag
@PJSingh สคริปต์บางตัวเกี่ยวข้องกับการติดตั้งอุปกรณ์ที่ต่อพ่วง มันจะต้องรูทไม่ สคริปต์จำเป็นต้องทำงานหลังจากการเข้าสู่ระบบครั้งแรกเท่านั้น และสำหรับผู้ใช้จริงเท่านั้น แม้ว่า ถ้าเป็นไปได้ โปรดอธิบายขั้นตอนการเรียกใช้งานสำหรับผู้ใช้หลายคน สำหรับคำถามสุดท้าย ฉันไม่มีเจตนาที่จะติดตั้งอย่างถาวร ดังนั้นไม่
Score:1
ธง us

แทนที่จะใช้ ลำดับคุณสามารถใช้สคริปต์เริ่มต้นอัตโนมัติเพื่อเชื่อมต่อกับเครื่องระยะไกล

คุณควรตั้งค่าการยืนยันตัวตนด้วยคีย์ให้กับเครื่องทางไกล ดังนั้นผู้ใช้จึงไม่จำเป็นต้องดำเนินการใดๆ

ในคำแนะนำด้านล่าง ให้แทนที่ค่าต่อไปนี้ตามต้องการ

  • ท้องถิ่น - ที่อยู่ IP หรือชื่อโฮสต์ของคอมพิวเตอร์ในพื้นที่ของคุณ (ที่คุณใช้งาน Cubic)
  • ระยะไกล - ที่อยู่ IP หรือชื่อโฮสต์ของคอมพิวเตอร์ระยะไกล
  • n00เดิล - ชื่อผู้ใช้บนคอมพิวเตอร์ในระบบและ/หรือคอมพิวเตอร์ระยะไกล
  • REMOTE_LOCATION_PATH - เส้นทางของไดเร็กทอรีที่คุณต้องการติดตั้งบนคอมพิวเตอร์ระยะไกล
  1. สร้างคีย์สาธารณะและส่วนตัวสำหรับเครื่องของคุณ

    คีย์เหล่านี้จะใช้ใน ISO ที่คุณกำหนดเอง ระวังผลกระทบด้านความปลอดภัย ใครก็ตามที่ได้รับ USB แบบกำหนดเองของคุณจะสามารถลงชื่อเข้าใช้เครื่องระยะไกลของคุณได้

    ดำเนินการคำสั่งต่อไปนี้บนเครื่องของคุณ (เช่น ไม่ได้อยู่ใน Cubic)

    ซีดี ~
    ssh-keygen -t อาร์เอสเอ
    

    ยอมรับค่าเริ่มต้น ผลลัพธ์จะมีลักษณะดังนี้

    กำลังสร้างคู่คีย์ rsa สาธารณะ/ส่วนตัว
    ป้อนไฟล์ที่จะบันทึกคีย์ (/home/n00dles/.ssh/id_rsa): 
    ป้อนข้อความรหัสผ่าน (ว่างสำหรับไม่มีข้อความรหัสผ่าน):
    ป้อนข้อความรหัสผ่านเดิมอีกครั้ง:
    ข้อมูลประจำตัวของคุณได้รับการบันทึกไว้ใน /home/n00dles/.ssh/id_rsa
    รหัสสาธารณะของคุณได้รับการบันทึกไว้ใน /home/n00dles/.ssh/id_rsa.pub
    ลายนิ้วมือที่สำคัญคือ:
    SHA256:G48dcTOXpUhzWxuzwn8pgdOTP9WmlLtXBCJkkiSEywk n00dles@LOCAL
    ภาพสุ่มของคีย์คือ:
    +---[อาร์เอสเอ 3072]----+
    | xxxxxx x xxx|
    | x x xxxxxxxxxxxx|
    | x x xxxxxxx|
    | x xxxxxx|
    | x x x xxxx|
    | x x xxx|
    | x x x x x|
    | x |
    | x |
    +----[SHA256]-----+
    
  2. ตั้งค่าการเข้าสู่ระบบระยะไกล

    คัดลอกรหัสสาธารณะไปยังเครื่องระยะไกล ระวังผลกระทบด้านความปลอดภัย ซึ่งจะอนุญาตให้มีการเชื่อมต่อระยะไกลจากคอมพิวเตอร์เครื่องใดก็ได้โดยใช้คีย์ส่วนตัวที่เกี่ยวข้อง

    ssh-copy-id -i .ssh/id_rsa.pub user@host
    

    สร้างใหม่ known_hosts ไฟล์ที่คุณจะคัดลอกไปยัง ISO ที่กำหนดเอง สิ่งนี้จะทำให้สภาพแวดล้อม Live สามารถเชื่อมต่อกับเครื่องระยะไกลโดยไม่ต้องแจ้งให้ผู้ใช้ยืนยัน

    สำรองข้อมูลปัจจุบันของคุณชั่วคราว known_hosts ไฟล์. อย่าลืมเปลี่ยน n00dles@REMOTE และ REMOTE_LOCATION_PATH เท่าที่จำเป็น

    mv ~/.ssh/known_hosts ~/.ssh/known_hosts.original
    
    # ลงชื่อเข้าใช้เครื่องระยะไกลเพื่อสร้างไฟล์ `known_hosts` ใหม่โดยอัตโนมัติ
    sudo mkdir /mnt/remote
    sshfs [email protected]:/REMOTE_LOCATION_PATH/ /mnt/remote/
    
    ลายนิ้วมือของคีย์ ECDSA คือ SHA256:XXXX
    คุณแน่ใจหรือไม่ว่าต้องการเชื่อมต่อต่อ (ใช่/ไม่ใช่/[ลายนิ้วมือ]) ใช่
    
    # ยกเลิกการต่อเชื่อมเครื่องระยะไกล
    fusermount -u /mnt/remote
    sudo rmdir /mnt/remote
    
    # บันทึกไฟล์known_hosts ใหม่
    mv ~/.ssh/known_hosts ~/
    
    # ย้อนกลับไฟล์known_hosts ดั้งเดิม
    mv ~/.ssh/known_hosts.original ~/.ssh/known_hosts
    
  3. ปรับแต่ง ISO โดยใช้ Cubic

    เปิด Cubic และทำสิ่งต่อไปนี้ในหน้า Terminal

    ตรวจสอบให้แน่ใจ sshfs ถูกติดตั้งเพื่อให้เราสามารถเชื่อมต่อกับเครื่องระยะไกลได้

    ฉลาดติดตั้ง sshfs
    

    คัดลอกคีย์และใหม่ known_hosts ไฟล์ไปยังระบบปฏิบัติการที่กำหนดเอง

    ซีดี / etc / skel
    mkdir .ssh
    chmod u=rwx,g=,o= .ssh
    ซีดี .ssh
    

    เปิดไฟล์เบราว์เซอร์เช่น Nautilus และนำทางไปยังเครื่องของคุณ ~/.ssh ไดเรกทอรี

    เลือก id_rsa และ id_rsa.pub แล้วลากไปยังหน้าต่าง Cubic เพื่อคัดลอกไปยังไดเร็กทอรีปัจจุบัน /etc/skel.ssh.

    เปิดไฟล์เบราว์เซอร์เช่น Nautilus และไปที่โฮมไดเร็กตอรี่ของคุณ

    เลือกใหม่ known_hosts ไฟล์แล้วลากไปยังหน้าต่าง Cubic เพื่อคัดลอกไปยังไดเร็กทอรีปัจจุบัน /etc/skel/.ssh.

    ตรวจสอบให้แน่ใจว่าตั้งค่าการอนุญาตอย่างถูกต้องสำหรับไฟล์เหล่านี้ สิ่งนี้สำคัญมาก ใน Cubic ให้ดำเนินการต่อไปนี้:

    chmod u=rw,g=,o= id_rsa
    chmod u=rw,g=r,o=r id_rsa.pub
    chmod u=rw,g=r,o=rknown_hosts
    
    ls -la
    
    -rw------- 1 รูทรูท 2602 7 มิ.ย. 09:35 id_rsa
    -rw-r--r-- 1 รูทรูท 566 7 มิ.ย. 09:35 น. id_rsa.pub
    -rw-r--r-- 1 รูทรูท 222 มิ.ย. 7 09:35known_hosts
    

    สร้างจุดเชื่อมต่อสำหรับตำแหน่งระยะไกล ตรวจสอบให้แน่ใจว่าผู้ใช้ทั้งหมดสามารถใช้งานได้ และเพิ่มชื่อลิงก์ ระยะไกล ในโฮมไดเร็กทอรีของผู้ใช้แต่ละคน

    mkdir /mnt/รีโมท
    chmod a+rw /mnt/remote
    ln -s /mnt/remote /etc/skel/รีโมท
    
  4. สร้างสคริปต์เพื่อเมานต์ตำแหน่งระยะไกล

    นาโน /opt/mount_remote.sh
    

    เพิ่มสิ่งต่อไปนี้ในสคริปต์ อย่าลืมเปลี่ยน n00dles@REMOTE และ REMOTE_LOCATION_PATH เท่าที่จำเป็น

    #!/bin/bash
    # ติดตั้งตำแหน่งระยะไกล
    # หากต้องการเมาต์ให้ใช้: sshfs [email protected]:/REMOTE_LOCATION_PATH/ /mnt/remote
    # หากต้องการยกเลิกการต่อเชื่อมใช้: fusermount -u /mnt/remote
    สำหรับฉันใน {1..5}; ทำ
        ถ้า mountpoint /mnt/remote; แล้ว
            echo "[email protected]:/REMOTE_LOCATION_PATH ติดตั้งอยู่"
            หยุดพัก
        อื่น
            # พยายามเมานต์ตำแหน่งระยะไกลเป็น /mnt/remote
            echo "พยายาม # $i เพื่อเมานต์ [email protected]:/REMOTE_LOCATION_PATH"
            นอน $i
            sshfs [email protected]:/REMOTE_LOCATION_PATH/ /mnt/remote
        ไฟ
    เสร็จแล้ว
    ถ้า mountpoint /mnt/remote; แล้ว
        echo "ติดตั้ง [email protected]:/REMOTE_LOCATION_PATH สำเร็จแล้ว"
    อื่น
        echo "ไม่สามารถเมานต์ [email protected]:/REMOTE_LOCATION_PATH"
    ไฟ
    

    พิมพ์ CTRLเอ็กซ์, วาย, เข้า เพื่อบันทึกไฟล์

    คุณสามารถใช้ตัวแปรสภาพแวดล้อมเช่น $บ้าน ในสคริปต์ หากคุณต้องการ

    ทำให้สคริปต์ทำงานได้

    chmod +x /opt/mount_remote.sh
    
  5. สร้างไฟล์เริ่มต้นอัตโนมัติที่จะเรียกใช้สำหรับผู้ใช้แต่ละคนหลังจากเข้าสู่ระบบ

    นาโน ~/mount_remote.desktop
    

    สำหรับ XUbuntu 20.04+ หรือเวอร์ชันเก่ากว่าของ Ubuntu ให้เพิ่มสิ่งต่อไปนี้ในไฟล์

    [รายการเดสก์ท็อป]
    การเข้ารหัส=UTF-8
    เวอร์ชัน=0.9.4
    Type=ใบสมัคร
    ชื่อ = mount_remote
    ความคิดเห็น = เมานต์ตำแหน่งระยะไกล
    Exec=/opt/mount_remote.sh
    OnlyShowIn = XFCE;
    รันฮุค=0
    StartupNotify=เท็จ
    เทอร์มินัล = เท็จ
    ซ่อน = เท็จ
    

    สำหรับ Ubuntu 20.04+ ให้เพิ่มสิ่งต่อไปนี้ในไฟล์

    [รายการเดสก์ท็อป]
    Type=ใบสมัคร
    Exec=/opt/mount_remote.sh
    ซ่อน = เท็จ
    NoDisplay=เท็จ
    X-GNOME-เปิดใช้การเริ่มอัตโนมัติ=จริง
    Name[en_US]=เมานต์รีโมต
    ชื่อ = Mount Remote
    Comment[en_US]=เมานต์ตำแหน่งระยะไกล
    ความคิดเห็น = เมานต์ตำแหน่งระยะไกล
    

    พิมพ์ CTRLเอ็กซ์, วาย, เข้า เพื่อบันทึกไฟล์

    คุณสามารถเพิ่ม เทอร์มินัล=จริง ไปที่ *.เดสก์ทอป ไฟล์สำหรับการดีบัก แต่ตำแหน่งระยะไกลจะถูกยกเลิกการต่อเชื่อมทันทีเมื่อหน้าต่างเทอร์มินัลปิดโดยอัตโนมัติ

  6. ย้ายไฟล์ autostart ไปยังตำแหน่งที่ถูกต้อง คุณมีสองทางเลือก

    • หากคุณต้องการใช้ไฟล์ autostart ส่วนกลาง ให้ย้ายไปที่ /etc/xdg/autostart.

      mv ~/mount_remote.desktop /etc/xdg/autostart
      
    • หากคุณต้องการให้ผู้ใช้แต่ละรายมีสำเนาไฟล์ autostart ของตนเอง ให้ย้ายไปที่ /etc/skel/.config/autostart. (ผู้ใช้จะสามารถลบไฟล์นี้ได้เนื่องจากไฟล์จะถูกวางไว้ในโฮมโฟลเดอร์)

      mkdir -p /etc/skel/.config/autostart
      mv ~/mount_remote.desktop /etc/skel/.config/autostart
      
  7. ปรับแต่งระบบปฏิบัติการของคุณต่อไป และสร้าง ISO ใหม่

  8. การทดสอบ

    หากคุณใช้ชื่อโฮสต์ระยะไกลแทนที่อยู่ IP เมื่อคุณทดสอบ ISO ที่สร้างขึ้น ตรวจสอบให้แน่ใจว่าการแก้ไข DNS ใช้งานได้ ใน VirtualBox ฉันมักจะตั้งค่าเครือข่ายให้ใช้ "Bridge Adapter" แทนอะแดปเตอร์ "NAT" เริ่มต้น

us flag
ในคำตอบข้างต้น ฉันคิดว่าคุณต้องการเพียงสคริปต์ของคุณเพื่อเรียกใช้ในฐานะรูทเพื่อเมานต์ตำแหน่งระยะไกล เนื่องจากสามารถทำได้โดยไม่ต้องรูท สคริปต์ในคำตอบนี้จึงไม่ทำงานด้วยสิทธิ์รูท
n00dles avatar
ae flag
เฮ้ @PJSingh ขอบคุณสำหรับคำตอบโดยละเอียด ฉันต้องการทดสอบว่าการทำงานอัตโนมัติทำงานหรือไม่ก่อนที่จะยุ่งกับการติดตั้ง เนื่องจากไม่มีวิธีตรวจสอบว่ามีการเรียกใช้สคริปต์หรือไม่ ฉันจึงสร้างสคริปต์ทดสอบใน /opt เป็น /opt/test.sh เนื้อหาคือ shebang ที่บรรทัดแรกและคำสั่งสัมผัสเพื่อสร้างไฟล์ "it_worked.txt" ที่โฮมไดเร็กตอรี่ จากนั้น ฉันทำ chmod และสร้างไฟล์ autostart แนวคิดคือหากสคริปต์ถูกเรียกใช้หลังจากที่ผู้ใช้จริงเข้าสู่ระบบ ฉันจะเห็น "it_worked.txt" ในโฮมไดเร็กทอรีของฉัน ปัญหาคือฉันไม่ได้ มีอะไรผิดปกติ?
us flag
คุณสร้างไฟล์ `/etc/skel/.config/autostart/mount_remote.desktop` ที่เกี่ยวข้องหรือไม่ หากคุณกำลังทดสอบโดยสร้าง ISO แบบกำหนดเองโดยใช้ลูกบาศก์ ไฟล์ `*.desktop` ควรอยู่ใน `/etc/skel/.config/autostart` หากกำลังทดสอบบนระบบโลคัลของคุณ ควรวางไฟล์ใน `~/.config/autostart` และคุณสามารถทดสอบได้โดยการออกจากระบบและกลับเข้ามาใหม่ ฉันขอแนะนำให้ใช้พาธแบบเต็ม ไม่ใช่พาธสัมพัทธ์ ใน `test .sh` (เช่น `touch /home/ubuntu/it_worked.txt`)
n00dles avatar
ae flag
ฉันทำตามจุดที่ 5 ในการตอบจดหมายของคุณ ไฟล์ .desktop อยู่ในไดเร็กทอรี /etc/skel/.config/autostartเนื่องจากมีวัตถุประสงค์เพื่อการทดสอบ ฉันใช้คำสั่งสัมผัสหลายคำสั่งเพื่อให้แน่ใจ นี่คือเนื้อหาของ "test.sh" บรรทัดถูกคั่นด้วย " ### " --> #!/bin/bash ### sleep 2 ### sudo touch "/etc/skel/it_worked_1.txt" ### sudo touch "$HOME/it_worked_2. txt". ไม่มีไฟล์ใดถูกสร้างขึ้นหลังจากเริ่มต้น ฉันรันสคริปต์ด้วยตนเองและใช้งานได้ ดังนั้นฉันจึงทำบางอย่างผิดพลาดในการทำงานอัตโนมัติ
us flag
ฉันไม่รู้ว่าสคริปต์จะสามารถเข้าถึง `$HOME` ได้หรือไม่ สคริปต์ของคุณจะไม่มีสิทธิ์เขียนสำหรับ `/etc/skel/`; นั่นเป็นเหตุผลที่เราทำให้ `/mnt/remote` สามารถเขียนได้ในขั้นตอนที่ 3 ในไฟล์ `*.desktop` ของคุณ ให้ตั้งค่า `Terminal=true` เพิ่ม `sleep 10` เป็นบรรทัดสุดท้ายของสคริปต์ของคุณ ด้วยวิธีนี้ คุณจะเห็นเทอร์มินัลป๊อปอัปเมื่อสคริปต์ของคุณทำงาน และคุณจะมีเวลา 10 วินาทีในการอ่านผลลัพธ์ก่อนที่เทอร์มินัลจะปิดโดยอัตโนมัติ ดังนั้นคุณจึงสามารถดีบักได้ การใช้งานสามารถใช้คำสั่ง echo เพื่อพิมพ์เอาต์พุตเมื่อสคริปต์ทำงาน ตัวอย่างเช่น คุณสามารถทำ `echo $HOME`
n00dles avatar
ae flag
ฉันเปลี่ยน Terminal เป็น true และเปลี่ยนสคริปต์เพื่อสร้าง "it_worked.txt" ที่ /mnt/test มันไม่ได้ผล และหน้าต่างเทอร์มินัลไม่ปรากฏขึ้นเป็นเวลา 10 วินาทีหลังจากเริ่มต้น อะไรคือปัญหา?
us flag
ฉันเห็นปัญหา รูปแบบสำหรับไฟล์เริ่มต้นอัตโนมัติมีการเปลี่ยนแปลง ใช้เค้าโครงใหม่ "สำหรับ Ubuntu 20.04+" ที่แสดงในขั้นตอนที่ 5 นอกจากนี้ ฉันขอแนะนำให้วางไฟล์ autostart ใน `/etc/xdg/autostart` ดังที่แสดงในขั้นตอนที่ 6
us flag
อย่างไรก็ตาม ฉันได้ทดสอบแล้ว และตัวแปรสภาพแวดล้อม `$HOME` พร้อมใช้งานสำหรับสคริปต์เมื่อดำเนินการ
n00dles avatar
ae flag
เฮ้ @PJSingh การเปลี่ยนแปลงเหล่านั้นได้ผล! ทุกอย่างทำงานได้ตามที่ตั้งใจไว้ ขอบคุณสำหรับความช่วยเหลือทั้งหมด ฉันมีคำถามลูกบาศก์อื่น ดูเหมือนว่าคุณรู้ทางไปรอบ ๆ ได้อย่างไร ช่วยดูหน่อยได้ไหมhttps://askubuntu.com/q/1344916/1287755

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา