任务调度系统 - 不用 Root 也可以多租户提交

任务调度系统需要为多租户提交任务,最开始调度服务使用 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

你可能感兴趣的:(任务调度系统 - 不用 Root 也可以多租户提交)