QQ机器人部署案例记录

本案例记录了部署QQ机器人的过程,可以将你闲置的QQ账号调教成一个机器人供群友使用。

QQ机器人案例

本案例使用了:

  • 云服务器:本案例中云服务器配置为2核2G,系统为Debian 12;
  • 本地计算机:本案例中本地计算机的系统为Windows 11。

服务器系统基础配置

安装OpenSSH组件

本案例所使用的本地计算机系统为Windows 11,下面所需要的部分指令需要用到OpenSSH相关组件。Windows 10和11一般是默认安装了OpenSSH客户端,如果需要检查可以打开“设置” → “系统” → “可选功能”,确保已安装OpenSSH客户端。

创建新用户并使用密钥登录

本案例采用的是Debian 12。首先,在云服务器中使用以下命令更新软件源。

1
sudo apt update && sudo apt upgrade

接着,使用以下命令创建一个新的普通用户。注意,尽量避免使用root用户操作,这非常不安全。本案例后续的操作都将基于新普通用户进行。

1
adduser newuser #新建用户newuser

系统会提示你为该用户设置密码并填写一些可选信息(可以直接按回车跳过)。这个密码用于 sudo 提权和备用登录方式,请务必设置一个强密码并记住它。

如果你希望这个普通用户能够执行管理员命令,需要将其添加到 sudo 组。由于本案例后续需要用到sudo命令,建议加入sudo组。

1
usermod -aG sudo newuser

设置 SSH 目录

切换用户为新用户。

1
su - newuser

创建.ssh目录并设置700权限。700权限意味着只有文件所有者具有读写执行权限。

1
2
mkdir -p ~/.ssh
chmod 700 ~/.ssh

创建 authorized_keys 文件并设置600权限。600权限意味着只有文件所有者具有读写权限。这将是公钥的存储位置。

1
2
touch ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

生成 SSH 密钥对

SSH密钥对是在本地计算机生成的。这里采用Ed25519算法生成SSH密钥。

1
ssh-keygen -t ed25519

系统会提示:

  • Enter file in which to save the key:密钥保存的位置。建议采用默认位置;

  • Enter passphrase (empty for no passphrase):为私钥设置一个密码,即使私钥被盗也无法直接使用;

  • Enter same passphrase again:确认密码。

完成后,将在SSH密钥目录下创建两个文件:

  • id_ed25519:私钥,保存在本地,不可泄漏。
  • id_ed25519.pub:公钥,上传到服务器。

将公钥上传到服务器

有多种方法可以将公钥上传至服务器。最好的方法是采用ssh-copy-id方法上传。在本地运行:

1
ssh-copy-id -i ~/.ssh/id_ed25519.pub newuser@your_server_ip

就可以上传成功了。

但是,由于本案例所使用的PowerShell不支持ssh-copy-id,这里采用手动复制的方法上传。

本地计算机上,查看公钥内容:

1
cat ~/.ssh/id_ed25519.pub

在服务器root会话中,使用echo命令导入公钥:

1
echo "粘贴你复制的公钥内容" >> /home/newuser/.ssh/authorized_keys

使用以下命令测试登录:

1
ssh newuser@your_server_ip

如果没有设置密钥密码,直接登录说明配置成功。如果设置了密钥密码,在确认密码后成功登录,同样配置成功。

禁用密码登录与root直接登录

服务器上,以 root 身份编辑 SSH 服务器配置文件:

1
nano /etc/ssh/sshd_config

找到并修改以下行,确保它们如下所示:

1
2
3
4
5
6
7
8
9
10
11
# 禁止 root 用户直接 SSH 登录
PermitRootLogin no

# 允许公钥认证
PubkeyAuthentication yes

# 禁用密码登录
PasswordAuthentication no

# 确保允许使用授权密钥文件
AuthorizedKeysFile .ssh/authorized_keys

现在,再登录root就会提示Permission denied (publickey).。同时也不能使用密码直接登录,保障服务器的安全。

1Panel面板管理软件

为了实现便捷且可视化的服务器管办理,本案例安装了Linux运维管理面板。可以采用1Panel、宝塔等面板。本案例采用了1Panel。

1Panel的安装与配置

由于1Panel的安装需要sudo权限,因此我们使用以下命令进行安装:

1
sudo bash -c "$(curl -sSL https://resource.fit2cloud.com/1panel/package/v2/quick_start.sh)"

选择默认的路径,并安装好Docker之后便进入1Panel的配置。依次配置端口、安全入口、用户名和密码,1Panel就会自动启动。当然,这些内容后续还可以在1Panel中修改。

如果使用的是云服务器,在安全组中打开端口后,便可以在浏览器中访问服务器后台。

1Panel

打开防火墙

Debian 12可能没有默认UFW防火墙,因此为了保障服务器安全,有必要安装并打开防火墙。

使用以下命令安装UFW。

1
sudo apt install ufw

设置默认策略。

1
2
sudo ufw default deny incoming # 默认拒绝所有传入连接
sudo ufw default allow outgoing # 默认允许所有传出连接

允许必要的服务。本案例中只有ssh和1Panel的服务是必须的。如果服务器还有web服务,那么也应该相应允许httphttps服务。

1
2
3
4
5
sudo ufw allow ssh # 允许 SSH 连接
sudo ufw allow 10010/tcp # 1Panel(如果端口为10010)

sudo ufw allow http
sudo ufw allow https # 允许 HTTP 和 HTTPS

开启两步验证(可选)

如果你有2FA验证软件(如Google Authenticator、Microsoft Authenticator、1Password,iOS的“密码”等),可以设置1Panel的两步验证。在“面板设置” → “安全”中开启“两步验证”,扫描二维码后输入验证码便可开启。这样在登录后需要二次验证,防止暴力破解,进一步确保1Panel端口的安全。

两步验证

安装Fail2ban(可选)

安装Faile2ban可以有效保护服务器以免遭受暴力攻击。

安装Fail2ban。

1
sudo apt-get install fail2ban

Debian 12 及以上的版本需要手动安装 rsyslog。

1
sudo apt-get install rsyslog

启动 Fail2ban 服务并设置开机自启动。

1
2
sudo systemctl start fail2ban
sudo systemctl enable fail2ban

安装完成后,也可以在1Panel面板的“工具箱” → “Fail2ban”中开启和设置Fail2ban。

QQ机器人部署与运行

安装NapCat

由于近期出现了大规模针对基于NapCat的QQ机器人的攻击,这里不建议使用NapCat进行QQ机器人部署。如果一定要使用NapCat,请不要使用NapCat WebUI,在公网暴露NapCat的端口。如果一定要使用WebUI,也请一定要设置强token以防止攻击。建议关闭WebUI并配置好防火墙、监听本地回环127.0.0.1。

根据NapCat官方文档,可以采用以下命令一键安装NapCat:

1
2
3
4
curl -o \
napcat.sh \
https://nclatest.znin.net/NapNeko/NapCat-Installer/main/script/install.sh \
&& sudo bash napcat.sh

本案例采用NapCat TUI-CLI工具。

安装完成后首次登陆需要输入QQ号并扫码登陆。后续需要配置NapCat可以使用以下命令启动:

1
sudo napcat

安装Koishi

首先需要在1Panel的“应用商店”中,搜索“MySQL”,按照默认配置进行安装并启用。

同样搜索“Koishi”,选择“端口外部访问”,安装并启用。

这样在本机公网IP的5140端口(默认端口)就可以配置Koishi了。

koishi