一次切换多个用户

一次切换多个用户

我的 bash 脚本中有一个需求,用户必须在多个主机上执行一个脚本。假设user1 , user2, & user3。用户 1 有权切换到用户 2,但不能切换到用户 3,并且脚本必须通过用户 3 执行。要在一台主机上执行 - 可能如下 - 假设我是用户 1,并将执行以下命令。

sudo -i -u user2
sudo -u user3 script <hostname>

但无法通过 for 循环在多个主机上执行,如下所示

#!/bin/bash
sudo -i -u user2;
for i in `cat /tmp/hostlist`;do
  echo $i
  sudo -u user3 script.sh $i
  echo "----------------"
done

答案1

您需要将第二个 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
----------------

相关内容