Điểm:1

ISO tùy chỉnh khối thực thi tập lệnh shell khi khởi động

lá cờ ae

Tôi đang cố gắng tùy chỉnh Ubuntu ISO với Cubic để chạy một vài tập lệnh shell khi người dùng Live đăng nhập. Tôi đã làm theo một loạt hướng dẫn với rất nhiều hướng dẫn và cuối cùng tôi đã làm cho nó hoạt động tại một thời điểm. Thật không may, tôi không thể tạo lại thiết lập và tệ hơn nữa, tôi đã xóa ISO cụ thể vì nghĩ rằng mình sẽ không cần đến nó. Cho đến nay, tôi đã chuyển các tập lệnh shell của mình sang thư mục /etc/skel thông qua môi trường chroot trong Cubic và sửa đổi crontab bằng cách thêm lệnh @reboot. Sau đó, tôi để Cubic tạo ISO của mình và flash nó vào USB. Tôi đã khởi động nó nhưng nhận ra rằng các tập lệnh chưa được thực thi.Tôi đã kiểm tra thư mục chính (vì đó là nơi chứa nội dung của /etc/skel) và tất cả các tập lệnh của tôi đều có mặt. Làm thế nào tôi có thể làm việc này?

lá cờ us
Tập lệnh của bạn có cần chạy bằng quyền root không? Bạn có cần tập lệnh này chạy sau mỗi lần đăng nhập không? Tập lệnh này chỉ cần chạy cho người dùng môi trường trực tiếp (tức là "ubuntu") hay nó cũng nên chạy cho những người dùng khác (tức là nếu bạn tạo người dùng mới trong khi sử dụng môi trường trực tiếp)? Tập lệnh này cũng cần chạy trong hệ thống *đã cài đặt* (tức là sau khi bạn đã cài đặt HĐH từ ISO trực tiếp)?
n00dles avatar
lá cờ ae
@PJSingh, một số tập lệnh liên quan đến việc gắn các thiết bị đính kèm. Nó sẽ cần phải được root.Không, các tập lệnh chỉ cần được chạy sau lần đăng nhập đầu tiên và chỉ dành cho người dùng trực tiếp. Mặc dù vậy, nếu có thể, vui lòng giải thích quy trình chạy nó cho nhiều người dùng. Đối với câu hỏi cuối cùng, tôi không có ý định cài đặt vĩnh viễn, vì vậy không.
Điểm:1
lá cờ us

Thay vì sử dụng niên đại, bạn có thể sử dụng tập lệnh tự khởi động để kết nối với máy từ xa.

Bạn nên thiết lập xác thực dựa trên khóa cho máy từ xa để không cần tương tác với người dùng.

