2

Мой шаг за шагом:

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

    root@myserver.com:~$

  4. Но нажмите Ctrl +D для выхода

    root@myserver.com:~$ exit

    root@myserver.com:~$ exit

    ...

    root@myserver.com:~$

    5.Не уходи.

Зачем?

Пожалуйста, скажите мне правильный метод.

2 ответа2

5

Вы можете сохранить флаг в переменной окружения:

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

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

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

4

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .