Рейтинг:1

Кубический пользовательский ISO, который запускает сценарий оболочки при запуске

флаг ae

Я пытаюсь настроить ISO-образ Ubuntu с помощью Cubic для запуска нескольких сценариев оболочки, когда пользователь Live входит в систему. Я следил за кучей руководств с кучей инструкций, и в конце концов он заработал в какой-то момент. К сожалению, я не могу воссоздать настройку и, что еще хуже, я удалил конкретный ISO-образ, думая, что он мне не понадобится. До сих пор я переместил свои сценарии оболочки в каталог /etc/skel через среду chroot в Cubic и изменил crontab, добавив команду @reboot. После этого я позволил Cubic создать свой ISO и прошил его на USB. Я загрузил его, но понял, что сценарии не были выполнены.Я проверил домашнюю директорию (поскольку там должно находиться содержимое /etc/skel) и все мои скрипты присутствовали. Как я могу заставить это работать?

флаг us
Ваш скрипт должен запускаться от имени пользователя root? Вам нужно, чтобы этот скрипт запускался при каждом входе в систему? Должен ли этот сценарий запускаться только для пользователя живой среды (т. е. «ubuntu») или он должен работать и для других пользователей (т. е. если вы создаете новых пользователей при использовании живой среды)? Нужно ли запускать этот скрипт также в *установленной* системе (т. е. после того, как вы установили ОС из живого ISO)?
n00dles avatar
флаг ae
@PJSingh, некоторые сценарии включают монтирование подключенных устройств. Это должен быть root.Нет, скрипты нужно запускать только после первого входа в систему и только для живого пользователя. Хотя, если возможно, объясните процесс запуска для нескольких пользователей. Что касается последнего вопроса, я не собираюсь устанавливать на постоянной основе, поэтому нет.
Рейтинг:1
флаг us

Вместо того, чтобы использовать хрон, вы можете использовать сценарий автозапуска для подключения к удаленному компьютеру.

Вы должны настроить аутентификацию на основе ключа для удаленного компьютера, поэтому взаимодействие с пользователем не требуется.

