VPS 部署教程:在 VPS 构建您的专属云端助理 (Safe Cloud Assistant)

ClawdBot 这两天很火,本文为大家介绍一下如何在 VPS 部署一个专属云端助理,核心功能:

  1. VPS 状态监控: 随时查看 Vultr 服务器的 CPU、内存、磁盘使用率(防止死机)。
  2. 网络连通性测试: 检查某个网站是否宕机(使用合规的 HTTP 请求)。
  3. IP 查询: 快速获取服务器当前公网 IP。
  4. 安全机制: 仅允许您个人的 Telegram ID 操作,拒绝陌生人指令。

环境要求: Vultr VPS (Ubuntu 20.04/22.04/24.04)

🟢 第一阶段:环境准备

SSH 登录服务器,安装 Python 环境及必要的系统监控库。

# 1. 更新系统
sudo apt update && sudo apt upgrade -y

# 2. 安装 Python3 和 venv
sudo apt install python3 python3-pip python3-venv -y

# 3. 创建项目目录 (我们就叫它 my_assistant)
mkdir -p ~/my_assistant
cd ~/my_assistant

# 4. 创建虚拟环境
python3 -m venv venv
source venv/bin/activate

# 5. 安装依赖库
# pyTelegramBotAPI: 机器人框架
# psutil: 用于获取系统状态 (CPU/内存)
# requests: 用于安全的网络请求
pip install pyTelegramBotAPI psutil requests

🔵 第二阶段:编写助理代码

这是核心步骤。我们将编写一个全新的 bot.py,它没有任何黑客功能,全是实用的运维和助理功能。

nano bot.py

复制并粘贴以下代码(请修改配置区):

import telebot
import psutil
import requests
import time
import platform
from datetime import datetime

# ================= 配置区域 =================
# 1. 填入您的 Bot Token
TOKEN = '您的_BOT_TOKEN_粘贴在这里'

# 2. 填入您的 Telegram User ID (数字ID)
# 只有这个名单里的 ID 才能指挥机器人,其他人会被忽略
ADMIN_ID = [123456789] 

# ===========================================

bot = telebot.TeleBot(TOKEN)

# 鉴权装饰器:确保只有您可以操作
def admin_only(func):
    def wrapper(message):
        if message.from_user.id not in ADMIN_ID:
            bot.reply_to(message, "⛔️ 权限不足:您不是该机器人的管理员。")
            return
        return func(message)
    return wrapper

# 1. /start - 欢迎菜单
@bot.message_handler(commands=['start', 'help'])
@admin_only
def send_welcome(message):
    menu = (
        "🤖 **您的云端私人助理已上线**\n\n"
        "可用指令:\n"
        "📊 /status - 查看 VPS 运行状态\n"
        "🌍 /ip - 查看当前服务器 IP\n"
        "🔗 /check <url> - 检查网站是否连通\n"
        "🆔 /id - 获取您的 User ID"
    )
    bot.reply_to(message, menu, parse_mode='Markdown')

# 2. /status - 系统监控 (最实用的功能)
@bot.message_handler(commands=['status'])
@admin_only
def system_status(message):
    # CPU
    cpu_usage = psutil.cpu_percent(interval=1)
    # 内存
    mem = psutil.virtual_memory()
    mem_used = round(mem.used / 1024 / 1024, 1)
    mem_total = round(mem.total / 1024 / 1024, 1)
    mem_percent = mem.percent
    # 磁盘
    disk = psutil.disk_usage('/')
    disk_used = round(disk.used / 1024 / 1024 / 1024, 1)
    disk_total = round(disk.total / 1024 / 1024 / 1024, 1)
    
    # 启动时间
    boot_time = datetime.fromtimestamp(psutil.boot_time()).strftime("%Y-%m-%d %H:%M:%S")

    reply = (
        f"📊 **Vultr VPS 状态报告**\n"
        f"------------------------\n"
        f"💻 **系统:** {platform.system()} {platform.release()}\n"
        f"🧠 **CPU使用:** {cpu_usage}%\n"
        f"📝 **内存:** {mem_used}MB / {mem_total}MB ({mem_percent}%)\n"
        f"💾 **硬盘:** {disk_used}GB / {disk_total}GB ({disk.percent}%)\n"
        f"⏳ **启动时间:** {boot_time}"
    )
    bot.reply_to(message, reply, parse_mode='Markdown')

