У меня есть потребность в моем сценарии удара, где пользователь должен выполнить один сценарий на нескольких хостах. Позволяет говорят user1 , user2, & user3
. User1 имеют доступ для переключения на user2, но не user3, и сценарий должен быть, выполняются через user3. Для выполнения в одном хосте - его возможное как ниже - позволяет, я - user1 и выполнюсь ниже команд.
sudo -i -u user2
sudo -u user3 script <hostname>
Но не мог выполниться на нескольких хостах через для цикла как ниже
#!/bin/bash
sudo -i -u user2;
for i in `cat /tmp/hostlist`;do
echo $i
sudo -u user3 script.sh $i
echo "----------------"
done
Необходимо выполнить второй sudo как аргумент первому sudo. Это будет быть похожим на это:
#!/usr/bin/env bash
sudo -i -u user2 /bin/bash <<EOF
#commands here will be executed as user=user2
while IFS='' read -r i || [[ -n "$i" ]]; do
echo "$i"
sudo -u user3 script.sh "$i"
echo "----------------"
done </tmp/hostlist
EOF
Тестирование:
$ echo 111 >/tmp/hostlist
$ echo 222 >>/tmp/hostlist
$ echo 333 >>/tmp/hostlist
$ ./loophosts
111
----------------
222
----------------
333
----------------