Trong hướng dẫn bên dưới, hãy thay thế các giá trị sau nếu cần.

  • ĐỊA PHƯƠNG - địa chỉ IP hoặc tên máy chủ của máy tính cục bộ của bạn (nơi bạn đang chạy Cubic)
  • XA XÔI - địa chỉ IP hoặc tên máy chủ của máy tính từ xa
  • n00dles - tên người dùng trên máy tính cục bộ và/hoặc máy tính từ xa
  • REMOTE_LOCATION_PATH - đường dẫn của thư mục bạn muốn mount trên máy tính từ xa
  1. Tạo khóa công khai và khóa riêng cho máy cục bộ của bạn.

    Các phím này sẽ được sử dụng trong ISO tùy chỉnh của bạn. Hãy nhận biết các tác động bảo mật. Bất kỳ ai nắm giữ USB tùy chỉnh của bạn đều có thể đăng nhập vào máy từ xa của bạn.

    Thực hiện các lệnh sau trên máy cục bộ của bạn (ví dụ: không phải ở dạng khối).

    đĩa ~
    ssh-keygen -t rsa
    

    Chấp nhận các giá trị mặc định. Đầu ra sẽ trông giống như thế này.

    Tạo cặp khóa rsa công khai/riêng tư.
    Nhập tệp để lưu khóa (/home/n00dles/.ssh/id_rsa): 
    Nhập cụm mật khẩu (trống nếu không có cụm mật khẩu):
    Nhập lại cùng một cụm mật khẩu:
    Nhận dạng của bạn đã được lưu trong /home/n00dles/.ssh/id_rsa
    Khóa công khai của bạn đã được lưu trong /home/n00dles/.ssh/id_rsa.pub
    Dấu vân tay chính là:
    SHA256:G48dcTOXpUhzWxuzwn8pgdOTP9WmlLtXBCJkkiSEywk n00dles@LOCAL
    Hình ảnh ngẫu nhiên của khóa là:
    +---[RSA 3072]----+
    | xxxxx x xx|
    | x x xxxxxxxxxx|
    | x x xxxxxxx|
    | x xxxxxx|
    | x x x xxxx|
    | x x xxx|
    | x x x x x|
    | x |
    | x |
    +----[SHA256]-----+
    
  2. Thiết lập đăng nhập từ xa.

    Sao chép khóa chung vào máy từ xa. Hãy nhận biết các tác động bảo mật. Điều này sẽ cho phép kết nối từ xa từ bất kỳ máy tính nào bằng khóa riêng tư tương ứng.

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

    Tạo một cái mới known_hosts tệp mà bạn sẽ sao chép vào ISO tùy chỉnh. Điều này sẽ cho phép môi trường Live kết nối với máy từ xa mà không cần nhắc người dùng xác nhận.

    Sao lưu tạm thời hiện tại của bạn known_hosts tập tin. Nhớ thay n00dles@REMOTEREMOTE_LOCATION_PATH khi cần thiết.

    mv ~/.ssh/known_hosts ~/.ssh/known_hosts. original
    
    # Đăng nhập vào máy từ xa để tự động tạo tệp `known_hosts` mới.
    sudo mkdir /mnt/từ xa
    sshfs [email protected]:/REMOTE_LOCATION_PATH/ /mnt/remote/
    
    Dấu vân tay khóa ECDSA là SHA256:XXXX.
    Bạn có chắc chắn muốn tiếp tục kết nối (có/không/[vân tay]) không? Vâng
    
    # Ngắt kết nối máy từ xa.
    fusermount -u /mnt/remote
    sudo rmdir /mnt/từ xa
    
    # Lưu tập tin known_hosts mới.
    mv ~/.ssh/known_hosts ~/
    
    # Hoàn nguyên tệp known_hosts ban đầu.
    mv ~/.ssh/known_hosts. original ~/.ssh/known_hosts
    
  3. Tùy chỉnh ISO bằng Cubic.

    Khởi chạy Cubic và thực hiện các thao tác sau trên trang Terminal.

    Bảo đảm sshfs được cài đặt để chúng tôi có thể kết nối với các máy từ xa.

    apt cài đặt sshfs
    

    Sao chép các phím và cái mới known_hosts tập tin vào hệ điều hành tùy chỉnh.

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

    Mở một trình duyệt tệp chẳng hạn như Nautilus và điều hướng đến tệp cục bộ của bạn ~/.ssh danh mục.

    Lựa chọn id_rsaid_rsa.pub và kéo chúng vào cửa sổ Cubic để sao chép chúng vào thư mục hiện tại, /etc/skel.ssh.

    Mở trình duyệt tệp chẳng hạn như Nautilus và điều hướng đến thư mục chính của bạn.

    Chọn cái mới known_hosts tập tin và kéo nó vào cửa sổ Cubic để sao chép nó vào thư mục hiện tại, /etc/skel/.ssh.

    Đảm bảo rằng các quyền được đặt chính xác cho các tệp này; cái này rất quan trọng. Trong Cubic, thực hiện như sau:

    chmod u=rw,g=,o= id_rsa
    chmod u=rw,g=r,o=r id_rsa.pub
    chmod u=rw,g=r,o=r known_hosts
    
    ls -la
    
    -rw------- 1 gốc gốc 2602 ngày 7 tháng 6 09:35 id_rsa
    -rw-r--r-- 1 gốc gốc 566 ngày 7 tháng 6 09:35 id_rsa.pub
    -rw-r--r-- 1 root root 222 ngày 7 tháng 6 09:35 known_hosts
    

    Tạo một điểm gắn kết cho vị trí từ xa, đảm bảo rằng tất cả người dùng có thể sử dụng nó và thêm một liên kết có tên Xa trong thư mục chính của mỗi người dùng.

    mkdir /mnt/từ xa
    chmod a+rw /mnt/từ xa
    ln -s /mnt/remote /etc/skel/Remote
    
  4. Tạo tập lệnh để gắn vị trí từ xa.

    nano /opt/mount_remote.sh
    

    Thêm phần sau vào tập lệnh. Nhớ thay n00dles@REMOTEREMOTE_LOCATION_PATH khi cần thiết.

    #!/bin/bash
    # Gắn vị trí từ xa.
    # Để gắn kết, hãy sử dụng: sshfs [email protected]:/REMOTE_LOCATION_PATH/ /mnt/remote
    # Để ngắt kết nối, hãy sử dụng: fusermount -u /mnt/remote
    cho i trong {1..5}; làm
        nếu điểm gắn kết/mnt/từ xa; sau đó
            echo "[email protected]:/REMOTE_LOCATION_PATH đã được gắn."
            nghỉ
        khác
            # Cố gắn vị trí từ xa vào /mnt/remote
            echo "Thử # $i để gắn kết [email protected]:/REMOTE_LOCATION_PATH."
            ngủ đi
            sshfs [email protected]:/REMOTE_LOCATION_PATH/ /mnt/remote
        fi
    xong
    nếu điểm gắn kết/mnt/từ xa; sau đó
        echo "Đã gắn thành công [email protected]:/REMOTE_LOCATION_PATH."
    khác
        echo "Không thể gắn [email protected]:/REMOTE_LOCATION_PATH."
    fi
    

    Loại ĐIỀU KHIỂNX, Y, đi vào để lưu tập tin.

    Bạn có thể sử dụng các biến môi trường như $HOME trong kịch bản, nếu bạn cần.

    Làm cho tập lệnh có thể thực thi được.

    chmod +x /opt/mount_remote.sh
    
  5. Tạo một tệp tự khởi động sẽ chạy cho mỗi người dùng sau khi đăng nhập.

    nano ~/mount_remote.desktop
    

    Đối với XUbuntu 20.04+ hoặc các phiên bản Ubuntu cũ hơn, hãy thêm phần sau vào tệp.

    [Mục nhập máy tính để bàn]
    Mã hóa=UTF-8
    Phiên bản=0.9.4
    Loại=Ứng dụng
    Tên=mount_remote
    Comment=Gắn vị trí từ xa
    Exec=/opt/mount_remote.sh
    OnlyShowIn=XFCE;
    RunHook=0
    StartupNotify=false
    Thiết bị đầu cuối = sai
    Ẩn = sai
    

    Đối với Ubuntu 20.04+, hãy thêm phần sau vào tệp.

    [Mục nhập máy tính để bàn]
    Loại=Ứng dụng
    Exec=/opt/mount_remote.sh
    Ẩn = sai
    NoDisplay=false
    X-GNOME-Autostart-enabled=true
    Name[en_US]=Gắn điều khiển từ xa
    Tên = Gắn điều khiển từ xa
    Comment[en_US]=Gắn vị trí từ xa
    Comment=Gắn vị trí từ xa
    

    Loại ĐIỀU KHIỂNX, Y, đi vào để lưu tập tin.

    Bạn có thể thêm Thiết bị đầu cuối = đúng đến *.máy tính để bàn cho mục đích gỡ lỗi, nhưng vị trí từ xa sẽ bị ngắt kết nối ngay lập tức sau khi cửa sổ đầu cuối tự động đóng.

  6. Di chuyển tệp tự khởi động đến đúng vị trí. Bạn có hai lựa chọn.

    • Nếu bạn muốn sử dụng tệp tự động khởi động chung, hãy chuyển tệp đó sang /etc/xdg/tự khởi động.

      mv ~/mount_remote.desktop /etc/xdg/autostart
      
    • Nếu bạn muốn mỗi người dùng có bản sao riêng của tệp tự khởi động, hãy di chuyển tệp đó đến /etc/skel/.config/autostart. (Người dùng sẽ có thể xóa tệp này vì nó sẽ được đặt trong thư mục chính của họ).

      mkdir -p /etc/skel/.config/autostart
      mv ~/mount_remote.desktop /etc/skel/.config/autostart
      
  7. Tiếp tục tùy chỉnh hệ điều hành của bạn và tạo ISO mới.

  8. thử nghiệm

    Nếu bạn sử dụng tên máy chủ từ xa thay vì địa chỉ IP, khi bạn kiểm tra ISO được tạo, hãy đảm bảo rằng độ phân giải DNS hoạt động. Trong VirtualBox, tôi thường đặt Mạng sử dụng "Bộ điều hợp cầu" thay vì bộ điều hợp "NAT" mặc định.

