logo NodeSeekbeta

Komari探针agent状态查询命令

刚刚把内网agent链接内网docker主控的链接地址从默认公网域名改成了内网地址
让AI写了一个agent命令方便观察agent状态,分享下。。。

查询命令:

sh -c '
echo "==================== Komari Agent 连接体检 ===================="
echo ""

if [ -f /etc/openwrt_release ]; then
  OS="OpenWrt"
  PROCS=$(ps w 2>/dev/null | grep -i "komari/agent" | grep -v grep)
  PID=$(echo "$PROCS" | awk "{print \$1}" | head -1)
  [ -n "$PID" ] && CMDLINE=$(tr "\0" " " < /proc/$PID/cmdline 2>/dev/null) || CMDLINE=""
  CONN=$(netstat -tn 2>/dev/null | grep -E "ESTAB|SYN_SENT")
  RAWLOG=$(logread 2>/dev/null)
else
  OS="Debian"
  PROCS=$(ps aux 2>/dev/null | grep -i "komari/agent" | grep -v grep)
  PID=$(echo "$PROCS" | awk "{print \$2}" | head -1)
  [ -n "$PID" ] && CMDLINE=$(tr "\0" " " < /proc/$PID/cmdline 2>/dev/null) || CMDLINE=""
  CONN=$(ss -tn 2>/dev/null | grep -E "ESTAB|SYN_SENT")
  RAWLOG=$(journalctl -u komari-agent --no-pager 2>/dev/null)
fi

SEP="────────────────────────────────────────────────"
ESC=$(printf "\033")
R="${ESC}[0m"
RED="${ESC}[0;31m"
GREEN="${ESC}[1;32m"
YELLOW="${ESC}[1;33m"
CYAN="${ESC}[1;36m"

echo "【系统类型】${CYAN}$OS${R}"
echo "$SEP"

AGENT_V4=$(echo "$RAWLOG" | grep "Get IPV4 Success" | tail -1 | sed -E "s/.*Get IPV4 Success: *([^ ]+).*/\1/")
AGENT_V6=$(echo "$RAWLOG" | grep "Get IPV6 Success" | tail -1 | sed -E "s/.*Get IPV6 Success: *([^ ]+).*/\1/")

echo "【Agent 上报 IP】"
[ -n "$AGENT_V4" ] && echo "  IPv4: ${GREEN}$AGENT_V4${R}" || echo "  IPv4: ${RED}未上报${R}"
[ -n "$AGENT_V6" ] && echo "  IPv6: ${GREEN}$AGENT_V6${R}" || echo "  IPv6: ${RED}未上报${R}"
echo "$SEP"

echo "【Agent 进程】"
if [ -n "$PID" ]; then
  echo "  ${GREEN}✅ 运行中${R} (PID: ${YELLOW}$PID${R})"
  echo "     完整命令行:"
  echo "$CMDLINE" | sed "s/^/       /"
else
  echo "  ${RED}❌ 未运行${R}"
fi
echo "$SEP"

echo "【安全与更新】"
if [ -n "$CMDLINE" ]; then
  echo "$CMDLINE" | grep -q -- "--disable-web-ssh"      && echo "  🔒 SSH 远程控制: ${GREEN}✅ 已禁用(安全)${R}"      || echo "  🔓 SSH 远程控制: ${YELLOW}⚠️  未禁用(存在安全风险)${R}"
  echo "$CMDLINE" | grep -q -- "--disable-auto-update"  && echo "  🔒 自动更新: ${GREEN}✅ 已禁用(版本可控)${R}"      || echo "  🔄 自动更新: ${YELLOW}⚠️  未禁用(可能自动升级)${R}"

  MONTH_ROTATE=$(echo "$CMDLINE" | grep -oE "\-\-month-rotate [^ ]+" | awk "{print \$2}")
  if [ -n "$MONTH_ROTATE" ]; then
    echo "  📅 流量重置日: ${YELLOW}★ 每月 $MONTH_ROTATE 号 ★${R}"
  else
    echo "  📅 流量重置日: 未设置"
  fi
