Как выполненный sudo-s после ssh вход в систему

Мое пошаговое:

  1. На myserver.com я вставляю строку "sudo-s" в файл "~/.bashrc" в корневом каталоге для "mylogin"
  2. Вход в систему SSH mylogin@myserver.com
  3. После входа в систему:

    root@myserver.com:~$

  4. Но, потребуйте у cntrl+D выхода

    root@myserver.com:~$ exit

    root@myserver.com:~$ exit

    ...

    root@myserver.com:~$

    5. Не выходить.

Почему?

Скажите мне корректный метод.

2
задан 21.05.2011, 14:57

0 ответов

Можно сохранить флаг в переменной среды:

if [ -z $INITIAL_SUDO ]; then
    exec sudo -s INITIAL_SUDO=1
fi

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

Обратите внимание, что я звоню exec sudo -s вместо sudo -s. Иначе необходимо будет нажать ctrl+D дважды: сначала для корневой оболочки и второй для начальной оболочки, которая вызвала sudo во-первых.

5
ответ дан 08.12.2019, 04:51

Команда sudo -s выполняет новую оболочку, которая выполняет Ваш .bashrc.

Таким образом, то, что произошло здесь, то, что Вы создали цикл, куда каждая новая оболочка выполняет sudo-s, который в свою очередь создает новую оболочку. В какой-то момент цикл достиг предела RLIMIT_NPROC для системы и остановленного цикла, оставив огромную стопку вложенных оболочек. Этот предел слишком высок в большей части системы (8192 или неограничен), чтобы Вы вышли из них использующий Вашу клавиатуру.

4
ответ дан 08.12.2019, 04:51

Теги

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