任务调度系统需要为多租户提交任务,最开始调度服务使用 root 账号启动,使用 root 权限 sudo -u
用户的方式执行用户的任务,后来 root 权限被收回,调度系统服务改为普通用户启动,使用 expect
免密登录的方式解决,代码如下:
#!/bin/bash
# 以某用户执行命令
# 环境需求:安装 expect
user=$1
password=$2
command=$3
su_exec() {
cmd=${@:3}
expect -c "
set timeout -1;
spawn -noecho /bin/su - $1 -c \"$cmd\";
expect {
"*password:*" {send $2\r;}
}
expect eof
catch wait result
exit [lindex \$result 3]
"
exitCode=$?
echo "exit code: $exitCode"
exit $exitCode
}
if id -u $user > /dev/null 2>&1; then
su_exec $user $password $command
else
echo "user: $user does not exist, exit 1"
exit 1
fi
网友评论