#!/bin/bash # vaultwarden搜索测试脚本 # 用于验证通过item名称查找凭证的概念 set -e echo "🔍 vaultwarden凭证搜索测试" echo "================================" # 检查Bitwarden CLI是否安装 if ! command -v bw &> /dev/null; then echo "❌ Bitwarden CLI (bw) 未安装" echo "安装命令: brew install bitwarden-cli" exit 1 fi # 检查jq是否安装(用于JSON解析) if ! command -v jq &> /dev/null; then echo "❌ jq 未安装" echo "安装命令: brew install jq" exit 1 fi # 显示当前配置 echo "📊 当前Bitwarden CLI配置:" bw status echo "" echo "📝 测试流程说明:" echo "1. 配置连接到vaultwarden服务器" echo "2. 使用API密钥登录" echo "3. 搜索指定名称的项目" echo "4. 提取用户名和密码" echo "" # 配置vaultwarden服务器(如果未配置) CURRENT_SERVER=$(bw config server | grep -o 'http://[^ ]*' || echo "") if [ -z "$CURRENT_SERVER" ] || [ "$CURRENT_SERVER" != "http://localhost:8080" ]; then echo "⚙️ 配置连接到vaultwarden服务器..." bw config server http://localhost:8080 echo "✅ 服务器配置完成: http://localhost:8080" fi echo "" echo "🔐 登录说明:" echo "需要以下环境变量:" echo " export BW_CLIENTID='你的客户端ID'" echo " export BW_CLIENTSECRET='你的客户端密钥'" echo "" echo "然后运行: bw login --apikey" echo "" # 检查是否已登录 SESSION=$(bw status | jq -r '.session') if [ -n "$SESSION" ] && [ "$SESSION" != "null" ]; then echo "✅ 已登录,会话有效" export BW_SESSION="$SESSION" else echo "⚠️ 未登录或会话无效" echo "请先设置环境变量并登录" exit 1 fi # 测试搜索功能 echo "" echo "🧪 测试搜索功能..." echo "" # 函数:搜索项目并显示凭证 search_vaultwarden_item() { local item_name="$1" echo "搜索项目: $item_name" echo "--------------------------------" # 搜索项目 ITEM_JSON=$(bw list items --search "$item_name" 2>/dev/null || echo "[]") if [ "$ITEM_JSON" = "[]" ] || [ -z "$ITEM_JSON" ]; then echo "❌ 未找到项目: $item_name" return 1 fi # 解析第一个项目 ITEM_COUNT=$(echo "$ITEM_JSON" | jq '. | length') echo "找到 $ITEM_COUNT 个匹配项目" # 显示每个项目的基本信息 for i in $(seq 0 $((ITEM_COUNT - 1))); do ITEM=$(echo "$ITEM_JSON" | jq ".[$i]") ITEM_ID=$(echo "$ITEM" | jq -r '.id') ITEM_NAME=$(echo "$ITEM" | jq -r '.name') ITEM_TYPE=$(echo "$ITEM" | jq -r '.type') echo "" echo "📋 项目 $((i+1)):" echo " ID: $ITEM_ID" echo " 名称: $ITEM_NAME" echo " 类型: $ITEM_TYPE" # 如果是登录类型,显示用户名 if [ "$ITEM_TYPE" = "1" ]; then USERNAME=$(echo "$ITEM" | jq -r '.login.username // "未设置"') echo " 用户名: $USERNAME" # 注意:不直接显示密码,只显示是否有密码 HAS_PASSWORD=$(echo "$ITEM" | jq -r '.login.password != null') if [ "$HAS_PASSWORD" = "true" ]; then echo " 密码: [已设置]" else echo " 密码: [未设置]" fi fi # 显示备注(如果有) NOTES=$(echo "$ITEM" | jq -r '.notes // ""') if [ -n "$NOTES" ] && [ "$NOTES" != "null" ]; then echo " 备注: $NOTES" fi done echo "" echo "✅ 搜索完成" return 0 } # 如果提供了参数,测试搜索 if [ $# -ge 1 ]; then search_vaultwarden_item "$1" else echo "📌 使用方法:" echo " $0 <项目名称>" echo "" echo "示例:" echo " $0 n8n" echo " $0 mysql" echo " $0 ssh" fi echo "" echo "================================" echo "测试脚本完成" echo "" echo "⚠️ 安全提醒:" echo "1. 此脚本不在磁盘上存储任何密码" echo "2. 密码只在内存中临时存在" echo "3. 使用后请清理环境变量:" echo " unset BW_SESSION" echo " unset BW_CLIENTID" echo " unset BW_CLIENTSECRET"