В приведенных ниже инструкциях замените следующие значения по мере необходимости.

  • МЕСТНЫЙ - IP-адрес или имя хоста вашего локального компьютера (где вы используете Cubic)
  • УДАЛЕННЫЙ - IP-адрес или имя хоста удаленного компьютера
  • n00dles - имя пользователя на локальном компьютере и/или удаленном компьютере
  • REMOTE_LOCATION_PATH - путь к каталогу, который вы хотите смонтировать на удаленном компьютере
  1. Создайте открытый и закрытый ключи для вашего локального компьютера.

    Эти ключи будут использоваться в вашем пользовательском ISO. Помните о последствиях для безопасности. Любой, кто завладеет вашим настроенным USB-накопителем, сможет войти на ваш удаленный компьютер.

    Выполните следующие команды на вашем локальном компьютере (например, не в Cubic).

    компакт-диск ~
    ssh-keygen -t rsa
    

    Примите значения по умолчанию. Вывод будет выглядеть примерно так.

    Генерация пары открытый/закрытый ключ rsa.
    Введите файл для сохранения ключа (/home/n00dles/.ssh/id_rsa): 
    Введите кодовую фразу (пусто, если нет парольной фразы):
    Введите тот же пароль еще раз:
    Ваша идентификация сохранена в /home/n00dles/.ssh/id_rsa.
    Ваш открытый ключ сохранен в /home/n00dles/.ssh/id_rsa.pub
    Ключевой отпечаток пальца:
    SHA256:G48dcTOXpUhzWxuzwn8pgdOTP9WmlLtXBCJkkiSEywk n00dles@LOCAL
    Случайное изображение ключа:
    +---[RSA 3072]----+
    | хххххххххх|
    | х х ххххххххх|
    | х х ххххххх |
    | х хххххх |
    | х х х хххх |
    | х х ххх |
    | х х х х х |
    | х |
    | х |
    +----[SHA256]-----+
    
  2. Настроить удаленный вход.

    Скопируйте открытый ключ на удаленную машину. Помните о последствиях для безопасности. Это позволит удаленно подключаться с любого компьютера с использованием соответствующего закрытого ключа.

    ssh-copy-id -i .ssh/id_rsa.pub пользователь@хост
    

    Создать новый известные_хосты файл, который вы скопируете в настроенный ISO. Это позволит среде Live подключиться к удаленному компьютеру, не запрашивая подтверждения у пользователя.

    Временно сделайте резервную копию текущего известные_хосты файл. Не забудьте заменить n00dles@REMOTE и REMOTE_LOCATION_PATH как надо.

    mv ~/.ssh/known_hosts ~/.ssh/known_hosts.original
    
    # Войдите на удаленную машину, чтобы автоматически создать новый файл `known_hosts`.
    sudo mkdir /mnt/удаленный
    sshfs [email protected]:/REMOTE_LOCATION_PATH/ /mnt/remote/
    
    Отпечаток ключа ECDSA — SHA256:XXXX.
    Вы уверены, что хотите продолжить подключение (да/нет/[отпечаток пальца])? да
    
    # Размонтировать удаленную машину.
    fusermount -u /mnt/удаленный
    sudo rmdir /mnt/remote
    
    # Сохраните новый файл known_hosts.
    мв ~/.ssh/known_hosts ~/
    
    # Восстановить исходный файл known_hosts.
    mv ~/.ssh/known_hosts.original ~/.ssh/known_hosts
    
  3. Настройте ISO с помощью Cubic.

    Запустите Cubic и выполните следующие действия на странице терминала.

    Убедиться sshfs установлен, поэтому мы можем подключаться к удаленным машинам.

    метко установить sshfs
    

    Скопируйте ключи и новый известные_хосты файл в пользовательскую ОС.

    компакт-диск /etc/skel
    мкдир .ssh
    chmod u=rwx,g=,o= .ssh
    компакт-диск .ssh
    

    Откройте файловый браузер, например Nautilus, и перейдите к ~/.ssh каталог.

    Выбирать id_rsa и id_rsa.pub и перетащите их в окно Cubic, чтобы скопировать их в текущий каталог, /etc/skel.ssh.

    Откройте файловый браузер, например Nautilus, и перейдите в свой домашний каталог.

    Выберите новый известные_хосты файл и перетащите его в окно 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=r известные_хосты
    
    лс -ла
    
    -rw------- 1 root root 2602 7 июня 09:35 id_rsa
    -rw-r--r-- 1 root root 566 7 июня 09:35 id_rsa.pub
    -rw-r--r-- 1 root root 222 7 июня 09:35 known_hosts
    

    Создайте точку подключения для удаленного расположения, убедитесь, что ее могут использовать все пользователи, и добавьте ссылку с именем Удаленный в домашнем каталоге каждого пользователя.

    mkdir / mnt / удаленный
    chmod a+rw /mnt/удаленный
    ln -s /mnt/remote /etc/skel/Remote
    
  4. Создайте сценарий для подключения удаленного расположения.

    нано /opt/mount_remote.sh
    

    Добавьте в скрипт следующее. Не забудьте заменить n00dles@REMOTE и REMOTE_LOCATION_PATH как надо.

    #!/бин/баш
    # Монтирует удаленное местоположение.
    # Для монтирования используйте: sshfs [email protected]:/REMOTE_LOCATION_PATH/ /mnt/remote
    # Для размонтирования используйте: fusermount -u /mnt/remote
    для я в {1..5}; делать
        если точка монтирования /mnt/remote; тогда
            echo "[email protected]:/REMOTE_LOCATION_PATH смонтировано."
            сломать
        еще
            # Попытка смонтировать удаленное местоположение в /mnt/remote
            echo "Попытка # $i смонтировать [email protected]:/REMOTE_LOCATION_PATH."
            спать $ я
            sshfs [email protected]:/REMOTE_LOCATION_PATH/ /mnt/remote
        фи
    сделано
    если точка монтирования /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
    Тип = Приложение
    Имя = mount_remote
    Комментарий=Смонтировать удаленное местоположение
    Exec=/opt/mount_remote.sh
    ТолькоШоуИн=XFCE;
    Ранхук=0
    StartupNotify=ложь
    Терминал=ложь
    Скрытый = ложь
    

    Для Ubuntu 20.04+ добавьте в файл следующее.

    [Вход на рабочий стол]
    Тип = Приложение
    Exec=/opt/mount_remote.sh
    Скрытый = ложь
    NoDisplay=ложь
    X-GNOME-Autostart-enabled=true
    Name[en_US]=Mount Remote
    Name=Mount Remote
    Comment[en_US]=Смонтировать удаленное местоположение
    Комментарий=Смонтировать удаленное местоположение
    

    Тип CTRLИкс, Д, Войти чтобы сохранить файл.

    Можете добавить Терминал=истина к *.рабочий стол файл для целей отладки, но удаленное расположение будет немедленно размонтировано, как только окно терминала автоматически закроется.

  6. Переместите файл автозапуска в нужное место. У вас есть два варианта.

    • Если вы хотите использовать глобальный файл автозапуска, переместите его в /etc/xdg/автозапуск.

      mv ~/mount_remote.desktop /etc/xdg/автозапуск
      
    • Если вы хотите, чтобы у каждого пользователя была собственная копия файла автозапуска, переместите его в /etc/skel/.config/автозапуск. (Пользователи смогут удалить этот файл, поскольку он будет помещен в их домашнюю папку).

      mkdir -p /etc/skel/.config/autostart
      mv ~/mount_remote.desktop /etc/skel/.config/autostart
      
  7. Продолжайте настраивать ОС и создавайте новый ISO-образ.

  8. Тестирование

    Если вы используете имя удаленного хоста вместо IP-адреса, при тестировании сгенерированного ISO убедитесь, что разрешение DNS работает. В VirtualBox я обычно настраиваю сеть на использование «адаптера моста» вместо адаптера «NAT» по умолчанию.

