systemd-nspawn: перенаправить порты и сохранить Интернет

  1. Не забудьте добавить ПУТЬ в ваш сценарий и включить в него / sbin . Поскольку сценарий init не использует переменную среды PATH для остальной системы, вам необходимо установить ее непосредственно в своем сценарии и убедиться, что / sbin там, например, добавьте:

      ПУТЬ = / sbin: / bin: / usr / sbin: / usr / bin 
     

    В начале вашего скрипта.

  2. Выполните отладку сценария, чтобы убедиться, что демон start-stop-daemon правильно считывает путь к monit из переменной DAEMON . Для этого добавьте следующую строку в начало вашего скрипта:

     set -x #echo on 
     

    Все это будет выглядеть как

     #! / Bin / sh {{ 1}} set -x #echo on 
     ### BEGIN INIT INFO 
     # Provides: monit 
     # Required-Start: $ remote_fs 
     # Required-Stop : $ remote_fs 
     # Should-Start: $ all 
     # Should-Stop: $ all 
     # Default-Start: 2 3 4 5 
     # Default-Stop : 0 1 6 
     # Краткое описание: демон мониторинга служб и ресурсов 
     # Описание: monit - это утилита для управления и мониторинга 
     # процессов, программ, файлов, каталогов и файловых систем 
     # в системе Unix. Monit выполняет автоматическое обслуживание 
     # и восстановление и может выполнять значимые причинно-следственные действия 
     # в ошибочных ситуациях. 
     ### END INIT INFO 
     
    set -e 
     
    ПУТЬ = / sbin: / остаток пути здесь. 
     

    Ваш скрипт.

    Если DAEMON поврежден, попробуйте заключить его в круглые скобки:

     if start-stop-daemon --start --quiet --oknodo \ 
     --pidfile $ PID - -exec $ ($ DAEMON) \ 
     - $ MONIT_OPTS 
     

    Или просто добавьте путь к двоичному файлу напрямую.

      if start-stop-daemon --start --quiet --oknodo \ 
     --pidfile $ PID --exec / usr / bin / monit \ 
     - $ MONIT_OPTS {{ 1}} 
  3. Если последний вариант не работает, убедитесь, что двоичный файл действительно существует. Если это так, вам нужно будет проверить, действительно ли start-stop-daemon разрешен доступ к нему. Посмотрите на chrooting.

1
18.12.2017, 23:16
2 ответа

Краткий ответ :ssh root@XXX -p 23, где XXXпубличный IP-адрес хоста. См. iptables -L -t natпо причине.

Вот полное руководство о том, как туда добраться (Сервер Ubuntu 18.04 в качестве хоста, Debian buster в контейнере):

apt-get install debian-archive-keyring debootstrap systemd-container
debootstrap --include=systemd-container buster /var/lib/machines/debian
systemd-nspawn -D /var/lib/machines/debian systemctl enable systemd-networkd.service systemd-resolved.service
systemd-nspawn -D /var/lib/machines/debian apt-get install -y openssh-server
systemd-nspawn -D /var/lib/machines/debian mkdir /root/.ssh

Создайте /etc/systemd/nspawn/debian.nspawnс помощью:

[Network]
Port=tcp:23:22

Затем продолжайте:

machinectl start debian
machinectl copy-to debian /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys
ssh -p 23 root@XXX

Теперь у вас должно быть SSH-подключение к контейнеру.

1
28.01.2020, 00:42
ssh root@localhost -p 23

не работает, так как привязка портов nspawn исключает замыкание на себя. Есть отчет об ошибке:https://github.com/systemd/systemd/issues/6106

0
05.09.2020, 09:13

Теги

Похожие вопросы