lá cờ us
Trong câu trả lời ở trên, tôi cho rằng bạn chỉ cần tập lệnh của mình chạy với quyền root để gắn vị trí từ xa. Vì điều này có thể được thực hiện mà không cần root, tập lệnh trong câu trả lời này không chạy với quyền root.
n00dles avatar
lá cờ ae
Xin chào @PJSingh, cảm ơn vì câu trả lời chi tiết. Tôi muốn kiểm tra xem tính năng tự động chạy có hoạt động trước khi thực hiện thao tác cài đặt hay không. Vì không có cách nào để kiểm tra xem các tập lệnh có được gọi hay không, nên tôi đã tạo một tập lệnh thử nghiệm trong /opt dưới dạng /opt/test.sh. Nội dung là shebang ở dòng đầu tiên và một lệnh cảm ứng để tạo tệp "it_worked.txt" tại thư mục chính. Và sau đó, tôi đã thực hiện chmod và tạo tệp tự khởi động. Ý tưởng là nếu tập lệnh được gọi sau khi người dùng trực tiếp đăng nhập, tôi sẽ thấy "it_worked.txt" trong thư mục chính của mình. Vấn đề là, tôi đã không. Điều gì có thể sai?
lá cờ us
Bạn đã tạo tệp `/etc/skel/.config/autostart/mount_remote.desktop` tương ứng chưa? Nếu bạn đang thử nghiệm bằng cách tạo ISO tùy chỉnh bằng cách sử dụng khối, thì tệp `*.desktop` phải ở trong `/etc/skel/.config/autostart`. Nếu đang kiểm tra trên hệ thống cục bộ của bạn, thì tệp phải được đặt trong `~/.config/autostart` và bạn có thể kiểm tra bằng cách đăng xuất rồi đăng nhập lại. Tôi cũng khuyên bạn nên sử dụng đường dẫn đầy đủ, không phải đường dẫn tương đối, trong `test .sh` (vì vậy đại loại như `touch /home/ubuntu/it_worked.txt`).
n00dles avatar
lá cờ ae
Tôi đã làm theo điểm thứ 5 trong câu trả lời của bạn cho bức thư. Tệp .desktop nằm trong thư mục /etc/skel/.config/autostart.Vì mục đích thử nghiệm nên tôi đã chạy nhiều lệnh cảm ứng để đảm bảo. Đây là nội dung của "test.sh". Các dòng đã được phân tách bằng " ### " --> #!/bin/bash ### sleep 2 ### sudo touch "/etc/skel/it_worked_1.txt" ### sudo touch "$HOME/it_worked_2. txt". Cả hai tệp đều không được tạo sau khi khởi động. Tôi đã chạy tập lệnh theo cách thủ công và nó đã hoạt động. Vì vậy, tôi đang làm rối tung thứ gì đó trong tệp autorun.
lá cờ us
Tôi không biết liệu tập lệnh có quyền truy cập vào `$HOME` hay không. Tập lệnh của bạn sẽ không có quyền ghi đối với `/etc/skel/`; đó là lý do tại sao chúng tôi tạo `/mnt/remote` có thể ghi ở bước 3. Trong tệp `*.desktop` của bạn, hãy đặt `Terminal=true`. Thêm `sleep 10` làm dòng cuối cùng trong tập lệnh của bạn. Bằng cách này, bạn sẽ thấy cửa sổ bật lên của thiết bị đầu cuối khi tập lệnh của bạn chạy và bạn sẽ có 10 giây để đọc đầu ra trước khi thiết bị đầu cuối tự động đóng lại, vì vậy bạn có thể gỡ lỗi. Sử dụng có thể sử dụng các lệnh echo để in đầu ra khi tập lệnh chạy. Ví dụ: bạn có thể thực hiện `echo $HOME`.
n00dles avatar
lá cờ ae
Tôi đã thay đổi Terminal thành true và thay đổi tập lệnh để tạo "it_worked.txt" tại /mnt/test. Nó không hoạt động. Và một cửa sổ đầu cuối không bật lên trong 10 giây sau khi khởi động. Điều gì có thể là vấn đề?
lá cờ us
Tôi thấy vấn đề. Định dạng cho tệp tự khởi động đã thay đổi. Sử dụng bố cục mới "Dành cho Ubuntu 20.04+" được hiển thị trong bước 5. Ngoài ra, tôi khuyên bạn nên đặt tệp tự khởi động trong `/etc/xdg/autostart`, như được hiển thị trong bước 6.
lá cờ us
Nhân tiện, tôi đã thử nghiệm và biến môi trường `$HOME` có sẵn cho tập lệnh khi nó thực thi.
n00dles avatar
lá cờ ae
Xin chào @PJSingh, việc thực hiện những thay đổi đó đã giúp ích rất nhiều! Mọi thứ hoạt động như dự định, cảm ơn vì tất cả sự giúp đỡ. Tôi đã có một câu hỏi khối khác. Xem như cách bạn biết đường đi của mình, bạn có thể vui lòng xem qua không?https://askubuntu.com/q/1344916/1287755

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.