флаг us
В приведенном выше ответе я предполагаю, что вам нужно было запустить скрипт только от имени пользователя root, чтобы смонтировать удаленное местоположение. Поскольку это можно сделать без root, скрипт в этом ответе не запускается с привилегиями root.
n00dles avatar
флаг ae
Привет @PJSingh, спасибо за подробный ответ. Я хотел сначала проверить, работает ли автозапуск, прежде чем возиться с монтированием. Поскольку нет возможности проверить, вызывались ли сценарии вообще, я создал тестовый сценарий в /opt как /opt/test.sh. Содержимое было шебангом в первой строке и сенсорной командой для создания файла «it_worked.txt» в домашнем каталоге. А затем я сделал chmod и создал файл автозапуска. Идея заключалась в том, что если скрипт вызывается после входа в систему живого пользователя, я увижу «it_worked.txt» в своем домашнем каталоге. Проблема в том, что я этого не сделал. Что может быть не так?
флаг us
Вы создали соответствующий файл `/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
Я следовал 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. текст". Ни один из файлов не был создан после запуска. Я запустил скрипт вручную, и он сработал. Значит я что-то напутал в автозапуске.
флаг us
Я не знаю, будет ли скрипт иметь доступ к `$HOME`. У вашего скрипта не будет прав на запись для `/etc/skel/`; именно поэтому мы сделали `/mnt/remote` доступным для записи на шаге 3. В вашем файле `*.desktop` установите `Terminal=true`. Добавьте `sleep 10` в качестве последней строки вашего скрипта. Таким образом, вы увидите всплывающее окно терминала при запуске вашего скрипта, и у вас будет 10 секунд, чтобы прочитать вывод, прежде чем терминал автоматически закроется, чтобы вы могли выполнить отладку. Использование может использовать эхо-команды для печати вывода во время выполнения скрипта. Например, вы можете сделать `echo $HOME`.
n00dles avatar
флаг ae
Я изменил Terminal на true и изменил сценарий, чтобы создать «it_worked.txt» в /mnt/test. Это не сработало. И окно терминала не появлялось в течение 10 секунд после запуска. В чем может быть проблема?
флаг us
Я вижу проблему. Изменился формат файла автозапуска. Используйте новый макет «Для Ubuntu 20.04+», показанный на шаге 5. Кроме того, я предлагаю поместить файл автозапуска в `/etc/xdg/autostart`, как показано на шаге 6.
флаг us
Между прочим, я проверил, и переменная окружения `$HOME` доступна для скрипта, когда он выполняется.
n00dles avatar
флаг ae
Привет, @PJSingh, эти изменения помогли! Все работает как задумано, спасибо всем за помощь. У меня был еще один кубический вопрос. Учитывая, как вы разбираетесь в этом, не могли бы вы взглянуть? https://askubuntu.com/q/1344916/1287755

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.