# 3. /ip - 查看 IP
@bot.message_handler(commands=['ip'])
@admin_only
def get_ip(message):
    try:
        ip = requests.get('https://api.ipify.org').text
        bot.reply_to(message, f"🌍 当前公网 IP: `{ip}`", parse_mode='Markdown')
    except:
        bot.reply_to(message, "无法获取 IP")

# 4. /check - 简单的网站连通性检查
@bot.message_handler(commands=['check'])
@admin_only
def check_web(message):
    try:
        url = message.text.split()[1]
        if not url.startswith('http'):
            url = 'http://' + url
        
        start = time.time()
        response = requests.get(url, timeout=5)
        latency = round((time.time() - start) * 1000, 2)
        
        status_icon = "✅" if response.status_code == 200 else "⚠️"
        bot.reply_to(message, f"{status_icon} **状态码:** {response.status_code}\n⏱ **延迟:** {latency}ms", parse_mode='Markdown')
    except IndexError:
        bot.reply_to(message, "用法: `/check google.com`", parse_mode='Markdown')
    except Exception as e:
        bot.reply_to(message, f"❌ 访问失败: {str(e)}")

# 5. /id - 方便获取自己的 ID
@bot.message_handler(commands=['id'])
def get_id(message):
    bot.reply_to(message, f"您的 User ID 是: `{message.from_user.id}`", parse_mode='Markdown')

# 启动轮询
print("助理机器人已启动...")
bot.infinity_polling()

Ctrl+O 保存,Ctrl+X 退出。

🟡 第三阶段:试运行

在终端中测试代码是否报错:

python3 bot.py

此时,掏出您的手机,给机器人发送 /start

  • 如果您收到了菜单回复 -> 成功!

  • 如果您没有任何反应或报错 -> 请检查 Token 是否正确,或者是否安装了依赖。

测试成功后,按 Ctrl+C 停止运行。

🔴 第四阶段:配置全自动后台运行 (Systemd)

为了让这个助理像一个真正的服务一样,7×24 小时在线(即使服务器重启),我们需要配置 Systemd。

  1. 创建服务文件:

    sudo nano /etc/systemd/system/my_assistant.service
    
  2. 粘贴配置(请修改 User 和路径):

    假设您的用户名是 root,路径在 /root/my_assistant

    [Unit]
    Description=My Personal Cloud Assistant
    After=network.target
    
    [Service]
    Type=simple
    User=root
    WorkingDirectory=/root/my_assistant
    # 使用虚拟环境中的 python
    ExecStart=/root/my_assistant/venv/bin/python3 bot.py
    Restart=always
    RestartSec=10
    
    [Install]
    WantedBy=multi-user.target
    
  3. 启动服务:

    sudo systemctl daemon-reload
    sudo systemctl enable my_assistant
    sudo systemctl start my_assistant
    

✅ 总结

现在,您拥有了一个完全合规的个人助理:

  1. 它不包含任何攻击代码:没有 SQLMap,没有漏洞扫描。
  2. 它完全私有:代码中加入了 admin_only 鉴权,只有您的 ID 能控制它。
  3. 它很有用
    1. 场景一: 觉得网站访问慢?发送 /status 看看 VPS 是不是 CPU 爆了。
    2. 场景二: 出门在外想确认博客挂没挂?发送 /check myblog.com

    3. 场景三: 需要给服务器开白名单?发送 /ip 复制当前的公网 IP。

这就把“ClawdBot”的概念成功转化为了一个安全、合规且实用的“Cloud Assistant”。祝您使用愉快!

赞(0)
未经允许不得转载:主机百科 » VPS 部署教程:在 VPS 构建您的专属云端助理 (Safe Cloud Assistant)