Выполняется простым скриптом ниже
команда
for i in `cat file2`; do awk -v i="$i" -F ";" '$1=="ID="i{print $5}' file1| awk -F "=" '{print $NF}'; done
выход
LOC108565285
LOC108569527
Когда вы используете sudo systemctl
, вы планируете задание systemd как root
. root
всегда разрешено планировать задания systemd, поэтому это всегда будет работать.
Однако, когда вы запускаете systemctl
без sudo, вы планируете задание systemd
как текущий пользователь. systemd
спрашивает polkit
, можно ли вам это сделать. polkit
проверит конфигурацию своей политики и:
root
:(Пользователю не разрешено запускать задание, поэтому он запросит у вас пароль администратора ). Как polkit
, так и sudo
делают все возможное, чтобы предотвратить аутентификацию скриптов. Это причина, по которой нет опции --password
для sudo
и почему sudo
не принимает echo 'password' | sudo ls
. polkit
аналогичен, но более сложен и труден для понимания. Это неприятие проверки подлинности с помощью сценариев связано с тем, что привилегированные задания должны выполняться явно пользователями или другими привилегированными процессами. Обычно мы не хотим, чтобы непривилегированный процесс/скрипт выполнял привилегированную работу.
Когда polkit
попытается аутентифицировать вас, он сделает это через polkit-agent
. Если вы когда-либо видели, как окно аутентификации занимает ваш экран, это часто polkit-agent
, поставляемое с вашей средой рабочего стола. Но для подключения к соответствующему polkit-agent
ему необходимо немного знать о ваших $DISPLAY
и $XAUTHORITY
, чтобы приглашение отображалось в правильном сеансе.
В вашем случае вы ssh
попали в машину, поэтому у вас нет дисплея. В этом случае он «возвращается» к текстовому агенту, но, похоже, есть проблема в том, что либо ваш агент аутентифицирует вас как пользователя, а не как root, либо он аутентифицирует вас, но позже понимает, что у вас нет разрешение на планирование systemd
заданий.Сообщение securetty
предполагает, что на самом деле у него нет чистой среды для вашей аутентификации (, например. другой процесс может перехватить ваш стандартный ввод или не сможет подтвердить, что вы реальный человек, а не сценарий ).
Независимо от причины, основной причиной является тот факт, что вы ssh
подключились к этой машине и не имеете разрешения планировать задания systemd.
У вас есть два варианта:
Используйте sudo systemctl
. Это самое простое решение, но если по какой-то причине это неприемлемо (, т. е. вы пишете сценарии заданий systemd
и не хотите добавлять :NOPASSWD
к /etc/sudoers
), тогда упомяните об этом.
Создайте правило polkit
, позволяющее запускать задания systemd
от имени пользователя. Есть хороший ответ, который описывает, как это сделать здесь .