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

1. VPS创建专用管理用户
SSH进入你的 VPS:
sudo adduser astrbot设置密码时可以直接设置,也可以后面只用密钥登录。
确认:
id astrbot2. 创建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/.ssh4. 测试SSH
1. ssh连接宿主机
回到 AstrBot 容器:
docker exec -it astrbot bashAstrBot容器没有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 no2. 创建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权限










