diff --git a/01_卡资(金)/金仓_存储备份/服务器管理/references/SSH登录方式与故障排查.md b/01_卡资(金)/金仓_存储备份/服务器管理/references/SSH登录方式与故障排查.md index defecddb..8505962e 100644 --- a/01_卡资(金)/金仓_存储备份/服务器管理/references/SSH登录方式与故障排查.md +++ b/01_卡资(金)/金仓_存储备份/服务器管理/references/SSH登录方式与故障排查.md @@ -77,7 +77,21 @@ Host kr-baota --- -## 四、终极备选:宝塔面板终端 +## 四、防封禁·一次配置永久有效 + +**核心**:将本机 IP 加入 fail2ban 白名单,今后连接不再触发封禁。 + +| 方式 | 何时用 | 命令 | +|------|--------|------| +| **A. SSH 可用时** | 能连上后立刻做 | `bash scripts/宝塔_永久白名单fail2ban_终端执行.sh 140.245.37.56`(IP 换成你的) | +| **B. 腾讯云重启** | SSH 完全不通时 | `python3 scripts/腾讯云_宝塔服务器重启.py`(重启清空封禁,等 2~3 分钟再连) | +| **C. 宝塔终端** | 重启后仍不通 | 登录面板 → 终端 → 粘贴执行 `scripts/宝塔_永久白名单fail2ban_终端执行.sh` 内容 | + +建议:重启解封后,**第一时间**执行 A 或 C,将当前 IP 加入白名单。 + +--- + +## 五、终极备选:宝塔面板终端 **无需 SSH**,在浏览器中完成操作: @@ -104,7 +118,19 @@ bash "01_卡资(金)/金仓_存储备份/服务器管理/scripts/kr宝塔_SS "01_卡资(金)/金仓_存储备份/服务器管理/scripts/kr宝塔_node项目批量修复.py" ``` -## 六、IP 封禁处理(多方案 + 优化命令) +## 七、IP 封禁处理(多方案 + 优化命令) + +### 6.0 腾讯云 TAT 解封(免 SSH 顶配) + +用腾讯云 SecretId/SecretKey 在 kr宝塔 上执行解封 + Node 批量启动,**无需 SSH**。 + +```bash +cd "/Users/karuo/Documents/个人/卡若AI" +./01_卡资(金)/金仓_存储备份/服务器管理/scripts/.venv_tx/bin/python \ + "01_卡资(金)/金仓_存储备份/服务器管理/scripts/腾讯云_TAT_解封SSH并批量启动Node.py" 211.156.92.72 +``` + +凭证从 `00_账号与API索引.md` 读取。将 `211.156.92.72` 换成你的公网 IP。依赖:`pip install tencentcloud-sdk-python-tat`。 ### 6.1 腾讯云 API 重启(解除 fail2ban 内存封禁) @@ -114,9 +140,20 @@ bash "01_卡资(金)/金仓_存储备份/服务器管理/scripts/kr宝塔_SS python3 "01_卡资(金)/金仓_存储备份/服务器管理/scripts/腾讯云_宝塔服务器重启.py" ``` -### 6.2 宝塔终端解封(SSH 不可用时用面板终端) +### 6.2 永久白名单(防今后再封) -在**宝塔面板 → 终端**粘贴执行。将 `你的公网IP` 替换为本机公网 IP(如 211.156.92.72,可从 https://ip.sb 或本机 `curl ifconfig.me` 获取): +SSH 恢复后**务必执行**,将本机 IP 加入 ignoreip: + +```bash +# 本机执行(需先 SSH 通) +sshpass -p 'Zhiqun1984' ssh -p 22022 root@43.139.27.93 'bash -s' < scripts/宝塔_永久白名单fail2ban_终端执行.sh 140.245.37.56 +``` + +或在宝塔面板 → 终端,复制 `scripts/宝塔_永久白名单fail2ban_终端执行.sh` 内容执行,参数传你的公网 IP。 + +### 6.3 宝塔终端解封(SSH 不可用时用面板终端) + +在**宝塔面板 → 终端**粘贴执行。将 `你的公网IP` 替换为本机公网 IP(如 140.245.37.56,可从 https://ip.sb 或本机 `curl ifconfig.me` 获取): **优化单行(同时解封 sshd + ssh-iptables):** @@ -136,7 +173,7 @@ fail2ban-client set ssh-iptables unbanip 你的公网IP --- -## 七、存客宝 SSH 修复(Permission denied 时) +## 八、存客宝 SSH 修复(Permission denied 时) 存客宝若密码/密钥均 Permission denied,需在**存客宝宝塔面板 → 终端**执行修复: diff --git a/01_卡资(金)/金仓_存储备份/服务器管理/scripts/宝塔_永久白名单fail2ban_终端执行.sh b/01_卡资(金)/金仓_存储备份/服务器管理/scripts/宝塔_永久白名单fail2ban_终端执行.sh new file mode 100644 index 00000000..0ed1e313 --- /dev/null +++ b/01_卡资(金)/金仓_存储备份/服务器管理/scripts/宝塔_永久白名单fail2ban_终端执行.sh @@ -0,0 +1,30 @@ +#!/bin/bash +# 在 kr宝塔 宝塔面板 → 终端 执行,将本机 IP 永久加入 fail2ban 白名单 +# 用法:bash 本脚本 或 复制内容到终端执行 +# 不传参数时从 https://ip.sb 获取;也可传参:bash 本脚本 211.156.92.72 + +IP="${1:-$(curl -s --connect-timeout 5 ip.sb 2>/dev/null || curl -s ifconfig.me 2>/dev/null || echo '')}" +if [ -z "$IP" ]; then + echo "❌ 无法获取公网 IP,请手动传入: bash $0 你的公网IP" + exit 1 +fi +echo "=== 将 $IP 永久加入 fail2ban 白名单 ===" +mkdir -p /etc/fail2ban/jail.d +# 追加到已有 ignoreip 或新建(保留 127.0.0.1/8 ::1) +if [ -f /etc/fail2ban/jail.d/99-allow-ckb-ip.conf ]; then + cur=$(grep ignoreip /etc/fail2ban/jail.d/99-allow-ckb-ip.conf 2>/dev/null | head -1) + if echo "$cur" | grep -q "$IP"; then + echo " $IP 已在白名单中" + else + sed -i "s/ignoreip = \(.*\)/ignoreip = \1 $IP/" /etc/fail2ban/jail.d/99-allow-ckb-ip.conf 2>/dev/null || \ + echo -e "[DEFAULT]\nignoreip = 127.0.0.1/8 ::1 $IP" > /etc/fail2ban/jail.d/99-allow-ckb-ip.conf + echo " 已添加 $IP" + fi +else + echo -e "[DEFAULT]\nignoreip = 127.0.0.1/8 ::1 $IP" > /etc/fail2ban/jail.d/99-allow-ckb-ip.conf + echo " 已创建 99-allow-ckb-ip.conf" +fi +systemctl restart fail2ban 2>/dev/null || service fail2ban restart 2>/dev/null +fail2ban-client set sshd unbanip "$IP" 2>/dev/null +fail2ban-client set ssh-iptables unbanip "$IP" 2>/dev/null +echo "✅ 完成。$IP 今后不会被 fail2ban 封禁。" diff --git a/01_卡资(金)/金仓_存储备份/服务器管理/scripts/腾讯云_TAT_解封SSH并批量启动Node.py b/01_卡资(金)/金仓_存储备份/服务器管理/scripts/腾讯云_TAT_解封SSH并批量启动Node.py index 8fa6b57c..fc8e4ef2 100644 --- a/01_卡资(金)/金仓_存储备份/服务器管理/scripts/腾讯云_TAT_解封SSH并批量启动Node.py +++ b/01_卡资(金)/金仓_存储备份/服务器管理/scripts/腾讯云_TAT_解封SSH并批量启动Node.py @@ -101,11 +101,23 @@ print("RUN:", run_c, "STOP:", len(items2)-run_c) '''.encode()).decode() def build_shell(unban_ip: str) -> str: + # 白名单:默认 + 当前 IP + 常见办公 IP,防止多网络环境 + allow_ips = "127.0.0.1/8 ::1 " + unban_ip + " 211.156.92.72 140.245.37.56" + allow_ips = " ".join(dict.fromkeys(allow_ips.split())) # 去重 return f'''#!/bin/bash set -e -echo "=== 1. 解封 fail2ban SSH (unbanip {unban_ip}) ===" -fail2ban-client set sshd unbanip {unban_ip} 2>/dev/null || echo " (fail2ban 未启用或已解封)" -echo "=== 2. Node 批量启动 ===" +IP="{unban_ip}" +echo "=== 1. 永久白名单:将 $IP 等加入 fail2ban(今后不再封禁)===" +mkdir -p /etc/fail2ban/jail.d +echo -e "[DEFAULT]\\nignoreip = {allow_ips}" > /etc/fail2ban/jail.d/99-allow-ckb-ip.conf +echo " 已写入 99-allow-ckb-ip.conf" +echo "=== 2. 重启 fail2ban 并立即解封 $IP ===" +systemctl restart fail2ban 2>/dev/null || service fail2ban restart 2>/dev/null || true +sleep 2 +fail2ban-client set sshd unbanip "$IP" 2>/dev/null || true +fail2ban-client set ssh-iptables unbanip "$IP" 2>/dev/null || true +echo " 已解封 $IP" +echo "=== 3. Node 批量启动 ===" echo "{NODE_FIX_B64}" | base64 -d | python3 - echo "=== 完成 ===" ''' diff --git a/02_卡人(水)/水桥_平台对接/Soul文章上传/SKILL.md b/02_卡人(水)/水桥_平台对接/Soul文章上传/SKILL.md index 5b14fcc9..feaa205c 100644 --- a/02_卡人(水)/水桥_平台对接/Soul文章上传/SKILL.md +++ b/02_卡人(水)/水桥_平台对接/Soul文章上传/SKILL.md @@ -131,12 +131,24 @@ pip3 install pymysql - 小程序内容来源:腾讯云 MySQL `soul_miniprogram.chapters` - content_upload 直连数据库,与 API 共用同一数据源 -### 5. 工作流建议 +### 5. 发海报到飞书 + +上传成功后自动生成海报图片(含小程序码)并发送到飞书群,**不发链接**,直接发图。 + +- 海报格式与小程序「生成海报」一致:Soul创业派对、标题、金句、日期、小程序码 +- 小程序码由 Soul 后端 `/api/miniprogram/qrcode` 生成 +- 需配置:`scripts/.env.feishu` 或环境变量 `FEISHU_APP_ID`、`FEISHU_APP_SECRET`(与 webhook 同租户) +- 依赖:`pip install Pillow requests` + +手动发:`python3 scripts/send_poster_to_feishu.py "<文章路径>"` 或 `--id 9.15` +仅保存本地:`python3 scripts/send_poster_to_feishu.py "<路径>" --save poster.png` + +### 6. 工作流建议 1. 根据 Soul 派对 TXT 写好文章(按书格式:一句一行、金句开头、日期、`---` 分段) 2. 保存为 `9.xx 第X场|主题.md` 到第9章目录 3. 执行 `upload_soul_article.sh "<文章路径>"` -4. 检查返回为「创建」或「更新」即完成 +4. 检查返回为「创建」或「更新」,海报会自动发到飞书群 --- diff --git a/运营中枢/工作台/gitea_push_log.md b/运营中枢/工作台/gitea_push_log.md index 87909746..bb01ccf6 100644 --- a/运营中枢/工作台/gitea_push_log.md +++ b/运营中枢/工作台/gitea_push_log.md @@ -50,3 +50,4 @@ | 2026-02-22 05:04:01 | 🔄 卡若AI 同步 2026-02-22 05:03 | 更新:金仓、运营中枢工作台 | 排除 >20MB: 5 个 | | 2026-02-22 05:11:04 | 🔄 卡若AI 同步 2026-02-22 05:11 | 更新:金仓、水溪整理归档、运营中枢工作台 | 排除 >20MB: 5 个 | | 2026-02-22 05:25:32 | 🔄 卡若AI 同步 2026-02-22 05:25 | 更新:金仓、卡木、总索引与入口、运营中枢工作台 | 排除 >20MB: 5 个 | +| 2026-02-22 05:46:11 | 🔄 卡若AI 同步 2026-02-22 05:46 | 更新:金仓、运营中枢工作台 | 排除 >20MB: 5 个 | diff --git a/运营中枢/工作台/代码管理.md b/运营中枢/工作台/代码管理.md index 67a4e699..dd885d5a 100644 --- a/运营中枢/工作台/代码管理.md +++ b/运营中枢/工作台/代码管理.md @@ -53,3 +53,4 @@ | 2026-02-22 05:04:01 | 成功 | 成功 | 🔄 卡若AI 同步 2026-02-22 05:03 | 更新:金仓、运营中枢工作台 | 排除 >20MB: 5 个 | [仓库](http://open.quwanzhi.com:3000/fnvtk/karuo-ai) [百科](http://open.quwanzhi.com:3000/fnvtk/karuo-ai/wiki) | | 2026-02-22 05:11:04 | 成功 | 成功 | 🔄 卡若AI 同步 2026-02-22 05:11 | 更新:金仓、水溪整理归档、运营中枢工作台 | 排除 >20MB: 5 个 | [仓库](http://open.quwanzhi.com:3000/fnvtk/karuo-ai) [百科](http://open.quwanzhi.com:3000/fnvtk/karuo-ai/wiki) | | 2026-02-22 05:25:32 | 成功 | 成功 | 🔄 卡若AI 同步 2026-02-22 05:25 | 更新:金仓、卡木、总索引与入口、运营中枢工作台 | 排除 >20MB: 5 个 | [仓库](http://open.quwanzhi.com:3000/fnvtk/karuo-ai) [百科](http://open.quwanzhi.com:3000/fnvtk/karuo-ai/wiki) | +| 2026-02-22 05:46:11 | 成功 | 成功 | 🔄 卡若AI 同步 2026-02-22 05:46 | 更新:金仓、运营中枢工作台 | 排除 >20MB: 5 个 | [仓库](http://open.quwanzhi.com:3000/fnvtk/karuo-ai) [百科](http://open.quwanzhi.com:3000/fnvtk/karuo-ai/wiki) |