4506 字
16 分钟阅读
AstrBot保守配置Agent权限教程

1. VPS创建专用管理用户

SSH进入你的 VPS:

sudo adduser astrbot

设置密码时可以直接设置,也可以后面只用密钥登录。

确认:

id astrbot

2. 创建SSH密钥(在AstrBot容器里)

进入 AstrBot:

docker exec -it astrbot bash

生成密钥:

ssh-keygen -t ed25519

一路回车。

生成:

/root/.ssh/id_ed25519
/root/.ssh/id_ed25519.pub

查看公钥:

cat /root/.ssh/id_ed25519.pub

复制内容。


3. 把公钥放到 VPS

退出 AstrBot:

exit

在 VPS 执行:

sudo mkdir -p /home/astrbot/.ssh

编辑:

sudo nano /home/astrbot/.ssh/authorized_keys

粘贴刚才的公钥后给权限:

sudo chmod 700 /home/astrbot/.ssh
sudo chmod 600 /home/astrbot/.ssh/authorized_keys

sudo chown -R astrbot:astrbot /home/astrbot/.ssh

4. 测试SSH

1. ssh连接宿主机

回到 AstrBot 容器:

docker exec -it astrbot bash

AstrBot容器没有SSH客户端,这里还需要安装下

apt update
apt install openssh-client -y

确认:

which ssh

测试:

ssh astrbot@你的VPS_IP

成功后:

astrbot-admin@server:~$

说明连接成功。

2. VPS增加SSH限制

编辑:

sudo nano /etc/ssh/sshd_config

增加:

Match User astrbot-admin
    PasswordAuthentication no

重启ssh:

sudo systemctl restart ssh

这样:

  • 只能密钥登录
  • 不能密码爆破

5. 给AstrBot配权限

1. 配置 SSH 客户端别名

在容器里先安装下nano:

apt update
apt install nano -y

编辑:

nano /root/.ssh/config

添加:

Host server
    HostName 172.x.x.x
    User astrbot
    Port ssh端口
    IdentityFile ~/.ssh/id_ed25519
    StrictHostKeyChecking no

2. 创建sudo白名单

编辑:

sudo visudo -f /etc/sudoers.d/astrbot

填入:

# 查看系统状态
astrbot ALL=(root) NOPASSWD: /usr/bin/uptime
astrbot ALL=(root) NOPASSWD: /usr/bin/free
astrbot ALL=(root) NOPASSWD: /bin/df
astrbot ALL=(root) NOPASSWD: /usr/bin/top
astrbot ALL=(root) NOPASSWD: /usr/bin/ps aux

#查看网络连接
astrbot ALL=(root) NOPASSWD: /usr/bin/ss *

# Docker查看
astrbot ALL=(root) NOPASSWD: /usr/bin/docker ps
astrbot ALL=(root) NOPASSWD: /usr/bin/docker stats
astrbot ALL=(root) NOPASSWD: /usr/bin/docker logs *
astrbot ALL=(root) NOPASSWD: /usr/bin/docker inspect *
astrbot ALL=(root) NOPASSWD: /usr/bin/docker network ls
astrbot ALL=(root) NOPASSWD: /usr/bin/docker network inspect *

# 管理你的容器
astrbot ALL=(root) NOPASSWD: /usr/bin/docker restart wordpress
astrbot ALL=(root) NOPASSWD: /usr/bin/docker restart wordpress_db
astrbot ALL=(root) NOPASSWD: /usr/bin/docker restart astrbot

# 启停容器
astrbot ALL=(root) NOPASSWD: /usr/bin/docker start wordpress
astrbot ALL=(root) NOPASSWD: /usr/bin/docker stop wordpress

# Nginx
astrbot ALL=(root) NOPASSWD: /usr/sbin/nginx -t
astrbot ALL=(root) NOPASSWD: /bin/systemctl reload nginx
astrbot ALL=(root) NOPASSWD: /bin/systemctl status nginx

# 查看日志
astrbot ALL=(root) NOPASSWD: /usr/bin/journalctl *
astrbot ALL=(root) NOPASSWD: /usr/bin/tail /var/log/nginx/access.log
astrbot ALL=(root) NOPASSWD: /usr/bin/tail /var/log/nginx/error.log