else
  echo "  ❓ Agent 未运行,无法判断"
fi
echo "$SEP"

ENDPOINT=""
if [ -n "$CMDLINE" ]; then
  ENDPOINT=$(echo "$CMDLINE" | grep -oE "\-e [^ ]+" | awk "{print \$2}")
  [ -z "$ENDPOINT" ] && ENDPOINT=$(echo "$CMDLINE" | grep -oE "\-\-endpoint [^ ]+" | awk "{print \$2}")
fi

echo "【配置的主控地址】"
if [ -n "$ENDPOINT" ]; then
  echo "  ${CYAN}$ENDPOINT${R}"
  HOST=$(echo "$ENDPOINT" | sed -E "s|^https?://||; s|/.*||; s|:.*||")
  PORT=$(echo "$ENDPOINT" | grep -oE ":[0-9]+" | tr -d ":")
  [ -z "$PORT" ] && PORT=$(echo "$ENDPOINT" | grep -q "^https" && echo 443 || echo 80)
  echo "  解析:主机=${CYAN}$HOST${R}  端口=${YELLOW}$PORT${R}"
else
  echo "  ❓ 无法从命令行提取 endpoint"
fi
echo "$SEP"

echo "【主控连接】"
if [ -n "$HOST" ] && [ -n "$PORT" ]; then
  HOST_IPS=""
  if echo "$HOST" | grep -qE "^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\$"; then
    HOST_IPS="$HOST"
  else
    HOST_IPS=$(nslookup "$HOST" 2>/dev/null | awk "/^Address: / {print \$2}" | grep -v ":" | head -5)
    [ -z "$HOST_IPS" ] && HOST_IPS=$(getent hosts "$HOST" 2>/dev/null | awk "{print \$1}" | head -5)
  fi

  FOUND=""
  for ip in $HOST_IPS; do
    MATCH=$(echo "$CONN" | grep -E "$ip:$PORT")
    [ -n "$MATCH" ] && { FOUND="$MATCH"; break; }
  done
  [ -z "$FOUND" ] && FOUND=$(echo "$CONN" | grep -E "$HOST:$PORT")

  if [ -n "$FOUND" ]; then
    echo "  ${GREEN}✅ 已连接${R}"
    echo "$FOUND" | while IFS= read -r l; do echo "     ${GREEN}$l${R}"; done
  else
    MATCH=$(echo "$CONN" | grep ":$PORT " | head -3)
    if [ -n "$MATCH" ]; then
      echo "  ${YELLOW}⚠️  发现到端口 $PORT 的连接(可能已连接,请人工确认)${R}"
      echo "$MATCH" | while IFS= read -r l; do echo "     ${YELLOW}$l${R}"; done
    else
      echo "  ${RED}❌ 未发现到 $HOST:$PORT 的 ESTABLISHED 连接${R}"
    fi
  fi
else
  echo "  ❓ 无法判断(未解析到 endpoint)"
fi
echo "$SEP"

echo "【连接类型】"
if [ -n "$ENDPOINT" ]; then
  if echo "$ENDPOINT" | grep -q "192.168.2.100:25778"; then
    echo "  ${GREEN}✅ 内网直连模式(推荐,不受公网波动影响)${R}"
  elif echo "$ENDPOINT" | grep -qE "okokok.eu.org|https://"; then
    echo "  ${YELLOW}⚠️  公网 Cloudflare 模式(受国际线路质量影响)${R}"
  else
    echo "  ❓ 其他模式:$ENDPOINT"
  fi
else
  echo "  ❓ 无法判断"
fi
echo "$SEP"

echo "【超时/重连统计】"
if [ "$OS" = "OpenWrt" ]; then
  n=$(echo "$RAWLOG" | grep -E "komari|agent\[" | grep -cE "TLS handshake timeout|i/o timeout|Retrying websocket|context deadline exceeded")
  printf "  OpenWrt 日志中的超时次数:%3s 次\n" "$n"
