0

我是编程和脚本的新手,所以如果这很明显,我很抱歉。我曾尝试在其他地方获得帮助,但似乎无法弄清楚。我正在创建一个 bash 脚本,我让 cron 每 X 分钟执行一次,以处理名为“ZoneMinder”的 NVR 安全软件包的运行状态更改。我目前有一个 cron 作业,通过我编写的一个小脚本使用名为 sunwait 的二进制文件。Sunwait 会等到日落或日出,然后执行命令,所以当日落时,我让 sunwait 将 Zoneminder 从“DAY”状态更改为“NIGHT”状态,反之亦然。Cron 作业是在凌晨 1 点和下午 1 点,因此有一个 3-5 小时以上的窗口,系统可以重新启动以进行备份或其他操作,然后运行状态不会改变。这不好,因为我对 DAY/NIGHT 有不同的“区域”和敏感性。

为了登录到 Zoneminder API 以检查当前运行状态。它指示我使用 curl 设置有状态连接并接收身份验证令牌。

curl -XPOST -c cookies.txt -d "user=yourusername&pass=yourpassword&stateful=1" https://yourserver/zm/api/host/login.json

我已将此命令行切换为 bash 脚本变量,但它不起作用;它创建 cookies.txt 但不输出令牌。相反,它会吐出 401 Unauthorized 错误。如果我使用我从脚本中回显的 curl 命令并在终端中执行它,它会返回带有令牌的 JSON 数据并创建 cookies.txt,这完全符合我的需要。

这是卷曲部分的代码片段。

USER=<REDACTED>
PASSWD=<REDACTED>
CURL='/usr/bin/curl'
TOKE=/tmp/cookies.txt
CURL_ARGS="-XPOST -c $TOKE -d \"user=$USER_NAME&pass=$PASSWD&stateful=1\" -sS"
CURL_URL="https://<REDACTED>/zm/api/host/login.json"
get_token_file="$($CURL $CURL_ARGS $CURL_URL)"
cat $TOKE
echo "DEBUG - get_token_file  = $get_token_file"
echo "curl command= $CURL $CURL_ARGS $CURL_URL"

这是该片段的输出。

cat $TOKE --------->    
    # Netscape HTTP Cookie File
    # https://curl.haxx.se/docs/http-cookies.html
    # This file was generated by libcurl! Edit at your own risk.
    
    #HttpOnly_<REDACTED>    FALSE   /   FALSE   1613342747  ZMSESSID    <REDACTED>

echo "DEBUG - get_token_file = $get_token_file" ------->
    DEBUG - get_token_file  = {"success":false,"data":{"name":"Not Authenticated","message":"Not Authenticated","url":"\/zm\/api\/host\/login.json","exception":{"class":"UnauthorizedException","code":401,"message":"Not Authenticated"}}}

echo "curl command= $CURL $CURL_ARGS $CURL_URL" ------>
    curl command= /usr/bin/curl -XPOST -c /tmp/cookies.txt -d "user=<REDACTED>&pass=<REDACTED>&stateful=1" -sS https://<REDACTED>/zm/api/host/login.json

如果我复制并粘贴 curl 命令/usr/bin/curl -XPOST -c /tmp/cookies.txt -d "user=<REDACTED>&pass=<REDACTED>&stateful=1" -sS https://<REDACTED>/zm/api/host/login.json,它会按预期工作。

这是复制和粘贴 echod out curl 命令的输出。为什么这个输出不是 $get_token_file 变量?!

{"access_token":"<REDACTED>","access_token_expires":7200,"refresh_token":"<REDACTED>","refresh_token_expires":86400,"credentials":"auth=<REDACTED>","append_password":0,"version":"1.35.16","apiversion":"2.0"}

我在这里想念什么?

感谢您的任何建议或见解!

4

0 回答 0