想要在多个服务器中找到sudo su的状态

时间:2016-02-22 13:30:05

标签: bash ssh expect su sudoers

我有一个bash脚本,hostlist文件和一个expect脚本: 下面是bash脚本,用于从hostlist文件获取输入,并为多个服务器保持循环ssh。

for x in $(cat hostlist); do
./sudoscript.exp  $x
done

下面是我想要调用并收集sudo su -命令输出的expect cum bash脚本。我只需要在文件中将输出作为'0或非零值,以便成功运行/执行'sudo su - '。我只需要模拟执行并检查命令是否成功运行,而不是通过sudo su -实际将用户更改为admin。

#!/bin/bash
#!/usr/bin/expect
spawn ssh [lindex $argv 0]
expect "$"
send "sudo su -\r" exit ; echo $server:$? >> output

有人可以建议您完成上面的脚本。

1 个答案:

答案 0 :(得分:0)

你究竟想做什么?

也许您正在尝试查看是否可以在没有密码的情况下成为root用户?如果是这种情况,请尝试:

for x in $(cat hostlist); do
  echo $x
  ssh $x sudo -l |egrep -w 'NOPASSWD:.*(ALL|/su)'
  echo
done

sudo -l将列出您可以运行的内容。它需要您的密码,除非您有一个或多个不需要密码的命令(ssh在使用命令调用且没有-t标志时不会以交互方式运行。这是故意的,因为我们不知道我想要那个)。

egrep命令将结果限制为没有密码以及ALL命令或su本身可以完成的操作。 (注意,如果它位于alias中,则无法找到su。)