else
  for m in 10 30 60; do
    n=$(journalctl -u komari-agent --since "${m} min ago" --no-pager 2>/dev/null | grep -cE "TLS handshake timeout|i/o timeout|Retrying websocket|context deadline exceeded")
    if   [ "$n" -eq 0 ]; then tag="${GREEN}✅ 非常稳定${R}"
    elif [ "$n" -le 2 ]; then tag="${YELLOW}🟡 基本稳定${R}"
    elif [ "$n" -le 10 ]; then tag="${YELLOW}⚠️ 有波动${R}"
    else tag="${RED}❌ 频繁掉线${R}"
    fi
    printf "  近 %2s 分钟:%3s 次  %s\n" "$m" "$n" "$tag"
  done
fi
echo "$SEP"

echo "【最近日志】"
if [ "$OS" = "OpenWrt" ]; then
  echo "$RAWLOG" | grep -E "komari|agent\[" | tail -5 | sed "s/^/  /" || echo "  (无日志)"
else
  echo "$RAWLOG" | tail -5 | sed "s/^/  /" || echo "  (无日志)"
fi
echo ""
echo "================================================================"
'

显示效果:

==================== Komari Agent 连接体检 ====================

【系统类型】Debian
────────────────────────────────────────────────
【Agent 上报 IP】
  IPv4: 203.0.113.1
  IPv6: 2001:db8::1
────────────────────────────────────────────────
【Agent 进程】
  ✅ 运行中 (PID: 15062)
     完整命令行:
       /opt/komari/agent -e http://10.0.0.100:25778 -t YOUR_TOKEN --disable-web-ssh --disable-auto-update
────────────────────────────────────────────────
【安全与更新】
  🔒 SSH 远程控制: ✅ 已禁用(安全)
  🔒 自动更新: ✅ 已禁用(版本可控)
  📅 流量重置日: 未设置
────────────────────────────────────────────────
【配置的主控地址】
  http://10.0.0.100:25778
  解析:主机=10.0.0.100  端口=25778
────────────────────────────────────────────────
【主控连接】
  ✅ 已连接
     ESTAB 0      0                                  10.0.0.100:42676               10.0.0.100:25778
     ESTAB 0      0                                  10.0.0.100:57860               10.0.0.100:25778
     ESTAB 0      0                                  10.0.0.100:47168               10.0.0.100:25778
     ESTAB 0      0                                  10.0.0.100:50674               10.0.0.100:25778
     ESTAB 0      0                                  10.0.0.100:50690               10.0.0.100:25778
     ESTAB 0      0                                  10.0.0.100:41530               10.0.0.100:25778
     ESTAB 0      0                                  10.0.0.100:41972               10.0.0.100:25778
     ESTAB 0      0                                  10.0.0.100:39732               10.0.0.100:25778
     ESTAB 0      0                                  10.0.0.100:59620               10.0.0.100:25778
────────────────────────────────────────────────
【连接类型】
  ✅ 内网直连模式(推荐,不受公网波动影响)
────────────────────────────────────────────────
【超时/重连统计】
  近 10 分钟:  0 次  ✅ 非常稳定
  近 30 分钟:  0 次  ✅ 非常稳定
  近 60 分钟:  0 次  ✅ 非常稳定
────────────────────────────────────────────────
【最近日志】
  Sep 25 21:17:52 your-host agent[15062]: 2026/09/25 21:17:52 Ping task 13 failed: no packets received
  Sep 25 21:20:14 your-host agent[15062]: 2026/09/25 21:20:14 Get IPV4 Success: 203.0.113.1
  Sep 25 21:20:16 your-host agent[15062]: 2026/09/25 21:20:16 Get IPV6 Success:  2001:db8::1
  Sep 25 21:25:14 your-host agent[15062]: 2026/09/25 21:25:14 Get IPV4 Success: 203.0.113.1
  Sep 25 21:25:17 your-host agent[15062]: 2026/09/25 21:25:17 Get IPV6 Success:  2001:db8::1

================================================================

你好啊,陌生人!

我的朋友,看起来你是新来的,如果想参与到讨论中,点击下面的按钮!

📈用户数目📈

目前论坛共有71819位seeker

🎉欢迎新用户🎉