#以下为sudo脚本

#服务器状态脚本
astrbot ALL=(root) NOPASSWD: /usr/local/bin/server-check
#Docker状态脚本
astrbot ALL=(root) NOPASSWD: /usr/local/bin/docker-check
#WordPress检查脚本
astrbot ALL=(root) NOPASSWD: /usr/local/bin/wp-check
#Nginx检查脚本
astrbot ALL=(root) NOPASSWD: /usr/local/bin/nginx-access-check
#Nginx错误脚本
astrbot ALL=(root) NOPASSWD: /usr/local/bin/nginx-error-check

做了以上两步配置,AstrBot以后可以直接ssh server "命令",就能管理服务器

如果封装了脚本可以让Agent直接调用,能少消耗多次调用工具的token

比如服务器状态的脚本:

#!/bin/bash

echo "=== 系统 ==="
uptime

echo
echo "=== 内存 ==="
free -h

echo
echo "=== 磁盘 ==="
df -h /

echo
echo "=== Docker ==="
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"

echo
echo "=== CPU进程 ==="
ps aux --sort=-%cpu | head -6

你想检查服务器状态
AstrBot可以调用脚本:ssh server "sudo server-check"


6. 添加提示词

如果配置了人格提示词,在下面隔开加入:

---

#【服务器环境】

你同时负责协助管理用户的服务器。

## 服务器环境:
- Ubuntu Linux
- Docker 部署
- Nginx 作为反向代理
- WordPress 运行于 Docker
- AstrBot 自身运行于 Docker

## 【服务器连接方式】

服务器通过 SSH 管理:

SSH别名:
server

执行服务器命令格式:
ssh server "命令"

所有服务器相关操作默认通过 ssh server 执行。
不要在 AstrBot 容器内部执行服务器管理命令。

---

## 【服务器管理规则】

当用户询问服务器状态、运行情况、异常排查时:

优先使用以下脚本:

查看整体服务器状态:
sudo server-check

查看 Docker 状态:
sudo docker-check

检查 WordPress:
sudo wp-check

分析 Nginx 访问日志:
sudo nginx-access-check

分析Nginx错误日志:
sudo nginx-error-check

如果脚本无法满足需求,可以使用以下基础命令:

查看Docker容器:
ssh server "sudo docker ps"

查看Docker资源:
ssh server "sudo docker stats --no-stream"

查看Docker日志:
ssh server "sudo docker logs --tail 50 容器名"

查看Docker详细信息:
ssh server "sudo docker inspect 容器名"

查看Docker网络:
ssh server "sudo docker network ls"

查看Docker网络详情:
ssh server "sudo docker network inspect 网络名"

查看系统资源:
ssh server "uptime"
ssh server "free -h"
ssh server "df -h"

查看进程:
ssh server "ps aux --sort=-%cpu | head"

查看端口:
ssh server "ss -tunlp"

查看Nginx状态:
ssh server "sudo systemctl status nginx"

测试Nginx配置:
ssh server "sudo nginx -t"

不要重复执行多个基础命令。
如果脚本可以完成任务,优先调用脚本。

---

## 【故障排查流程】

遇到问题时:

1. 先查看对应状态脚本
2. 根据结果进一步分析
3. 必要时查看日志
4. 修改配置前先询问用户

---

## 【安全规则】

禁止未经用户确认执行:

- 删除文件
- 删除 Docker 容器
- docker compose down
- docker system prune
- 修改 SSH 配置
- 修改防火墙规则
- 安装或卸载软件

涉及危险操作时必须先说明影响并等待确认。

---

## 【命令使用优先级】

执行服务器检查时:

第一优先:
使用 server-check、docker-check、nginx-check 等脚本。

第二优先:
使用简单只读命令,例如:
docker ps
docker stats
free
df
uptime

第三优先:
执行修改操作。

任何修改服务器配置、删除文件、删除容器、停止服务的操作,需要先询问用户确认。

---

如果用户只是聊天,不主动执行服务器命令。
只有用户明确要求检查、管理、排查服务器时才调用工具。

以上就是在可控范围为AstrBot配置Agent权限的教程

需要注意的是

/usr/bin/docker *

加入这个权限等于AstrBot有了完整Docker root权限

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注