問題のサーバーに対するrootアクセス権を持つユーザーを表示するために/ etc / sudoersファイルを読み取るためにansibleを使用しています。
これは .sh ファイルです。
#!/bin/bash
username=`sudo cat /etc/sudoers | grep "NOPASSWD: ALL" | grep -v ^#`
hostname=`sudo hostname`
echo "xyz | $username | $hostname"
これは出力を生成する別の.shファイルです。このファイルを最初に実行します。
#!/bin/bash
/bin/ansible-playbook /etc/ansible/scripts/sudoerscheck.yaml >|
/root/script/sudoers.dat
/bin/cat /root/script/sudoers.dat | grep xyz | awk -F '|' '{ print $2":"$3
}' | awk -F '\"' '{ print $1 }' >| /root/script/sudoers.txt
以下のAnsible出力。
ok: [test1] => {
"changed": false,
"shell_result.stdout_lines": [
"xyz | oracle ALL=(ALL) NOPASSWD: ALL",
"cuser ALL=(ALL) NOPASSWD: ALL",
"dogfish ALL=(ALL) NOPASSWD: ALL | test1"
]
}
ok: [test2] => {
"changed": false,
"shell_result.stdout_lines": [
"xyz | | test2"
]
}
ok: [test3] => {
"changed": false,
"shell_result.stdout_lines": [
"xyz | ADMINS \tALL=(ALL)\tNOPASSWD: ALL",
"oracle ALL=(ALL) NOPASSWD: ALL | test3
以下の出力を取得する方法を教えてください。そして、ユーザー名は変更されることがあります
test1 oracle cuser dogfish
test2 NULL
test3 oracle ADMINS
ベストアンサー1
これはうまくいきます。
#!/bin/bash
OUTPUT=$(cat /etc/passwd | grep -v nologin | grep -v root | awk -F: '{ print
$1 }')
block1=`hostname`
while read -r line
do
if [[ `sudo -l -U $line | grep NOPASSWD` ]];then
echo $block1 $line
else
echo $block1 $line
fi
done <<< "$OUTPUT"