как удаленно выполнить сценарий оболочки с повышенными привилегиями

[117092]Поиск уникалов - это кусок пирога с [117772]sed[117773]:

OUTPUT:

Не совсем уверен, как правильно это представить в [117774]Markdown[117775], но вывод из вышеприведенной команды на самом деле является новой строкой и единым пробелом, который разделил две строки, затем вышеприведенную, затем еще одну новую строку и пробел.

$ dpkg --get-selections | grep linux-image
linux-image-2.6.35-22-generic           deinstall
linux-image-2.6.35-24-generic           install
linux-image-2.6.35-25-generic           install
linux-image-2.6.35-27-generic           install
linux-image-2.6.35-28-generic           install
linux-image-generic             install
$ sudo aptitude remove linux-image-2.6.35-24-generic linux-image-2.6.35-25-generic

Функция [117776]t

sed[117779] является полностью портативным устройством [117780], определенным POSIX[117781], поэтому:[117099]. [117100] [117782][[117948]2addr[117949]][117950]t[117951] [[117952]label[117953]] Тест. Ответвление на командный глагол [117954]: [117955] с меткой [117956] [117957], если с момента последнего чтения входной строки или выполнения [117958]t[117959] были произведены какие-либо замены. Если метка [117960]label[117961] не указана, ветка в конце скрипта.[12210]Давайте посмотрим, как это работает, я добавлю [117786]p[117787]rint в нужном месте:[12211]OUTPUT:[12212]Вы можете видеть, что между тремя разными [117788]t[117789]ests существует разное количество пустого места. Это результат порядка, в котором [117790]sed[117791] отрицает символы, что означает, что [117792]белые пробела[117793] также отрицаются, при условии, что их четное количество. [12213]Команда:[12214]s/[117795]выбирает первый [117796]\(.[117797]символ[117798]\)[117799] в строке, которую можно выбрать [117800]\1[117801]дважды, [117802]и[12215]\(..[117805]все[117806]*\)[117807] символы между ними. Затем [117808]/[117809]заменяет[117810]/[117811] всю выборку на [117812]только [117813] выборку [117814]\2[117815]между ними. [117816]:[117817]Rinse, repea[117818]t[117819]. [12216]OPTIMIZE IT![12217]Мы можем улучшить производительность этой функции с помощью [12218]очень большого поля[12219]с простым добавлением в команду только еще двух символов, только так:[12220]OUTPUT[12221]sed[117823] теперь выполняет отрицания на любой [117824]последовательности[117825] из 1 или более символов, которые могут быть дважды выбраны, поэтому [117826]идентичный[117827] не появляется в приведенной выше команде - он полностью отрицается на первом проходе. [12222]И без [117828]p[117829]rint результаты одинаковы:[12223]OUTPUT[12224]POSITIVE FROM NEGATIVE[12225]Для отрицания отрицания требуется очень мало - и больше никакой рекурсии. [12226]OUTPUT:[12227]Или даже:[12228]OUTPUT:[12229]

1
27.10.2015, 18:38
2 ответа

У вас есть выбор. Вот несколько предложений:

  1. Подключитесь от serverB к root @ serverA, используя аутентификацию на основе сертификата, и запустите сценарий в корневом контексте на этом сервере.

    Затем вы можете использовать ту же аутентификацию на основе сертификата, чтобы вернуть полученный файл с помощью scp или rsync . Обратной стороной является то, что ваша учетная запись на serverB тогда имеет полный неограниченный доступ к root @ serverA. однако в строго управляемой среде это может быть приемлемо.

  2. Подключитесь от serverB к root @ serverA, используя аутентификацию на основе сертификата, которая ограничивает соединение запуском одной команды - вашего скрипта.

    Если бы команда выводила свой файл на stdout , его можно было бы захватить непосредственно из сеанса ssh с serverB на root @ serverA без необходимости передавать файл после завершения сценария . Ваша учетная запись на serverB не будет иметь произвольного доступа к root @ serverA.

    Пример необходимой записи для root @ serverA в его файле ~ root / .ssh / authorized_keys для выполнения команды bake может выглядеть примерно так:

     ssh-rsa AAAAB3Nza ... Fr9FvN me @ roaima, command = "/ usr / local / bin / bake", no-agent-forwarding, no-port-forwarding, no-X11-forwarding 
     
  3. Подключитесь с serverB к serverA и используйте sudo для запуска сценария. Вы можете настроить sudo , чтобы разрешить вашей единственной учетной записи запускать сценарий от имени пользователя root, но без запроса пароля.

    Эта запись в / etc / sudoers позволяет пользователю «roaima» запускать указанный сценарий с аргументами или без них от имени пользователя root с помощью такой команды, как sudo / usr / local / bin / bake --fruit = apple, blackberry --type = pie

     roaima ALL = NOPASSWD: / usr / local / bin / bake 
     
  4. Более сложные вещи с триггерами, например, подключение к определенному TCP-порту на serverA и запустив ваш скрипт, запустите его как root.

    Это означает, что любой, у кого есть доступ к этому TCP-порту на serverA, может запустить ваш скрипт, поэтому вам нужно учитывать проблемы DDOS и предотвращать одновременный запуск нескольких экземпляров скрипта.Однако это устранит необходимость иметь какой-либо интерактивный корневой доступ на serverA - даже через sudo .

2
27.01.2020, 23:27

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

1
27.01.2020, 23:27

Теги

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