<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <id>https://yyq-firefly.pages.dev/</id>
  <title type="text">YYQ 的知识库</title>
  <subtitle type="text">读万卷书，行万里路</subtitle>
  <updated>2026-09-23T00:00:00.000Z</updated>
  <author><name>YYQ</name></author>
  <link rel="alternate" href="https://yyq-firefly.pages.dev/"/>
  <link rel="self" href="https://yyq-firefly.pages.dev/atom.xml"/>
  <generator uri="https://github.com/CuteLeaf/Firefly">Firefly v6.16.8</generator>
    <entry>
      <id>https://yyq-firefly.pages.dev/posts/50-tutorials/ai/ai%E5%89%8D%E7%AB%AFui%E8%AE%BE%E8%AE%A1_%E4%BB%8E%E9%9B%B6%E8%AE%BE%E8%AE%A1%E6%96%B9%E5%90%91%E5%88%B0%E8%90%BD%E5%9C%B0%E5%B7%A5%E4%BD%9C%E6%B5%81/</id>
      <title type="text">AI 前端 UI 设计：从零设计方向到落地工作流</title>
      <published>2026-09-23T00:00:00.000Z</published>
      <updated>2026-09-23T00:00:00.000Z</updated>
      <author><name>YYQ</name></author>
      <link rel="alternate" href="https://yyq-firefly.pages.dev/posts/50-tutorials/ai/ai%E5%89%8D%E7%AB%AFui%E8%AE%BE%E8%AE%A1_%E4%BB%8E%E9%9B%B6%E8%AE%BE%E8%AE%A1%E6%96%B9%E5%90%91%E5%88%B0%E8%90%BD%E5%9C%B0%E5%B7%A5%E4%BD%9C%E6%B5%81/"/>
      <summary type="text"></summary>
      <content type="html"><![CDATA[<section><h1>AI 前端 UI 设计：从零设计方向到落地工作流<a href="#ai-前端-ui-设计从零设计方向到落地工作流"><span>#</span></a></h1><p>相关笔记：<a href="/posts/30-MOC/AI%20%E7%BC%96%E7%A8%8B%E5%B7%A5%E5%85%B7%E4%B8%8E%E4%BB%A3%E7%90%86%20MOC/">AI 编程工具与代理 MOC</a>、<a href="/posts/50-Tutorials/Windows/Codex%20%E4%B8%8E%20Claude%20Code%20%E8%A7%84%E5%88%99%E6%96%87%E4%BB%B6%E7%BB%9F%E4%B8%80/">Codex 与 Claude Code 规则文件统一</a></p><blockquote><p>更新日期：2026-09-23<br />
适用场景：你知道产品/功能要做什么，但<strong>完全没有 UI 设计方向</strong>；希望 Claude Code、Codex、v0、Figma Make 等工具先帮你找到设计方向，再生成一套美观、统一、可维护的前端页面。<br />
核心原则：<strong>不要让 AI 在没有视觉依据的情况下直接写 UI。先研究 → 再定设计系统 → 再实现 → 最后视觉验收。</strong></p></blockquote><hr /><section><h2>1. 最终推荐工作流<a href="#1-最终推荐工作流"><span>#</span></a></h2><p>如果当前只有一句：</p><blockquote><p>“我要做一个技术知识库 / SaaS 后台 / 个人网站，但是不知道页面该长什么样。”</p></blockquote><p><strong>不要直接让 Claude Code 或 Codex 开始写 CSS。</strong></p><p>推荐流程：</p><div><div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>产品需求</span></div></div><div><div><div>2</div></div><div><span><span>  </span></span><span>│</span></div></div><div><div><div>3</div></div><div><span><span>  </span></span><span>▼</span></div></div><div><div><div>4</div></div><div><span>理解产品类型 / 用户 / 主要任务</span></div></div><div><div><div>5</div></div><div><span><span>  </span></span><span>│</span></div></div><div><div><div>6</div></div><div><span><span>  </span></span><span>▼</span></div></div><div><div><div>7</div></div><div><span>设计探索</span></div></div><div><div><div>8</div></div><div><span><span>  </span></span><span>├── Google Stitch</span></div></div><div><div><div>9</div></div><div><span><span>  </span></span><span>├── Refero Styles</span></div></div><div><div><div>10</div></div><div><span><span>  </span></span><span>├── Refero MCP</span></div></div><div><div><div>11</div></div><div><span><span>  </span></span><span>├── Landbook</span></div></div><div><div><div>12</div></div><div><span><span>  </span></span><span>├── Mobbin</span></div></div><div><div><div>13</div></div><div><span><span>  </span></span><span>└── UI/UX Pro Max</span></div></div><div><div><div>14</div></div><div><span><span>  </span></span><span>│</span></div></div><div><div><div>15</div></div><div><span><span>  </span></span><span>▼</span></div></div><div><div><div>16</div></div><div><span>整理 3 个明显不同的视觉方向</span></div></div><div><div><div>17</div></div><div><span><span>  </span></span><span>│</span></div></div><div><div><div>18</div></div><div><span><span>  </span></span><span>▼</span></div></div><div><div><div>19</div></div><div><span>选择一个方向</span></div></div><div><div><div>20</div></div><div><span><span>  </span></span><span>│</span></div></div><div><div><div>21</div></div><div><span><span>  </span></span><span>▼</span></div></div><div><div><div>22</div></div><div><span>形成 DESIGN.md</span></div></div><div><div><div>23</div></div><div><span><span>  </span></span><span>│</span></div></div><div><div><div>24</div></div><div><span><span>  </span></span><span>▼</span></div></div><div><div><div>25</div></div><div><span>Anthropic frontend-design</span></div></div><div><div><div>26</div></div><div><span><span>  </span></span><span>+</span></div></div><div><div><div>27</div></div><div><span>21st.dev / shadcn / Aceternity</span></div></div><div><div><div>28</div></div><div><span><span>  </span></span><span>│</span></div></div><div><div><div>29</div></div><div><span><span>  </span></span><span>▼</span></div></div><div><div><div>30</div></div><div><span>先实现 1 个代表页面</span></div></div><div><div><div>31</div></div><div><span><span>  </span></span><span>│</span></div></div><div><div><div>32</div></div><div><span><span>  </span></span><span>▼</span></div></div><div><div><div>33</div></div><div><span>真实浏览器截图</span></div></div><div><div><div>34</div></div><div><span><span>  </span></span><span>│</span></div></div><div><div><div>35</div></div><div><span><span>  </span></span><span>▼</span></div></div><div><div><div>36</div></div><div><span>Impeccable critique</span></div></div><div><div><div>37</div></div><div><span><span>  </span></span><span>│</span></div></div><div><div><div>38</div></div><div><span><span>  </span></span><span>▼</span></div></div><div><div><div>39</div></div><div><span>Impeccable audit</span></div></div><div><div><div>40</div></div><div><span><span>  </span></span><span>│</span></div></div><div><div><div>41</div></div><div><span><span>  </span></span><span>▼</span></div></div><div><div><div>42</div></div><div><span>Impeccable polish</span></div></div><div><div><div>43</div></div><div><span><span>  </span></span><span>│</span></div></div><div><div><div>44</div></div><div><span><span>  </span></span><span>▼</span></div></div><div><div><div>45</div></div><div><span>确认后再推广到全部页面</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div><p>最重要的是：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>错误：</span></div></div><div><div><div>2</div></div><div><span>需求 → “帮我做漂亮一点” → AI 直接写代码</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span>正确：</span></div></div><div><div><div>5</div></div><div><span>需求 → 找参考 → 定设计方向 → DESIGN.md → 实现 → 截图审查 → Polish</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section><section><h2>2. DESIGN.md：整套工作流的核心中间产物<a href="#2-designmd整套工作流的核心中间产物"><span>#</span></a></h2><section><h3>2.1 它是什么<a href="#21-它是什么"><span>#</span></a></h3><p><code>DESIGN.md</code> 可以理解成：</p><blockquote><p><strong>给 AI Coding Agent 看的设计系统 README。</strong></p></blockquote><p>里面不是业务代码，而是明确告诉 Claude Code / Codex：</p><ul>
<li>页面应该是什么气质</li>
<li>主色和辅助色是什么</li>
<li>字体怎么选</li>
<li>标题层级怎么处理</li>
<li>页面最大宽度</li>
<li>间距体系</li>
<li>圆角大小</li>
<li>Card 是否应该大量使用</li>
<li>Border / Shadow 怎么使用</li>
<li>Button / Input / Navigation 的视觉规则</li>
<li>动效原则</li>
<li>Mobile 怎么处理</li>
<li>哪些设计明确禁止</li>
</ul><p>Google Stitch 已将 DESIGN.md 作为跨设计/编码工具共享设计规则的一种格式；Refero Styles 和 Impeccable 也围绕它提供实际工作流。</p></section><section><h3>2.2 建议项目结构<a href="#22-建议项目结构"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>project/</span></div></div><div><div><div>2</div></div><div><span>├─ DESIGN.md</span></div></div><div><div><div>3</div></div><div><span>├─ PRODUCT.md                 # 如果使用 Impeccable</span></div></div><div><div><div>4</div></div><div><span>├─ AGENTS.md</span></div></div><div><div><div>5</div></div><div><span>├─ CLAUDE.md</span></div></div><div><div><div>6</div></div><div><span>├─ src/</span></div></div><div><div><div>7</div></div><div><span>└─ ...</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>2.3 一个简单例子<a href="#23-一个简单例子"><span>#</span></a></h3><div><div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span># Design System</span></div></div><div><div><div>2</div></div><div>
</div></div><div><div><div>3</div></div><div><span>## Overview</span></div></div><div><div><div>4</div></div><div>
</div></div><div><div><div>5</div></div><div><span>这是一个面向开发者的个人技术知识库。</span></div></div><div><div><div>6</div></div><div>
</div></div><div><div><div>7</div></div><div><span>视觉方向：</span></div></div><div><div><div>8</div></div><div><span><span>-</span><span> content-first</span></span></div></div><div><div><div>9</div></div><div><span><span>-</span><span> calm</span></span></div></div><div><div><div>10</div></div><div><span><span>-</span><span> technical</span></span></div></div><div><div><div>11</div></div><div><span><span>-</span><span> editorial</span></span></div></div><div><div><div>12</div></div><div><span><span>-</span><span> high readability</span></span></div></div><div><div><div>13</div></div><div><span><span>-</span><span> restrained decoration</span></span></div></div><div><div><div>14</div></div><div>
</div></div><div><div><div>15</div></div><div><span>拒绝：</span></div></div><div><div><div>16</div></div><div><span><span>-</span><span> 紫蓝渐变</span></span></div></div><div><div><div>17</div></div><div><span><span>-</span><span> 大量 Glassmorphism</span></span></div></div><div><div><div>18</div></div><div><span><span>-</span><span> 页面全部 Card 化</span></span></div></div><div><div><div>19</div></div><div><span><span>-</span><span> 巨大圆角</span></span></div></div><div><div><div>20</div></div><div><span><span>-</span><span> 无意义发光</span></span></div></div><div><div><div>21</div></div><div><span><span>-</span><span> 过度动画</span></span></div></div><div><div><div>22</div></div><div>
</div></div><div><div><div>23</div></div><div><span>## Colors</span></div></div><div><div><div>24</div></div><div>
</div></div><div><div><div>25</div></div><div><span>Background: #F7F6F2</span></div></div><div><div><div>26</div></div><div><span>Surface: #FFFFFF</span></div></div><div><div><div>27</div></div><div><span>Text Primary: #1D1D1F</span></div></div><div><div><div>28</div></div><div><span>Text Secondary: #686868</span></div></div><div><div><div>29</div></div><div><span>Border: #E4E1DA</span></div></div><div><div><div>30</div></div><div><span>Accent: #C65D32</span></div></div><div><div><div>31</div></div><div>
</div></div><div><div><div>32</div></div><div><span>## Typography</span></div></div><div><div><div>33</div></div><div>
</div></div><div><div><div>34</div></div><div><span>Article:</span></div></div><div><div><div>35</div></div><div><span><span>-</span><span> Serif / readable long-form font</span></span></div></div><div><div><div>36</div></div><div>
</div></div><div><div><div>37</div></div><div><span>UI:</span></div></div><div><div><div>38</div></div><div><span><span>-</span><span> Clean Sans Serif</span></span></div></div><div><div><div>39</div></div><div>
</div></div><div><div><div>40</div></div><div><span>Code:</span></div></div><div><div><div>41</div></div><div><span><span>-</span><span> Monospace</span></span></div></div><div><div><div>42</div></div><div>
</div></div><div><div><div>43</div></div><div><span>## Layout</span></div></div><div><div><div>44</div></div><div>
</div></div><div><div><div>45</div></div><div><span>Article max-width: 760px</span></div></div><div><div><div>46</div></div><div><span>App shell max-width: 1440px</span></div></div><div><div><div>47</div></div><div><span>Sidebar: 260px</span></div></div><div><div><div>48</div></div><div>
</div></div><div><div><div>49</div></div><div><span>## Shapes</span></div></div><div><div><div>50</div></div><div>
</div></div><div><div><div>51</div></div><div><span>Buttons: 6px</span></div></div><div><div><div>52</div></div><div><span>Inputs: 6px</span></div></div><div><div><div>53</div></div><div><span>Cards: 8px</span></div></div><div><div><div>54</div></div><div><span>Avoid 16px+ radius unless there is a clear reason.</span></div></div><div><div><div>55</div></div><div>
</div></div><div><div><div>56</div></div><div><span>## Components</span></div></div><div><div><div>57</div></div><div>
</div></div><div><div><div>58</div></div><div><span>Article cards should behave like list rows rather than floating cards.</span></div></div><div><div><div>59</div></div><div>
</div></div><div><div><div>60</div></div><div><span>## Do's and Don'ts</span></div></div><div><div><div>61</div></div><div>
</div></div><div><div><div>62</div></div><div><span>DO:</span></div></div><div><div><div>63</div></div><div><span><span>-</span><span> prioritize reading</span></span></div></div><div><div><div>64</div></div><div><span><span>-</span><span> use whitespace for hierarchy</span></span></div></div><div><div><div>65</div></div><div><span><span>-</span><span> maintain visible information density</span></span></div></div><div><div><div>66</div></div><div>
</div></div><div><div><div>67</div></div><div><span>DON'T:</span></div></div><div><div><div>68</div></div><div><span><span>-</span><span> wrap every section in a card</span></span></div></div><div><div><div>69</div></div><div><span><span>-</span><span> add badges only for decoration</span></span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div></section><section><h3>2.4 实际使用<a href="#24-实际使用"><span>#</span></a></h3><p>把 <code>DESIGN.md</code> 放进项目根目录后，对 Claude Code / Codex 说：</p><div><div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>开始 UI 工作之前先完整读取 DESIGN.md。</span></div></div><div><div><div>2</div></div><div>
</div></div><div><div><div>3</div></div><div><span>DESIGN.md 是本项目视觉设计的 Source of Truth。</span></div></div><div><div><div>4</div></div><div>
</div></div><div><div><div>5</div></div><div><span>实现页面时必须遵循其中：</span></div></div><div><div><div>6</div></div><div><span>- Typography</span></div></div><div><div><div>7</div></div><div><span>- Color</span></div></div><div><div><div>8</div></div><div><span>- Spacing</span></div></div><div><div><div>9</div></div><div><span>- Layout</span></div></div><div><div><div>10</div></div><div><span>- Component</span></div></div><div><div><div>11</div></div><div><span>- Motion</span></div></div><div><div><div>12</div></div><div><span>- Anti-pattern</span></div></div><div><div><div>13</div></div><div>
</div></div><div><div><div>14</div></div><div><span>如果当前代码和 DESIGN.md 冲突：</span></div></div><div><div><div>15</div></div><div><span>先指出冲突，不要自行覆盖 DESIGN.md。</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div><hr /></section></section><section><h2>3. Google Stitch：完全没方向时先探索设计<a href="#3-google-stitch完全没方向时先探索设计"><span>#</span></a></h2><p>官方：</p><ul>
<li><a href="https://stitch.withgoogle.com/" target="_blank">https://stitch.withgoogle.com/</a></li>
<li><a href="https://blog.google/innovation-and-ai/models-and-research/google-labs/stitch-ai-ui-design/" target="_blank">https://blog.google/innovation-and-ai/models-and-research/google-labs/stitch-ai-ui-design/</a></li>
<li><a href="https://blog.google/innovation-and-ai/models-and-research/google-labs/stitch-design-md/" target="_blank">https://blog.google/innovation-and-ai/models-and-research/google-labs/stitch-design-md/</a></li>
</ul><section><h3>3.1 它解决什么问题<a href="#31-它解决什么问题"><span>#</span></a></h3><p>Stitch 最适合：</p><blockquote><p><strong>“我连自己喜欢什么风格都不知道。”</strong></p></blockquote><p>它不是单纯的“文字 → 一个页面”。</p><p>比较理想的使用方式是：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>业务目标</span></div></div><div><div><div>2</div></div><div><span>↓</span></div></div><div><div><div>3</div></div><div><span>让 Stitch 同时探索不同视觉方向</span></div></div><div><div><div>4</div></div><div><span>↓</span></div></div><div><div><div>5</div></div><div><span>比较</span></div></div><div><div><div>6</div></div><div><span>↓</span></div></div><div><div><div>7</div></div><div><span>继续迭代其中一个</span></div></div><div><div><div>8</div></div><div><span>↓</span></div></div><div><div><div>9</div></div><div><span>形成 DESIGN.md</span></div></div><div><div><div>10</div></div><div><span>↓</span></div></div><div><div><div>11</div></div><div><span>把设计规则交给 Codex / Claude Code</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>3.2 实际模拟：做一个技术知识库<a href="#32-实际模拟做一个技术知识库"><span>#</span></a></h3><p>你不要输入：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>做一个漂亮的个人知识库。</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>建议输入：</p><div><div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>我要设计一个个人技术知识库。</span></div></div><div><div><div>2</div></div><div>
</div></div><div><div><div>3</div></div><div><span>主要内容：</span></div></div><div><div><div>4</div></div><div><span>- Java 后端</span></div></div><div><div><div>5</div></div><div><span>- AI Coding</span></div></div><div><div><div>6</div></div><div><span>- Windows</span></div></div><div><div><div>7</div></div><div><span>- Linux / Server</span></div></div><div><div><div>8</div></div><div><span>- 网络与代理</span></div></div><div><div><div>9</div></div><div><span>- 开发工具</span></div></div><div><div><div>10</div></div><div>
</div></div><div><div><div>11</div></div><div><span>用户主要行为：</span></div></div><div><div><div>12</div></div><div><span>1. 浏览分类</span></div></div><div><div><div>13</div></div><div><span>2. 搜索文章</span></div></div><div><div><div>14</div></div><div><span>3. 阅读长篇技术文档</span></div></div><div><div><div>15</div></div><div><span>4. 查看代码块</span></div></div><div><div><div>16</div></div><div><span>5. 在不同技术主题之间跳转</span></div></div><div><div><div>17</div></div><div>
</div></div><div><div><div>18</div></div><div><span>目前我没有视觉方向。</span></div></div><div><div><div>19</div></div><div>
</div></div><div><div><div>20</div></div><div><span>暂时不要收敛成一个方案。</span></div></div><div><div><div>21</div></div><div>
</div></div><div><div><div>22</div></div><div><span>请探索 3 个明显不同的设计方向：</span></div></div><div><div><div>23</div></div><div>
</div></div><div><div><div>24</div></div><div><span>A. 技术工具 / Developer Tool 风格</span></div></div><div><div><div>25</div></div><div><span>B. Editorial / 长文阅读风格</span></div></div><div><div><div>26</div></div><div><span>C. 现代 Product / SaaS 风格</span></div></div><div><div><div>27</div></div><div>
</div></div><div><div><div>28</div></div><div><span>三个方向必须在：</span></div></div><div><div><div>29</div></div><div><span>Typography</span></div></div><div><div><div>30</div></div><div><span>Color</span></div></div><div><div><div>31</div></div><div><span>Navigation</span></div></div><div><div><div>32</div></div><div><span>Density</span></div></div><div><div><div>33</div></div><div><span>Surface</span></div></div><div><div><div>34</div></div><div><span>Article Layout</span></div></div><div><div><div>35</div></div><div><span>Code Block</span></div></div><div><div><div>36</div></div><div><span>Spacing</span></div></div><div><div><div>37</div></div><div><span>Motion</span></div></div><div><div><div>38</div></div><div>
</div></div><div><div><div>39</div></div><div><span>方面有明显区别。</span></div></div><div><div><div>40</div></div><div>
</div></div><div><div><div>41</div></div><div><span>避免：</span></div></div><div><div><div>42</div></div><div><span>- 紫蓝渐变</span></div></div><div><div><div>43</div></div><div><span>- 大量卡片</span></div></div><div><div><div>44</div></div><div><span>- Glassmorphism</span></div></div><div><div><div>45</div></div><div><span>- 巨型圆角</span></div></div><div><div><div>46</div></div><div><span>- 典型 AI SaaS Landing Page</span></div></div><div><div><div>47</div></div><div>
</div></div><div><div><div>48</div></div><div><span>先做视觉探索，不要急着完成最终页面。</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div><section><h4>你会做什么<a href="#你会做什么"><span>#</span></a></h4><p>你只需要比较：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>A：看着像开发工具，我喜欢</span></div></div><div><div><div>2</div></div><div><span>B：阅读体验舒服，我喜欢</span></div></div><div><div><div>3</div></div><div><span>C：太像 SaaS，我不喜欢</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>然后继续：</p><div><div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>以 B 为主。</span></div></div><div><div><div>2</div></div><div>
</div></div><div><div><div>3</div></div><div><span>保留 B 的：</span></div></div><div><div><div>4</div></div><div><span>- Typography</span></div></div><div><div><div>5</div></div><div><span>- 内容布局</span></div></div><div><div><div>6</div></div><div><span>- 阅读宽度</span></div></div><div><div><div>7</div></div><div><span>- 页面留白</span></div></div><div><div><div>8</div></div><div>
</div></div><div><div><div>9</div></div><div><span>加入 A 的：</span></div></div><div><div><div>10</div></div><div><span>- 左侧导航</span></div></div><div><div><div>11</div></div><div><span>- 搜索体验</span></div></div><div><div><div>12</div></div><div><span>- Code Block</span></div></div><div><div><div>13</div></div><div><span>- 技术感细节</span></div></div><div><div><div>14</div></div><div>
</div></div><div><div><div>15</div></div><div><span>重新整理成一个统一方向。</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div><p>最后：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>请将目前确定的视觉规则整理为 DESIGN.md。</span></div></div><div><div><div>2</div></div><div><span>要求能够直接提供给 Claude Code / Codex 使用。</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h4>最适合使用 Stitch 的时候<a href="#最适合使用-stitch-的时候"><span>#</span></a></h4><ul>
<li>新项目</li>
<li>完全没设计方向</li>
<li>想同时比较多个方向</li>
<li>想通过视觉结果而不是文字描述挑风格</li>
<li>想最后输出 DESIGN.md</li>
</ul><hr /></section></section></section><section><h2>4. Refero Styles：不知道目标网站时如何找风格<a href="#4-refero-styles不知道目标网站时如何找风格"><span>#</span></a></h2><p>官网：</p><p><a href="https://styles.refero.design/" target="_blank">https://styles.refero.design/</a></p><p>DESIGN.md 示例：</p><p><a href="https://styles.refero.design/ai-agents/design-md-examples" target="_blank">https://styles.refero.design/ai-agents/design-md-examples</a></p><section><h3>4.1 最容易误解的地方<a href="#41-最容易误解的地方"><span>#</span></a></h3><p>Refero Styles <strong>不是必须先知道某个网站名称才可以使用。</strong></p><p>在完全没方向时，不应该先搜：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Linear</span></div></div><div><div><div>2</div></div><div><span>Notion</span></div></div><div><div><div>3</div></div><div><span>Stripe</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>而应该先按以下几个维度找：</p><section><h4>产品类型<a href="#产品类型"><span>#</span></a></h4><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>documentation</span></div></div><div><div><div>2</div></div><div><span>developer tools</span></div></div><div><div><div>3</div></div><div><span>SaaS</span></div></div><div><div><div>4</div></div><div><span>dashboard</span></div></div><div><div><div>5</div></div><div><span>analytics</span></div></div><div><div><div>6</div></div><div><span>knowledge base</span></div></div><div><div><div>7</div></div><div><span>portfolio</span></div></div><div><div><div>8</div></div><div><span>blog</span></div></div><div><div><div>9</div></div><div><span>AI startup</span></div></div><div><div><div>10</div></div><div><span>productivity</span></div></div><div><div><div>11</div></div><div><span>finance</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h4>页面类型<a href="#页面类型"><span>#</span></a></h4><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>landing page</span></div></div><div><div><div>2</div></div><div><span>docs</span></div></div><div><div><div>3</div></div><div><span>dashboard</span></div></div><div><div><div>4</div></div><div><span>settings</span></div></div><div><div><div>5</div></div><div><span>pricing</span></div></div><div><div><div>6</div></div><div><span>article</span></div></div><div><div><div>7</div></div><div><span>editorial</span></div></div><div><div><div>8</div></div><div><span>onboarding</span></div></div><div><div><div>9</div></div><div><span>authentication</span></div></div><div><div><div>10</div></div><div><span>search</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h4>视觉气质<a href="#视觉气质"><span>#</span></a></h4><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>minimal technical</span></div></div><div><div><div>2</div></div><div><span>warm editorial</span></div></div><div><div><div>3</div></div><div><span>quiet</span></div></div><div><div><div>4</div></div><div><span>premium</span></div></div><div><div><div>5</div></div><div><span>monochrome</span></div></div><div><div><div>6</div></div><div><span>dark technical</span></div></div><div><div><div>7</div></div><div><span>clean SaaS</span></div></div><div><div><div>8</div></div><div><span>soft</span></div></div><div><div><div>9</div></div><div><span>playful</span></div></div><div><div><div>10</div></div><div><span>brutalist</span></div></div><div><div><div>11</div></div><div><span>high contrast</span></div></div><div><div><div>12</div></div><div><span>warm paper</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h4>Typography / Color<a href="#typography--color"><span>#</span></a></h4><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>serif editorial</span></div></div><div><div><div>2</div></div><div><span>monospace technical</span></div></div><div><div><div>3</div></div><div><span>warm cream</span></div></div><div><div><div>4</div></div><div><span>black and white</span></div></div><div><div><div>5</div></div><div><span>dark blue</span></div></div><div><div><div>6</div></div><div><span>earth tones</span></div></div><div><div><div>7</div></div><div><span>high contrast typography</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section></section><section><h3>4.2 实际模拟：完全不知道网站目标<a href="#42-实际模拟完全不知道网站目标"><span>#</span></a></h3><p>假设你要做：</p><blockquote><p>个人技术知识库。</p></blockquote><section><h4>第一轮搜索<a href="#第一轮搜索"><span>#</span></a></h4><p>先不要带品牌名。</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>documentation</span></div></div><div><div><div>2</div></div><div><span>developer tools</span></div></div><div><div><div>3</div></div><div><span>editorial</span></div></div><div><div><div>4</div></div><div><span>content rich</span></div></div><div><div><div>5</div></div><div><span>knowledge base</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>先观察你更容易被哪种视觉类型吸引。</p><p>假设结果显示你明显喜欢：</p><ul>
<li>Warm paper</li>
<li>Serif title</li>
<li>Clean navigation</li>
<li>高阅读性</li>
<li>少 Card</li>
</ul><p>那么进入第二轮。</p></section><section><h4>第二轮搜索<a href="#第二轮搜索"><span>#</span></a></h4><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>warm editorial</span></div></div><div><div><div>2</div></div><div><span>editorial tech</span></div></div><div><div><div>3</div></div><div><span>technical journal</span></div></div><div><div><div>4</div></div><div><span>warm paper</span></div></div><div><div><div>5</div></div><div><span>minimal editorial</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h4>第三轮收敛<a href="#第三轮收敛"><span>#</span></a></h4><p>假设最终看到三个喜欢的 Design：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>A：Warm Editorial</span></div></div><div><div><div>2</div></div><div><span>B：Technical Journal</span></div></div><div><div><div>3</div></div><div><span>C：Minimal Documentation</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>这时候不要问：</p><blockquote><p>哪个品牌最牛？</p></blockquote><p>而应该比较：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>A 的 Typography 最喜欢</span></div></div><div><div><div>2</div></div><div><span>B 的导航最喜欢</span></div></div><div><div><div>3</div></div><div><span>C 的代码块和文档结构最喜欢</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>然后把三者交给 Agent：</p><div><div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>我选择了 3 个 Refero Styles 参考。</span></div></div><div><div><div>2</div></div><div>
</div></div><div><div><div>3</div></div><div><span>参考 A：</span></div></div><div><div><div>4</div></div><div><span>主要借鉴 Typography、文章阅读感。</span></div></div><div><div><div>5</div></div><div>
</div></div><div><div><div>6</div></div><div><span>参考 B：</span></div></div><div><div><div>7</div></div><div><span>主要借鉴 Sidebar、页面层级。</span></div></div><div><div><div>8</div></div><div>
</div></div><div><div><div>9</div></div><div><span>参考 C：</span></div></div><div><div><div>10</div></div><div><span>主要借鉴 Code Block、Documentation Layout。</span></div></div><div><div><div>11</div></div><div>
</div></div><div><div><div>12</div></div><div><span>不要复制任何网站。</span></div></div><div><div><div>13</div></div><div>
</div></div><div><div><div>14</div></div><div><span>请抽象这些参考共同适合当前项目的规则，</span></div></div><div><div><div>15</div></div><div><span>形成一套新的 DESIGN.md。</span></div></div><div><div><div>16</div></div><div>
</div></div><div><div><div>17</div></div><div><span>如果规则冲突：</span></div></div><div><div><div>18</div></div><div><span>优先级为：</span></div></div><div><div><div>19</div></div><div><span>1. 阅读体验</span></div></div><div><div><div>20</div></div><div><span>2. 信息层级</span></div></div><div><div><div>21</div></div><div><span>3. 技术感</span></div></div><div><div><div>22</div></div><div><span>4. 装饰性</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div></section></section><section><h3>4.3 找到一个喜欢的 DESIGN.md 后怎么用<a href="#43-找到一个喜欢的-designmd-后怎么用"><span>#</span></a></h3><p>假设 Refero Styles 某个页面提供 DESIGN.md。</p><p>复制到项目：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>DESIGN-REFERENCE.md</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>不要直接说：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>照着它复制。</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>推荐：</p><div><div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>读取 DESIGN-REFERENCE.md。</span></div></div><div><div><div>2</div></div><div>
</div></div><div><div><div>3</div></div><div><span>这是视觉参考，不是需要复制的网站。</span></div></div><div><div><div>4</div></div><div>
</div></div><div><div><div>5</div></div><div><span>先分析其中：</span></div></div><div><div><div>6</div></div><div><span>- Color</span></div></div><div><div><div>7</div></div><div><span>- Typography</span></div></div><div><div><div>8</div></div><div><span>- Spacing</span></div></div><div><div><div>9</div></div><div><span>- Layout</span></div></div><div><div><div>10</div></div><div><span>- Surface</span></div></div><div><div><div>11</div></div><div><span>- Border</span></div></div><div><div><div>12</div></div><div><span>- Shadow</span></div></div><div><div><div>13</div></div><div><span>- Radius</span></div></div><div><div><div>14</div></div><div><span>- Navigation</span></div></div><div><div><div>15</div></div><div><span>- Content hierarchy</span></div></div><div><div><div>16</div></div><div>
</div></div><div><div><div>17</div></div><div><span>结合当前产品实际需求，</span></div></div><div><div><div>18</div></div><div><span>重新生成本项目自己的 DESIGN.md。</span></div></div><div><div><div>19</div></div><div>
</div></div><div><div><div>20</div></div><div><span>允许继承其设计语言，</span></div></div><div><div><div>21</div></div><div><span>禁止复制：</span></div></div><div><div><div>22</div></div><div><span>- 品牌</span></div></div><div><div><div>23</div></div><div><span>- 文案</span></div></div><div><div><div>24</div></div><div><span>- Logo</span></div></div><div><div><div>25</div></div><div><span>- 独特业务组件</span></div></div><div><div><div>26</div></div><div><span>- 页面内容</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div></section><section><h3>4.4 最适合 Refero Styles 的时候<a href="#44-最适合-refero-styles-的时候"><span>#</span></a></h3><ul>
<li>不知道具体网站</li>
<li>但可以通过“看图”判断喜欢不喜欢</li>
<li>想得到具体 DESIGN.md，而不是一句“高级、现代”</li>
<li>希望 Claude/Codex 有明确的 Typography / Color / Spacing 参考</li>
</ul><hr /></section></section><section><h2>5. Refero MCP + Refero Skill：让 Agent 自动研究真实产品<a href="#5-refero-mcp--refero-skill让-agent-自动研究真实产品"><span>#</span></a></h2><p>官网：</p><p><a href="https://refero.design/mcp" target="_blank">https://refero.design/mcp</a></p><p>Refero Skill 官方安装方式：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>npx</span><span> </span><span>skills</span><span> </span><span>add</span><span> </span><span>https://github.com/referodesign/refero_skill</span></div></div></code></pre><div><div></div><div></div></div></figure></div><blockquote><p>MCP 当前属于 Refero Pro 能力。首次调用会进行浏览器授权，之后 Agent 可以直接搜索 Refero 的真实产品页面与 Flow。</p></blockquote><section><h3>5.1 它和 Refero Styles 的区别<a href="#51-它和-refero-styles-的区别"><span>#</span></a></h3><section><h4>Refero Styles<a href="#refero-styles"><span>#</span></a></h4><p>你自己：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>搜索 → 看 → 选 → 给 AI</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h4>Refero MCP<a href="#refero-mcp"><span>#</span></a></h4><p>Agent：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>理解需求</span></div></div><div><div><div>2</div></div><div><span>↓</span></div></div><div><div><div>3</div></div><div><span>自己搜索真实 UI</span></div></div><div><div><div>4</div></div><div><span>↓</span></div></div><div><div><div>5</div></div><div><span>比较多个产品</span></div></div><div><div><div>6</div></div><div><span>↓</span></div></div><div><div><div>7</div></div><div><span>提取模式</span></div></div><div><div><div>8</div></div><div><span>↓</span></div></div><div><div><div>9</div></div><div><span>设计</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>更适合 Claude Code / Codex 工作流。</p></section></section><section><h3>5.2 实际模拟：让 Agent 自己找参考<a href="#52-实际模拟让-agent-自己找参考"><span>#</span></a></h3><p>对 Claude Code / Codex：</p><div><div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>当前项目没有明确 UI 方向。</span></div></div><div><div><div>2</div></div><div>
</div></div><div><div><div>3</div></div><div><span>禁止直接写页面。</span></div></div><div><div><div>4</div></div><div>
</div></div><div><div><div>5</div></div><div><span>先使用 Refero 做设计研究。</span></div></div><div><div><div>6</div></div><div>
</div></div><div><div><div>7</div></div><div><span>项目类型：</span></div></div><div><div><div>8</div></div><div><span>个人技术知识库。</span></div></div><div><div><div>9</div></div><div>
</div></div><div><div><div>10</div></div><div><span>重点页面：</span></div></div><div><div><div>11</div></div><div><span>- 首页</span></div></div><div><div><div>12</div></div><div><span>- 分类页</span></div></div><div><div><div>13</div></div><div><span>- 文章详情</span></div></div><div><div><div>14</div></div><div><span>- 搜索</span></div></div><div><div><div>15</div></div><div><span>- 移动端文章阅读</span></div></div><div><div><div>16</div></div><div>
</div></div><div><div><div>17</div></div><div><span>研究任务：</span></div></div><div><div><div>18</div></div><div>
</div></div><div><div><div>19</div></div><div><span>1. 搜索真实 Documentation / Developer Tool / Knowledge Base 产品。</span></div></div><div><div><div>20</div></div><div><span>2. 至少分析 10 个相关页面。</span></div></div><div><div><div>21</div></div><div><span>3. 不要只分析 Landing Page。</span></div></div><div><div><div>22</div></div><div><span>4. 优先查看：</span></div></div><div><div><div>23</div></div><div><span><span>   </span></span><span>- Sidebar</span></div></div><div><div><div>24</div></div><div><span><span>   </span></span><span>- Article layout</span></div></div><div><div><div>25</div></div><div><span><span>   </span></span><span>- Search</span></div></div><div><div><div>26</div></div><div><span><span>   </span></span><span>- Table of contents</span></div></div><div><div><div>27</div></div><div><span><span>   </span></span><span>- Code blocks</span></div></div><div><div><div>28</div></div><div><span><span>   </span></span><span>- Mobile navigation</span></div></div><div><div><div>29</div></div><div><span>5. 提取共同模式。</span></div></div><div><div><div>30</div></div><div><span>6. 再提出 3 个视觉方向。</span></div></div><div><div><div>31</div></div><div>
</div></div><div><div><div>32</div></div><div><span>暂时不要修改代码。</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div><section><h4>第二轮<a href="#第二轮"><span>#</span></a></h4><div><div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>三个方向中我选择方向 B。</span></div></div><div><div><div>2</div></div><div>
</div></div><div><div><div>3</div></div><div><span>继续使用 Refero 搜索与方向 B 最接近的真实产品页面。</span></div></div><div><div><div>4</div></div><div>
</div></div><div><div><div>5</div></div><div><span>重点验证：</span></div></div><div><div><div>6</div></div><div><span>- 内容宽度</span></div></div><div><div><div>7</div></div><div><span>- Sidebar 密度</span></div></div><div><div><div>8</div></div><div><span>- Typography</span></div></div><div><div><div>9</div></div><div><span>- Code block</span></div></div><div><div><div>10</div></div><div><span>- Search</span></div></div><div><div><div>11</div></div><div><span>- Article navigation</span></div></div><div><div><div>12</div></div><div>
</div></div><div><div><div>13</div></div><div><span>不要复制某一个产品，</span></div></div><div><div><div>14</div></div><div><span>而是从多个参考中归纳设计规律。</span></div></div><div><div><div>15</div></div><div>
</div></div><div><div><div>16</div></div><div><span>完成后生成 DESIGN.md。</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div></section></section><section><h3>5.3 MCP 的最大价值<a href="#53-mcp-的最大价值"><span>#</span></a></h3><p>普通 AI：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>“Settings 页面应该怎么设计？”</span></div></div><div><div><div>2</div></div><div><span>→ 根据训练记忆想象</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>Refero MCP：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>“Settings 页面应该怎么设计？”</span></div></div><div><div><div>2</div></div><div><span>→ 搜真实产品</span></div></div><div><div><div>3</div></div><div><span>→ 看布局</span></div></div><div><div><div>4</div></div><div><span>→ 看信息结构</span></div></div><div><div><div>5</div></div><div><span>→ 比较</span></div></div><div><div><div>6</div></div><div><span>→ 再设计</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>所以它更像：</p><blockquote><p><strong>给 Coding Agent 增加一个 UI 研究员。</strong></p></blockquote><hr /></section></section><section><h2>6. Anthropic frontend-design：Claude 官方前端设计 Skill<a href="#6-anthropic-frontend-designclaude-官方前端设计-skill"><span>#</span></a></h2><p>官方仓库：</p><p><a href="https://github.com/anthropics/claude-code/tree/main/plugins/frontend-design" target="_blank">https://github.com/anthropics/claude-code/tree/main/plugins/frontend-design</a></p><p>Skill：</p><p><a href="https://github.com/anthropics/skills/tree/main/skills/frontend-design" target="_blank">https://github.com/anthropics/skills/tree/main/skills/frontend-design</a></p><p>当前 Claude Code 官方插件仓库中也存在 <code>frontend-design</code>。</p><p>常见安装方式：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>/plugin install frontend-design@claude-plugins-official</span></div></div></code></pre><div><div></div><div></div></div></figure></div><blockquote><p>如果当前 Claude Code 版本 / Plugin 配置存在问题，优先查看官方 <code>claude-plugins-official</code> 和本机 <code>/plugin</code> 列表，不要使用网络上较旧的 marketplace 名称。</p></blockquote><section><h3>6.1 它干什么<a href="#61-它干什么"><span>#</span></a></h3><p>它不是一个组件库。</p><p>它主要改变 Claude 在设计 UI 时的决策方式：</p><div><div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>普通 Claude</span></div></div><div><div><div>2</div></div><div><span>→ 安全</span></div></div><div><div><div>3</div></div><div><span>→ 常规</span></div></div><div><div><div>4</div></div><div><span>→ AI SaaS</span></div></div><div><div><div>5</div></div><div><span>→ Inter</span></div></div><div><div><div>6</div></div><div><span>→ 蓝紫渐变</span></div></div><div><div><div>7</div></div><div><span>→ Card</span></div></div><div><div><div>8</div></div><div>
</div></div><div><div><div>9</div></div><div><span>frontend-design</span></div></div><div><div><div>10</div></div><div><span>→ 先决定明确 aesthetic direction</span></div></div><div><div><div>11</div></div><div><span>→ Typography</span></div></div><div><div><div>12</div></div><div><span>→ Color</span></div></div><div><div><div>13</div></div><div><span>→ Composition</span></div></div><div><div><div>14</div></div><div><span>→ Motion</span></div></div><div><div><div>15</div></div><div><span>→ Visual details</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div></section><section><h3>6.2 不推荐这样用<a href="#62-不推荐这样用"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>帮我设计一个后台。</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>虽然会触发 Skill，但是你仍然把太多设计选择留给了模型。</p></section><section><h3>6.3 推荐实际用法<a href="#63-推荐实际用法"><span>#</span></a></h3><div><div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>使用 frontend-design skill。</span></div></div><div><div><div>2</div></div><div>
</div></div><div><div><div>3</div></div><div><span>这是一个新的技术知识库项目。</span></div></div><div><div><div>4</div></div><div>
</div></div><div><div><div>5</div></div><div><span>先不要实现。</span></div></div><div><div><div>6</div></div><div>
</div></div><div><div><div>7</div></div><div><span>读取：</span></div></div><div><div><div>8</div></div><div><span>- PRODUCT.md</span></div></div><div><div><div>9</div></div><div><span>- DESIGN.md</span></div></div><div><div><div>10</div></div><div><span>- 当前页面代码</span></div></div><div><div><div>11</div></div><div>
</div></div><div><div><div>12</div></div><div><span>先总结：</span></div></div><div><div><div>13</div></div><div><span>1. 产品是什么</span></div></div><div><div><div>14</div></div><div><span>2. 用户主要任务</span></div></div><div><div><div>15</div></div><div><span>3. 当前视觉方向</span></div></div><div><div><div>16</div></div><div><span>4. 当前 DESIGN.md 最重要的 10 条约束</span></div></div><div><div><div>17</div></div><div>
</div></div><div><div><div>18</div></div><div><span>然后设计 Article Detail 页面。</span></div></div><div><div><div>19</div></div><div>
</div></div><div><div><div>20</div></div><div><span>要求：</span></div></div><div><div><div>21</div></div><div><span>- DESIGN.md 是视觉 Source of Truth</span></div></div><div><div><div>22</div></div><div><span>- 内容阅读优先</span></div></div><div><div><div>23</div></div><div><span>- 不要为了视觉效果降低信息密度</span></div></div><div><div><div>24</div></div><div><span>- 不要引入与 DESIGN.md 冲突的新颜色</span></div></div><div><div><div>25</div></div><div><span>- 不要自行换 Typography</span></div></div><div><div><div>26</div></div><div><span>- 不要添加无意义 Card / Badge / Gradient</span></div></div><div><div><div>27</div></div><div>
</div></div><div><div><div>28</div></div><div><span>先给页面结构方案，</span></div></div><div><div><div>29</div></div><div><span>确认结构合理后再实现。</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div></section><section><h3>6.4 完全没有 DESIGN.md 时<a href="#64-完全没有-designmd-时"><span>#</span></a></h3><div><div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>使用 frontend-design skill。</span></div></div><div><div><div>2</div></div><div>
</div></div><div><div><div>3</div></div><div><span>当前项目没有 DESIGN.md，也没有确定的 UI 方向。</span></div></div><div><div><div>4</div></div><div>
</div></div><div><div><div>5</div></div><div><span>暂时不要写代码。</span></div></div><div><div><div>6</div></div><div>
</div></div><div><div><div>7</div></div><div><span>请根据：</span></div></div><div><div><div>8</div></div><div><span>- 产品属性</span></div></div><div><div><div>9</div></div><div><span>- 目标用户</span></div></div><div><div><div>10</div></div><div><span>- 页面任务</span></div></div><div><div><div>11</div></div><div><span>- 内容密度</span></div></div><div><div><div>12</div></div><div>
</div></div><div><div><div>13</div></div><div><span>提出 3 个明显不同的视觉方向。</span></div></div><div><div><div>14</div></div><div>
</div></div><div><div><div>15</div></div><div><span>三个方向不能只是换颜色。</span></div></div><div><div><div>16</div></div><div>
</div></div><div><div><div>17</div></div><div><span>每个方向分别定义：</span></div></div><div><div><div>18</div></div><div><span>- Design philosophy</span></div></div><div><div><div>19</div></div><div><span>- Typography</span></div></div><div><div><div>20</div></div><div><span>- Color</span></div></div><div><div><div>21</div></div><div><span>- Layout</span></div></div><div><div><div>22</div></div><div><span>- Density</span></div></div><div><div><div>23</div></div><div><span>- Navigation</span></div></div><div><div><div>24</div></div><div><span>- Surface</span></div></div><div><div><div>25</div></div><div><span>- Radius</span></div></div><div><div><div>26</div></div><div><span>- Shadow</span></div></div><div><div><div>27</div></div><div><span>- Motion</span></div></div><div><div><div>28</div></div><div><span>- Anti-pattern</span></div></div><div><div><div>29</div></div><div>
</div></div><div><div><div>30</div></div><div><span>完成后等待选择。</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div><hr /></section></section><section><h2>7. Impeccable：设计审查、Polish 与去 AI 味<a href="#7-impeccable设计审查polish-与去-ai-味"><span>#</span></a></h2><p>GitHub：</p><p><a href="https://github.com/pbakaus/impeccable" target="_blank">https://github.com/pbakaus/impeccable</a></p><p>官网：</p><p><a href="https://impeccable.style/" target="_blank">https://impeccable.style/</a></p><p>当前推荐安装：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>npx</span><span> </span><span>impeccable</span><span> </span><span>install</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>它可以检测 Claude、Codex、Cursor 等不同环境，并安装对应 Skill / Hook。</p><p>Codex 中通常通过 Skills 使用，例如：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>$impeccable</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>Claude Code 中使用：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>/impeccable &lt;command&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div><section><h3>7.1 重要命令<a href="#71-重要命令"><span>#</span></a></h3><div><div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>/impeccable init</span></div></div><div><div><div>2</div></div><div><span>/impeccable craft</span></div></div><div><div><div>3</div></div><div><span>/impeccable shape</span></div></div><div><div><div>4</div></div><div><span>/impeccable document</span></div></div><div><div><div>5</div></div><div><span>/impeccable critique</span></div></div><div><div><div>6</div></div><div><span>/impeccable audit</span></div></div><div><div><div>7</div></div><div><span>/impeccable polish</span></div></div><div><div><div>8</div></div><div><span>/impeccable typeset</span></div></div><div><div><div>9</div></div><div><span>/impeccable layout</span></div></div><div><div><div>10</div></div><div><span>/impeccable colorize</span></div></div><div><div><div>11</div></div><div><span>/impeccable animate</span></div></div><div><div><div>12</div></div><div><span>/impeccable harden</span></div></div><div><div><div>13</div></div><div><span>/impeccable quieter</span></div></div><div><div><div>14</div></div><div><span>/impeccable bolder</span></div></div><div><div><div>15</div></div><div><span>/impeccable distill</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div><section><h4>含义<a href="#含义"><span>#</span></a></h4><div><div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>init</span></div></div><div><div><div>2</div></div><div><span>→ 初始化产品上下文，形成 PRODUCT.md</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span>shape</span></div></div><div><div><div>5</div></div><div><span>→ 写代码前规划 UX/UI</span></div></div><div><div><div>6</div></div><div>
</div></div><div><div><div>7</div></div><div><span>document</span></div></div><div><div><div>8</div></div><div><span>→ 从现有实现整理 DESIGN.md</span></div></div><div><div><div>9</div></div><div>
</div></div><div><div><div>10</div></div><div><span>critique</span></div></div><div><div><div>11</div></div><div><span>→ 从设计角度批评当前页面</span></div></div><div><div><div>12</div></div><div>
</div></div><div><div><div>13</div></div><div><span>audit</span></div></div><div><div><div>14</div></div><div><span>→ 无障碍、响应式、性能等质量检查</span></div></div><div><div><div>15</div></div><div>
</div></div><div><div><div>16</div></div><div><span>polish</span></div></div><div><div><div>17</div></div><div><span>→ 最终设计打磨</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div></section></section><section><h3>7.2 最适合你的使用方式<a href="#72-最适合你的使用方式"><span>#</span></a></h3><p>不要把 Impeccable 当：</p><blockquote><p>“一键把丑页面变漂亮。”</p></blockquote><p>最好当：</p><blockquote><p><strong>设计 QA + 第二个设计师。</strong></p></blockquote><section><h4>实际工作流<a href="#实际工作流"><span>#</span></a></h4><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>/impeccable init</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>接着完成一个页面。</p><p>然后：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>/impeccable critique article page</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>让它找：</p><ul>
<li>hierarchy</li>
<li>typography</li>
<li>spacing</li>
<li>information density</li>
<li>visual balance</li>
<li>generic AI patterns</li>
</ul><p>修复后：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>/impeccable audit article page</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>检查：</p><ul>
<li>accessibility</li>
<li>responsive</li>
<li>interaction state</li>
<li>overflow</li>
<li>performance</li>
</ul><p>最后：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>/impeccable polish article page</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section></section><section><h3>7.3 实际模拟 Prompt<a href="#73-实际模拟-prompt"><span>#</span></a></h3><p>即使不用 slash command，也可以这样表达：</p><div><div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>使用 Impeccable 对当前首页做 critique。</span></div></div><div><div><div>2</div></div><div>
</div></div><div><div><div>3</div></div><div><span>暂时不要修改代码。</span></div></div><div><div><div>4</div></div><div>
</div></div><div><div><div>5</div></div><div><span>从以下维度逐项检查：</span></div></div><div><div><div>6</div></div><div><span>- 页面视觉焦点</span></div></div><div><div><div>7</div></div><div><span>- Typography hierarchy</span></div></div><div><div><div>8</div></div><div><span>- Layout rhythm</span></div></div><div><div><div>9</div></div><div><span>- Spacing</span></div></div><div><div><div>10</div></div><div><span>- Alignment</span></div></div><div><div><div>11</div></div><div><span>- Color</span></div></div><div><div><div>12</div></div><div><span>- Contrast</span></div></div><div><div><div>13</div></div><div><span>- Information density</span></div></div><div><div><div>14</div></div><div><span>- Component repetition</span></div></div><div><div><div>15</div></div><div><span>- Card nesting</span></div></div><div><div><div>16</div></div><div><span>- Radius</span></div></div><div><div><div>17</div></div><div><span>- Shadow</span></div></div><div><div><div>18</div></div><div><span>- Decorative elements</span></div></div><div><div><div>19</div></div><div><span>- Mobile</span></div></div><div><div><div>20</div></div><div><span>- AI-generated UI patterns</span></div></div><div><div><div>21</div></div><div>
</div></div><div><div><div>22</div></div><div><span>把问题按：</span></div></div><div><div><div>23</div></div><div><span>P0 / P1 / P2</span></div></div><div><div><div>24</div></div><div>
</div></div><div><div><div>25</div></div><div><span>分级。</span></div></div><div><div><div>26</div></div><div>
</div></div><div><div><div>27</div></div><div><span>每个问题说明：</span></div></div><div><div><div>28</div></div><div><span>1. 在哪里</span></div></div><div><div><div>29</div></div><div><span>2. 为什么有问题</span></div></div><div><div><div>30</div></div><div><span>3. 应该怎么改</span></div></div><div><div><div>31</div></div><div>
</div></div><div><div><div>32</div></div><div><span>先只输出审查报告。</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div><p>之后：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>根据刚才 critique 的 P0/P1 问题做一次集中修复。</span></div></div><div><div><div>2</div></div><div>
</div></div><div><div><div>3</div></div><div><span>不要借机整体重构页面。</span></div></div><div><div><div>4</div></div><div><span>不要改变已经确认的 DESIGN.md。</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>最后：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>/impeccable polish</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section></section><section><h2>8. 21st.dev MCP / CLI：搜索真实组件而不是让 AI 瞎造<a href="#8-21stdev-mcp--cli搜索真实组件而不是让-ai-瞎造"><span>#</span></a></h2><p>官网：</p><p><a href="https://21st.dev/" target="_blank">https://21st.dev/</a></p><p>Agent / MCP：</p><p><a href="https://21st.dev/mcp" target="_blank">https://21st.dev/mcp</a></p><p>它的核心思想：</p><blockquote><p>Agent 不需要每次从模型记忆中重新发明 Pricing、Hero、Navbar、Dialog、Settings。</p></blockquote><p>可以直接：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>21st</span><span> </span><span>search</span><span> </span><span>"pricing table"</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>或者生成多个候选：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>21st</span><span> </span><span>generate</span><span> </span><span>"a pricing table"</span><span> </span><span>--variants</span><span> </span><span>3</span></div></div></code></pre><div><div></div><div></div></div></figure></div><section><h3>8.1 实际模拟：Dashboard<a href="#81-实际模拟dashboard"><span>#</span></a></h3><p>对 Agent：</p><div><div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>不要自己从零设计 Dashboard Summary Cards。</span></div></div><div><div><div>2</div></div><div>
</div></div><div><div><div>3</div></div><div><span>使用 21st 搜索现有高质量组件。</span></div></div><div><div><div>4</div></div><div>
</div></div><div><div><div>5</div></div><div><span>需求：</span></div></div><div><div><div>6</div></div><div><span>- React</span></div></div><div><div><div>7</div></div><div><span>- Tailwind</span></div></div><div><div><div>8</div></div><div><span>- 不要大面积 Gradient</span></div></div><div><div><div>9</div></div><div><span>- 不要 Glassmorphism</span></div></div><div><div><div>10</div></div><div><span>- Radius &lt;= 10px</span></div></div><div><div><div>11</div></div><div><span>- Desktop 信息密度中高</span></div></div><div><div><div>12</div></div><div><span>- 支持 Dark Mode</span></div></div><div><div><div>13</div></div><div><span>- Hover 要克制</span></div></div><div><div><div>14</div></div><div>
</div></div><div><div><div>15</div></div><div><span>先搜索候选。</span></div></div><div><div><div>16</div></div><div>
</div></div><div><div><div>17</div></div><div><span>给我 3 个方向，</span></div></div><div><div><div>18</div></div><div><span>暂时不要安装。</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div><p>或者 CLI：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>21st</span><span> </span><span>search</span><span> </span><span>"analytics dashboard cards"</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>8.2 确认后再安装 / 使用<a href="#82-确认后再安装--使用"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>选择候选 2。</span></div></div><div><div><div>2</div></div><div>
</div></div><div><div><div>3</div></div><div><span>安装以后不要原样使用。</span></div></div><div><div><div>4</div></div><div>
</div></div><div><div><div>5</div></div><div><span>请根据 DESIGN.md 修改：</span></div></div><div><div><div>6</div></div><div><span>- Color</span></div></div><div><div><div>7</div></div><div><span>- Typography</span></div></div><div><div><div>8</div></div><div><span>- Radius</span></div></div><div><div><div>9</div></div><div><span>- Border</span></div></div><div><div><div>10</div></div><div><span>- Spacing</span></div></div><div><div><div>11</div></div><div><span>- Interaction</span></div></div><div><div><div>12</div></div><div>
</div></div><div><div><div>13</div></div><div><span>最终效果必须属于我们自己的设计系统。</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>8.3 21st 特别适合做什么<a href="#83-21st-特别适合做什么"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Hero</span></div></div><div><div><div>2</div></div><div><span>Pricing</span></div></div><div><div><div>3</div></div><div><span>Dashboard card</span></div></div><div><div><div>4</div></div><div><span>Navbar</span></div></div><div><div><div>5</div></div><div><span>Settings panel</span></div></div><div><div><div>6</div></div><div><span>Data visualization container</span></div></div><div><div><div>7</div></div><div><span>CTA</span></div></div><div><div><div>8</div></div><div><span>Testimonials</span></div></div><div><div><div>9</div></div><div><span>Feature section</span></div></div><div><div><div>10</div></div><div><span>Command menu</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>8.4 一个很好的探索命令<a href="#84-一个很好的探索命令"><span>#</span></a></h3><p>自然语言：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>show me three directions for this page</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>这是正确顺序：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>先看三个方向</span></div></div><div><div><div>2</div></div><div><span>→ 再选</span></div></div><div><div><div>3</div></div><div><span>→ 再 Build</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>而不是：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>直接 Build</span></div></div><div><div><div>2</div></div><div><span>→ 不喜欢</span></div></div><div><div><div>3</div></div><div><span>→ 重写</span></div></div><div><div><div>4</div></div><div><span>→ 又不喜欢</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section></section><section><h2>9. UI/UX Pro Max：自动生成设计系统候选<a href="#9-uiux-pro-max自动生成设计系统候选"><span>#</span></a></h2><p>GitHub：</p><p><a href="https://github.com/nextlevelbuilder/ui-ux-pro-max-skill" target="_blank">https://github.com/nextlevelbuilder/ui-ux-pro-max-skill</a></p><p>官网：</p><p><a href="https://uupm.cc" target="_blank">https://uupm.cc</a></p><p>当前 Skill 数据包括大量：</p><ul>
<li>UI styles</li>
<li>Color palettes</li>
<li>Font pairings</li>
<li>UX guidelines</li>
<li>Chart types</li>
<li>Tech stacks</li>
</ul><section><h3>9.1 安装<a href="#91-安装"><span>#</span></a></h3><p>Claude：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>npx</span><span> </span><span>ui-ux-pro-max-cli</span><span> </span><span>init</span><span> </span><span>--ai</span><span> </span><span>claude</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>Codex：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>npx</span><span> </span><span>ui-ux-pro-max-cli</span><span> </span><span>init</span><span> </span><span>--ai</span><span> </span><span>codex</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>9.2 最适合做什么<a href="#92-最适合做什么"><span>#</span></a></h3><p>它非常适合：</p><blockquote><p><strong>从产品描述推导设计系统候选。</strong></p></blockquote><p>例如：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>knowledge base</span></div></div><div><div><div>2</div></div><div><span>developer docs</span></div></div><div><div><div>3</div></div><div><span>technical editorial</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>让它在自己的设计数据库里找：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Style</span></div></div><div><div><div>2</div></div><div><span>Color</span></div></div><div><div><div>3</div></div><div><span>Typography</span></div></div><div><div><div>4</div></div><div><span>Effects</span></div></div><div><div><div>5</div></div><div><span>UX rules</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>9.3 实际模拟<a href="#93-实际模拟"><span>#</span></a></h3><p>对 Agent：</p><div><div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>使用 UI/UX Pro Max。</span></div></div><div><div><div>2</div></div><div>
</div></div><div><div><div>3</div></div><div><span>项目：</span></div></div><div><div><div>4</div></div><div><span>个人技术知识库。</span></div></div><div><div><div>5</div></div><div>
</div></div><div><div><div>6</div></div><div><span>关键词：</span></div></div><div><div><div>7</div></div><div><span>developer documentation</span></div></div><div><div><div>8</div></div><div><span>technical editorial</span></div></div><div><div><div>9</div></div><div><span>content-first</span></div></div><div><div><div>10</div></div><div><span>calm</span></div></div><div><div><div>11</div></div><div><span>high readability</span></div></div><div><div><div>12</div></div><div>
</div></div><div><div><div>13</div></div><div><span>请先生成 design system。</span></div></div><div><div><div>14</div></div><div>
</div></div><div><div><div>15</div></div><div><span>不要实现页面。</span></div></div><div><div><div>16</div></div><div>
</div></div><div><div><div>17</div></div><div><span>输出：</span></div></div><div><div><div>18</div></div><div><span>- 推荐 Style</span></div></div><div><div><div>19</div></div><div><span>- Color palette</span></div></div><div><div><div>20</div></div><div><span>- Font pairing</span></div></div><div><div><div>21</div></div><div><span>- Layout</span></div></div><div><div><div>22</div></div><div><span>- Density</span></div></div><div><div><div>23</div></div><div><span>- Effects</span></div></div><div><div><div>24</div></div><div><span>- Anti-patterns</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div><p>它内部的新项目工作流会使用 <code>--design-system</code>。</p><p>手动执行示意：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>python</span><span> </span><span>"&lt;skill-path&gt;/scripts/search.py"</span><span> </span><span>\</span></div></div><div><div><div>2</div></div><div><span>  </span><span>"developer documentation technical editorial"</span><span> </span><span>\</span></div></div><div><div><div>3</div></div><div><span>  </span><span>--design-system</span><span> </span><span>\</span></div></div><div><div><div>4</div></div><div><span>  </span><span>-p</span><span> </span><span>"Personal Knowledge Base"</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>如果想更大胆：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>variance = 8</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>如果想低动效：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>motion = 3</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>如果是 Dashboard：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>density = 8</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>例如：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>python</span><span> </span><span>"&lt;skill-path&gt;/scripts/search.py"</span><span> </span><span>\</span></div></div><div><div><div>2</div></div><div><span>  </span><span>"internal analytics dashboard"</span><span> </span><span>\</span></div></div><div><div><div>3</div></div><div><span>  </span><span>--design-system</span><span> </span><span>\</span></div></div><div><div><div>4</div></div><div><span>  </span><span>--variance</span><span> </span><span>7</span><span> </span><span>\</span></div></div><div><div><div>5</div></div><div><span>  </span><span>--motion</span><span> </span><span>4</span><span> </span><span>\</span></div></div><div><div><div>6</div></div><div><span>  </span><span>--density</span><span> </span><span>8</span><span> </span><span>\</span></div></div><div><div><div>7</div></div><div><span>  </span><span>-p</span><span> </span><span>"Ops Console"</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>9.4 正确定位<a href="#94-正确定位"><span>#</span></a></h3><p>推荐：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>UI/UX Pro Max</span></div></div><div><div><div>2</div></div><div><span>→ 设计知识 / 候选 Design System</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>不要：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>UI/UX Pro Max</span></div></div><div><div><div>2</div></div><div><span>→ 无脑把已有项目全部重构</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>如果已经有成熟的 DESIGN.md：</p><blockquote><p>DESIGN.md 的优先级应该高于新生成的候选风格。</p></blockquote><hr /></section></section><section><h2>10. Figma Make：用可视化方式探索多个方案<a href="#10-figma-make用可视化方式探索多个方案"><span>#</span></a></h2><p>官网：</p><p><a href="https://www.figma.com/make/" target="_blank">https://www.figma.com/make/</a></p><p>Figma Make 支持：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Prompt</span></div></div><div><div><div>2</div></div><div><span>↓</span></div></div><div><div><div>3</div></div><div><span>生成页面 / Prototype</span></div></div><div><div><div>4</div></div><div><span>↓</span></div></div><div><div><div>5</div></div><div><span>视觉编辑</span></div></div><div><div><div>6</div></div><div><span>↓</span></div></div><div><div><div>7</div></div><div><span>继续 Prompt</span></div></div><div><div><div>8</div></div><div><span>↓</span></div></div><div><div><div>9</div></div><div><span>代码</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>它特别适合：</p><blockquote><p>你不知道自己要什么，但是看到图后知道“这个喜欢 / 这个不喜欢”。</p></blockquote><section><h3>10.1 实际模拟<a href="#101-实际模拟"><span>#</span></a></h3><p>输入：</p><div><div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Create three substantially different design directions</span></div></div><div><div><div>2</div></div><div><span>for a developer-focused personal knowledge base.</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span>The site contains:</span></div></div><div><div><div>5</div></div><div><span>- technical articles</span></div></div><div><div><div>6</div></div><div><span>- category navigation</span></div></div><div><div><div>7</div></div><div><span>- global search</span></div></div><div><div><div>8</div></div><div><span>- table of contents</span></div></div><div><div><div>9</div></div><div><span>- code blocks</span></div></div><div><div><div>10</div></div><div><span>- dark mode</span></div></div><div><div><div>11</div></div><div>
</div></div><div><div><div>12</div></div><div><span>Direction A:</span></div></div><div><div><div>13</div></div><div><span>technical product UI</span></div></div><div><div><div>14</div></div><div>
</div></div><div><div><div>15</div></div><div><span>Direction B:</span></div></div><div><div><div>16</div></div><div><span>warm editorial journal</span></div></div><div><div><div>17</div></div><div>
</div></div><div><div><div>18</div></div><div><span>Direction C:</span></div></div><div><div><div>19</div></div><div><span>minimal documentation</span></div></div><div><div><div>20</div></div><div>
</div></div><div><div><div>21</div></div><div><span>Do not just change colors.</span></div></div><div><div><div>22</div></div><div><span>Change typography, density, navigation,</span></div></div><div><div><div>23</div></div><div><span>surface treatment and content composition.</span></div></div><div><div><div>24</div></div><div>
</div></div><div><div><div>25</div></div><div><span>Avoid generic AI SaaS styling.</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div><p>生成之后：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>我喜欢 B。</span></div></div><div><div><div>2</div></div><div>
</div></div><div><div><div>3</div></div><div><span>但是：</span></div></div><div><div><div>4</div></div><div><span>- Sidebar 使用 A</span></div></div><div><div><div>5</div></div><div><span>- Code block 使用 C</span></div></div><div><div><div>6</div></div><div><span>- 保留 B 的文章 Typography</span></div></div><div><div><div>7</div></div><div><span>- 降低装饰性</span></div></div><div><div><div>8</div></div><div><span>- 提高文章列表信息密度</span></div></div><div><div><div>9</div></div><div>
</div></div><div><div><div>10</div></div><div><span>Create a unified version.</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>10.2 最终怎么交给 Coding Agent<a href="#102-最终怎么交给-coding-agent"><span>#</span></a></h3><p>你可以：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Figma Make</span></div></div><div><div><div>2</div></div><div><span>↓</span></div></div><div><div><div>3</div></div><div><span>截图 / Frame / Design Context</span></div></div><div><div><div>4</div></div><div><span>↓</span></div></div><div><div><div>5</div></div><div><span>Claude Code / Codex</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>给 Coding Agent：</p><div><div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>这里是已经确认的 UI 设计。</span></div></div><div><div><div>2</div></div><div>
</div></div><div><div><div>3</div></div><div><span>不要重新进行视觉设计。</span></div></div><div><div><div>4</div></div><div>
</div></div><div><div><div>5</div></div><div><span>请分析：</span></div></div><div><div><div>6</div></div><div><span>- Layout</span></div></div><div><div><div>7</div></div><div><span>- Font hierarchy</span></div></div><div><div><div>8</div></div><div><span>- Spacing</span></div></div><div><div><div>9</div></div><div><span>- Color</span></div></div><div><div><div>10</div></div><div><span>- Radius</span></div></div><div><div><div>11</div></div><div><span>- Border</span></div></div><div><div><div>12</div></div><div><span>- Component structure</span></div></div><div><div><div>13</div></div><div>
</div></div><div><div><div>14</div></div><div><span>先整理 DESIGN.md，</span></div></div><div><div><div>15</div></div><div><span>再进行实现。</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div><hr /></section></section><section><h2>11. v0：截图/参考图到高质量前端<a href="#11-v0截图参考图到高质量前端"><span>#</span></a></h2><p>官网：</p><p><a href="https://v0.app/" target="_blank">https://v0.app/</a></p><p>Screenshot 文档：</p><p><a href="https://v0.app/docs/screenshots" target="_blank">https://v0.app/docs/screenshots</a></p><p>Design Mode：</p><p><a href="https://v0.app/docs/design-mode" target="_blank">https://v0.app/docs/design-mode</a></p><section><h3>11.1 最适合什么场景<a href="#111-最适合什么场景"><span>#</span></a></h3><p>当你已经：</p><blockquote><p><strong>看到一个页面 / 截图，觉得它很好看。</strong></p></blockquote><p>但你不会描述它为什么好看。</p><p>直接把截图给 v0。</p><p>v0 可以分析：</p><ul>
<li>layout</li>
<li>color</li>
<li>component hierarchy</li>
<li>likely interactions</li>
</ul></section><section><h3>11.2 实际模拟<a href="#112-实际模拟"><span>#</span></a></h3><p>上传截图，然后：</p><div><div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>不要复制截图中的：</span></div></div><div><div><div>2</div></div><div><span>- 品牌</span></div></div><div><div><div>3</div></div><div><span>- Logo</span></div></div><div><div><div>4</div></div><div><span>- 文案</span></div></div><div><div><div>5</div></div><div><span>- 图片素材</span></div></div><div><div><div>6</div></div><div><span>- 业务内容</span></div></div><div><div><div>7</div></div><div>
</div></div><div><div><div>8</div></div><div><span>只分析它的设计语言：</span></div></div><div><div><div>9</div></div><div>
</div></div><div><div><div>10</div></div><div><span>- overall composition</span></div></div><div><div><div>11</div></div><div><span>- typography hierarchy</span></div></div><div><div><div>12</div></div><div><span>- spacing rhythm</span></div></div><div><div><div>13</div></div><div><span>- navigation</span></div></div><div><div><div>14</div></div><div><span>- surface treatment</span></div></div><div><div><div>15</div></div><div><span>- border</span></div></div><div><div><div>16</div></div><div><span>- shadow</span></div></div><div><div><div>17</div></div><div><span>- radius</span></div></div><div><div><div>18</div></div><div><span>- information density</span></div></div><div><div><div>19</div></div><div><span>- responsive behavior</span></div></div><div><div><div>20</div></div><div>
</div></div><div><div><div>21</div></div><div><span>基于这些规律，</span></div></div><div><div><div>22</div></div><div><span>重新设计一个个人技术知识库首页。</span></div></div><div><div><div>23</div></div><div>
</div></div><div><div><div>24</div></div><div><span>技术栈：</span></div></div><div><div><div>25</div></div><div><span>Next.js + Tailwind + shadcn/ui。</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div></section><section><h3>11.3 Design Mode 怎么用<a href="#113-design-mode-怎么用"><span>#</span></a></h3><p>假设生成后的 Hero：</p><blockquote><p>字太大。</p></blockquote><p>不需要重新 Prompt 整页。</p><p>进入 Design Mode：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>选中 Hero Title</span></div></div><div><div><div>2</div></div><div><span>→ 调 Font size</span></div></div><div><div><div>3</div></div><div><span>→ Line height</span></div></div><div><div><div>4</div></div><div><span>→ Width</span></div></div><div><div><div>5</div></div><div><span>→ Margin</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>再对选中区域：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Make this section quieter.</span></div></div><div><div><div>2</div></div><div><span>Reduce visual dominance without making it generic.</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>最后 Apply。</p><hr /></section></section><section><h2>12. Landbook：找网站整体视觉方向<a href="#12-landbook找网站整体视觉方向"><span>#</span></a></h2><p>官网：</p><p><a href="https://land-book.com/" target="_blank">https://land-book.com/</a></p><p>Landbook 更偏：</p><blockquote><p><strong>网站 / Landing Page / Portfolio / Marketing Site 的整体视觉灵感。</strong></p></blockquote><p>可以按：</p><ul>
<li>Industry</li>
<li>Style</li>
<li>Type</li>
<li>Typography</li>
<li>Color</li>
</ul><p>过滤。</p><section><h3>12.1 实际模拟：完全没方向<a href="#121-实际模拟完全没方向"><span>#</span></a></h3><p>做一个 Developer Tool 官网。</p><p>先筛：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Industry:</span></div></div><div><div><div>2</div></div><div><span>Tech</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span>Type:</span></div></div><div><div><div>5</div></div><div><span>SaaS / Software</span></div></div><div><div><div>6</div></div><div>
</div></div><div><div><div>7</div></div><div><span>Style:</span></div></div><div><div><div>8</div></div><div><span>Dark Colors</span></div></div><div><div><div>9</div></div><div><span>Visible Borders</span></div></div><div><div><div>10</div></div><div><span>Big Type</span></div></div><div><div><div>11</div></div><div>
</div></div><div><div><div>12</div></div><div><span>Typography:</span></div></div><div><div><div>13</div></div><div><span>Sans Serif</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>然后不要一次存 30 个。</p><p>只保留：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>参考 1：喜欢 Hero</span></div></div><div><div><div>2</div></div><div><span>参考 2：喜欢 Typography</span></div></div><div><div><div>3</div></div><div><span>参考 3：喜欢 Navigation</span></div></div><div><div><div>4</div></div><div><span>参考 4：喜欢 Footer</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>交给 AI：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>下面有 4 个视觉参考截图。</span></div></div><div><div><div>2</div></div><div>
</div></div><div><div><div>3</div></div><div><span>不要复制页面。</span></div></div><div><div><div>4</div></div><div>
</div></div><div><div><div>5</div></div><div><span>分别分析：</span></div></div><div><div><div>6</div></div><div><span>- 参考 1 的 Hero 为什么有效</span></div></div><div><div><div>7</div></div><div><span>- 参考 2 的 Typography hierarchy</span></div></div><div><div><div>8</div></div><div><span>- 参考 3 的 Navigation</span></div></div><div><div><div>9</div></div><div><span>- 参考 4 的 Footer composition</span></div></div><div><div><div>10</div></div><div>
</div></div><div><div><div>11</div></div><div><span>然后把这些规律组合成一个一致的 Design System。</span></div></div><div><div><div>12</div></div><div>
</div></div><div><div><div>13</div></div><div><span>不允许出现“拼凑感”。</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>12.2 不适合 Landbook 的场景<a href="#122-不适合-landbook-的场景"><span>#</span></a></h3><p>如果你要研究：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Settings</span></div></div><div><div><div>2</div></div><div><span>Checkout</span></div></div><div><div><div>3</div></div><div><span>Onboarding</span></div></div><div><div><div>4</div></div><div><span>Complex dashboard</span></div></div><div><div><div>5</div></div><div><span>Search interaction</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>Mobbin / Refero 更适合。</p><hr /></section></section><section><h2>13. Mobbin：找真实产品页面和完整用户流程<a href="#13-mobbin找真实产品页面和完整用户流程"><span>#</span></a></h2><p>官网：</p><p><a href="https://mobbin.com/" target="_blank">https://mobbin.com/</a></p><p>Mobbin 的重点不是“漂亮 Landing Page”，而是：</p><blockquote><p><strong>真实 App / Web 产品实际怎么做。</strong></p></blockquote><p>适合：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Login</span></div></div><div><div><div>2</div></div><div><span>Onboarding</span></div></div><div><div><div>3</div></div><div><span>Settings</span></div></div><div><div><div>4</div></div><div><span>Checkout</span></div></div><div><div><div>5</div></div><div><span>Subscription</span></div></div><div><div><div>6</div></div><div><span>Home</span></div></div><div><div><div>7</div></div><div><span>Account</span></div></div><div><div><div>8</div></div><div><span>Search</span></div></div><div><div><div>9</div></div><div><span>Empty State</span></div></div></code></pre><div><div></div><div></div></div></figure></div><section><h3>13.1 实际模拟：设计 Settings<a href="#131-实际模拟设计-settings"><span>#</span></a></h3><p>假设你要设计：</p><blockquote><p>AI Coding Tool 的 Settings。</p></blockquote><p>不要直接让 AI 写。</p><p>先在 Mobbin 找：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Settings</span></div></div><div><div><div>2</div></div><div><span>Preferences</span></div></div><div><div><div>3</div></div><div><span>Account</span></div></div><div><div><div>4</div></div><div><span>Appearance</span></div></div><div><div><div>5</div></div><div><span>Integrations</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>选 5~10 个真实产品。</p><p>然后对 Agent：</p><div><div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>这些截图来自不同真实产品的 Settings 页面。</span></div></div><div><div><div>2</div></div><div>
</div></div><div><div><div>3</div></div><div><span>请做 UX pattern analysis。</span></div></div><div><div><div>4</div></div><div>
</div></div><div><div><div>5</div></div><div><span>不要评价哪个最好。</span></div></div><div><div><div>6</div></div><div>
</div></div><div><div><div>7</div></div><div><span>统计和总结：</span></div></div><div><div><div>8</div></div><div><span>- Sidebar / Tabs 使用方式</span></div></div><div><div><div>9</div></div><div><span>- Section grouping</span></div></div><div><div><div>10</div></div><div><span>- Label + description 结构</span></div></div><div><div><div>11</div></div><div><span>- Toggle placement</span></div></div><div><div><div>12</div></div><div><span>- Dangerous actions</span></div></div><div><div><div>13</div></div><div><span>- Save behavior</span></div></div><div><div><div>14</div></div><div><span>- Mobile behavior</span></div></div><div><div><div>15</div></div><div>
</div></div><div><div><div>16</div></div><div><span>最后设计适合当前产品的 Settings 信息架构。</span></div></div><div><div><div>17</div></div><div>
</div></div><div><div><div>18</div></div><div><span>暂时不要处理视觉风格。</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div><p>然后再结合 DESIGN.md 处理视觉。</p><p>这会把两个问题拆开：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Mobbin / Refero</span></div></div><div><div><div>2</div></div><div><span>→ UX Structure</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span>DESIGN.md</span></div></div><div><div><div>5</div></div><div><span>→ Visual Style</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section></section><section><h2>14. Aceternity UI：找高视觉表现力组件<a href="#14-aceternity-ui找高视觉表现力组件"><span>#</span></a></h2><p>官网：</p><p><a href="https://ui.aceternity.com/" target="_blank">https://ui.aceternity.com/</a></p><p>它提供很多：</p><ul>
<li>Hero</li>
<li>Background</li>
<li>Animation</li>
<li>Cards</li>
<li>Spotlight</li>
<li>Grid</li>
<li>Text Effect</li>
<li>Shader</li>
</ul><p>目前也提供面向 AI Agent 的使用方式 / MCP。</p><section><h3>14.1 适合什么<a href="#141-适合什么"><span>#</span></a></h3><p>尤其适合：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Landing Page</span></div></div><div><div><div>2</div></div><div><span>Portfolio</span></div></div><div><div><div>3</div></div><div><span>Marketing</span></div></div><div><div><div>4</div></div><div><span>产品首页视觉焦点</span></div></div><div><div><div>5</div></div><div><span>特殊 Hero</span></div></div><div><div><div>6</div></div><div><span>背景效果</span></div></div><div><div><div>7</div></div><div><span>微交互</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>14.2 实际模拟<a href="#142-实际模拟"><span>#</span></a></h3><p>假设：</p><blockquote><p>当前首页太平淡。</p></blockquote><p>不要直接要求：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>加点酷炫动画。</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>而是：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>从 Aceternity UI 中寻找适合当前首页 Hero 的视觉增强方案。</span></div></div><div><div><div>2</div></div><div>
</div></div><div><div><div>3</div></div><div><span>约束：</span></div></div><div><div><div>4</div></div><div><span>- 只允许一个主要视觉效果</span></div></div><div><div><div>5</div></div><div><span>- 不要 Gradient Blob</span></div></div><div><div><div>6</div></div><div><span>- 不要大量发光</span></div></div><div><div><div>7</div></div><div><span>- 不影响文字阅读</span></div></div><div><div><div>8</div></div><div><span>- prefers-reduced-motion 下必须安全降级</span></div></div><div><div><div>9</div></div><div><span>- Mobile 降低动效</span></div></div><div><div><div>10</div></div><div><span>- 必须符合 DESIGN.md</span></div></div><div><div><div>11</div></div><div>
</div></div><div><div><div>12</div></div><div><span>先给 3 个候选。</span></div></div><div><div><div>13</div></div><div><span>不要安装。</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>选中之后：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>使用候选 2。</span></div></div><div><div><div>2</div></div><div>
</div></div><div><div><div>3</div></div><div><span>只借用交互机制，</span></div></div><div><div><div>4</div></div><div><span>重新适配：</span></div></div><div><div><div>5</div></div><div><span>- 当前项目 Colors</span></div></div><div><div><div>6</div></div><div><span>- Typography</span></div></div><div><div><div>7</div></div><div><span>- Radius</span></div></div><div><div><div>8</div></div><div><span>- Motion duration</span></div></div><div><div><div>9</div></div><div>
</div></div><div><div><div>10</div></div><div><span>不要让页面变成 Aceternity Demo。</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>14.3 重点<a href="#143-重点"><span>#</span></a></h3><p>Aceternity 应该是：</p><blockquote><p><strong>调味品。</strong></p></blockquote><p>不是：</p><blockquote><p>全站每个 Section 都套动画。</p></blockquote><hr /></section></section><section><h2>15. shadcn/ui Blocks：找稳健、可维护的产品型页面骨架<a href="#15-shadcnui-blocks找稳健可维护的产品型页面骨架"><span>#</span></a></h2><p>官网：</p><p><a href="https://ui.shadcn.com/blocks" target="_blank">https://ui.shadcn.com/blocks</a></p><p>shadcn Blocks 更适合：</p><ul>
<li>Dashboard</li>
<li>Login</li>
<li>Signup</li>
<li>Sidebar</li>
<li>Data Table</li>
<li>产品后台页面</li>
</ul><p>例如官方 Dashboard Block 可以直接：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>npx</span><span> </span><span>shadcn</span><span> </span><span>add</span><span> </span><span>dashboard-01</span></div></div></code></pre><div><div></div><div></div></div></figure></div><section><h3>15.1 实际模拟<a href="#151-实际模拟"><span>#</span></a></h3><p>需求：</p><blockquote><p>快速做一个后台。</p></blockquote><p>正确：</p><div><div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>先从 shadcn Blocks 中寻找一个结构最接近当前需求的 Dashboard。</span></div></div><div><div><div>2</div></div><div>
</div></div><div><div><div>3</div></div><div><span>不要把它当最终设计。</span></div></div><div><div><div>4</div></div><div>
</div></div><div><div><div>5</div></div><div><span>它只负责：</span></div></div><div><div><div>6</div></div><div><span>- layout skeleton</span></div></div><div><div><div>7</div></div><div><span>- responsive behavior</span></div></div><div><div><div>8</div></div><div><span>- component structure</span></div></div><div><div><div>9</div></div><div>
</div></div><div><div><div>10</div></div><div><span>安装后再根据 DESIGN.md 修改：</span></div></div><div><div><div>11</div></div><div><span>- color</span></div></div><div><div><div>12</div></div><div><span>- typography</span></div></div><div><div><div>13</div></div><div><span>- density</span></div></div><div><div><div>14</div></div><div><span>- border</span></div></div><div><div><div>15</div></div><div><span>- radius</span></div></div><div><div><div>16</div></div><div><span>- navigation</span></div></div><div><div><div>17</div></div><div><span>- charts</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div></section><section><h3>15.2 最佳定位<a href="#152-最佳定位"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>shadcn</span></div></div><div><div><div>2</div></div><div><span>= 稳定产品骨架</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span>DESIGN.md</span></div></div><div><div><div>5</div></div><div><span>= 设计语言</span></div></div><div><div><div>6</div></div><div>
</div></div><div><div><div>7</div></div><div><span>21st / Aceternity</span></div></div><div><div><div>8</div></div><div><span>= 个别高级组件</span></div></div><div><div><div>9</div></div><div>
</div></div><div><div><div>10</div></div><div><span>frontend-design</span></div></div><div><div><div>11</div></div><div><span>= 视觉实现</span></div></div><div><div><div>12</div></div><div>
</div></div><div><div><div>13</div></div><div><span>Impeccable</span></div></div><div><div><div>14</div></div><div><span>= 最后审查</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>这是比“所有东西都从零写”更稳的组合。</p><hr /></section></section><section><h2>16. 浏览器视觉验收：Playwright / Chrome DevTools MCP<a href="#16-浏览器视觉验收playwright--chrome-devtools-mcp"><span>#</span></a></h2><p>这是整个 AI UI 工作流里非常容易被忽略的一步。</p><p>AI 修改代码 ≠ 页面真的好看。</p><p>必须：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Build</span></div></div><div><div><div>2</div></div><div><span>↓</span></div></div><div><div><div>3</div></div><div><span>启动</span></div></div><div><div><div>4</div></div><div><span>↓</span></div></div><div><div><div>5</div></div><div><span>打开真实浏览器</span></div></div><div><div><div>6</div></div><div><span>↓</span></div></div><div><div><div>7</div></div><div><span>Desktop 截图</span></div></div><div><div><div>8</div></div><div><span>↓</span></div></div><div><div><div>9</div></div><div><span>Mobile 截图</span></div></div><div><div><div>10</div></div><div><span>↓</span></div></div><div><div><div>11</div></div><div><span>分析</span></div></div><div><div><div>12</div></div><div><span>↓</span></div></div><div><div><div>13</div></div><div><span>一次集中修复</span></div></div></code></pre><div><div></div><div></div></div></figure></div><section><h3>16.1 实际 Prompt<a href="#161-实际-prompt"><span>#</span></a></h3><div><div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>页面实现完成后不要直接结束。</span></div></div><div><div><div>2</div></div><div>
</div></div><div><div><div>3</div></div><div><span>使用浏览器实际打开页面。</span></div></div><div><div><div>4</div></div><div>
</div></div><div><div><div>5</div></div><div><span>检查以下 viewport：</span></div></div><div><div><div>6</div></div><div>
</div></div><div><div><div>7</div></div><div><span>Desktop:</span></div></div><div><div><div>8</div></div><div><span>1440 x 900</span></div></div><div><div><div>9</div></div><div>
</div></div><div><div><div>10</div></div><div><span>Laptop:</span></div></div><div><div><div>11</div></div><div><span>1280 x 800</span></div></div><div><div><div>12</div></div><div>
</div></div><div><div><div>13</div></div><div><span>Mobile:</span></div></div><div><div><div>14</div></div><div><span>390 x 844</span></div></div><div><div><div>15</div></div><div>
</div></div><div><div><div>16</div></div><div><span>分别截图。</span></div></div><div><div><div>17</div></div><div>
</div></div><div><div><div>18</div></div><div><span>从截图而不是源码推测视觉问题。</span></div></div><div><div><div>19</div></div><div>
</div></div><div><div><div>20</div></div><div><span>检查：</span></div></div><div><div><div>21</div></div><div><span>- hierarchy</span></div></div><div><div><div>22</div></div><div><span>- alignment</span></div></div><div><div><div>23</div></div><div><span>- spacing</span></div></div><div><div><div>24</div></div><div><span>- text wrapping</span></div></div><div><div><div>25</div></div><div><span>- overflow</span></div></div><div><div><div>26</div></div><div><span>- content width</span></div></div><div><div><div>27</div></div><div><span>- navigation</span></div></div><div><div><div>28</div></div><div><span>- empty space</span></div></div><div><div><div>29</div></div><div><span>- card density</span></div></div><div><div><div>30</div></div><div><span>- mobile stacking</span></div></div><div><div><div>31</div></div><div><span>- button sizes</span></div></div><div><div><div>32</div></div><div><span>- code block overflow</span></div></div><div><div><div>33</div></div><div>
</div></div><div><div><div>34</div></div><div><span>把发现的问题一次汇总。</span></div></div><div><div><div>35</div></div><div>
</div></div><div><div><div>36</div></div><div><span>然后集中修复一轮。</span></div></div><div><div><div>37</div></div><div>
</div></div><div><div><div>38</div></div><div><span>修复后最多再进行一次确认截图，</span></div></div><div><div><div>39</div></div><div><span>不要陷入无限视觉微调。</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div><p>这和 Impeccable 当前强调的“bounded visual iteration”思路是相符的：</p><blockquote><p>完整实现 → 一轮批量检查 → 集中修复 → 最多再确认一轮。</p></blockquote><hr /></section></section><section><h2>17. 从零开始的完整实战模拟<a href="#17-从零开始的完整实战模拟"><span>#</span></a></h2><p>下面模拟一个真实项目：</p><blockquote><p>“我要做一个个人技术知识库，但没有任何 UI 方向。”</p></blockquote><hr /><section><h3>Phase 1：Agent 理解产品<a href="#phase-1agent-理解产品"><span>#</span></a></h3><p>给 Claude Code / Codex：</p><div><div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>当前任务是设计本项目 UI。</span></div></div><div><div><div>2</div></div><div>
</div></div><div><div><div>3</div></div><div><span>现在不要写代码。</span></div></div><div><div><div>4</div></div><div>
</div></div><div><div><div>5</div></div><div><span>先完整分析项目：</span></div></div><div><div><div>6</div></div><div>
</div></div><div><div><div>7</div></div><div><span>1. 产品是什么</span></div></div><div><div><div>8</div></div><div><span>2. 谁会使用</span></div></div><div><div><div>9</div></div><div><span>3. 最主要的 5 个用户任务</span></div></div><div><div><div>10</div></div><div><span>4. 页面类型</span></div></div><div><div><div>11</div></div><div><span>5. 内容密度</span></div></div><div><div><div>12</div></div><div><span>6. 当前技术栈</span></div></div><div><div><div>13</div></div><div><span>7. 已有组件</span></div></div><div><div><div>14</div></div><div><span>8. 已有 CSS / Theme</span></div></div><div><div><div>15</div></div><div><span>9. 是否已经存在 DESIGN.md</span></div></div><div><div><div>16</div></div><div><span>10. 是否有不能破坏的已有 UI</span></div></div><div><div><div>17</div></div><div>
</div></div><div><div><div>18</div></div><div><span>输出 UI Design Brief。</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div><p>预期得到：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>产品：</span></div></div><div><div><div>2</div></div><div><span>个人技术知识库</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span>主要任务：</span></div></div><div><div><div>5</div></div><div><span>- 找文章</span></div></div><div><div><div>6</div></div><div><span>- 浏览分类</span></div></div><div><div><div>7</div></div><div><span>- 阅读技术文章</span></div></div><div><div><div>8</div></div><div><span>- 复制代码</span></div></div><div><div><div>9</div></div><div><span>- 页面间跳转</span></div></div><div><div><div>10</div></div><div>
</div></div><div><div><div>11</div></div><div><span>核心：</span></div></div><div><div><div>12</div></div><div><span>阅读体验 &gt; 营销视觉</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section><section><h3>Phase 2：Refero / Mobbin 研究<a href="#phase-2refero--mobbin-研究"><span>#</span></a></h3><div><div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>使用 Refero 搜索：</span></div></div><div><div><div>2</div></div><div>
</div></div><div><div><div>3</div></div><div><span>developer documentation</span></div></div><div><div><div>4</div></div><div><span>knowledge base</span></div></div><div><div><div>5</div></div><div><span>technical editorial</span></div></div><div><div><div>6</div></div><div><span>content-heavy docs</span></div></div><div><div><div>7</div></div><div>
</div></div><div><div><div>8</div></div><div><span>至少分析 10 个相关真实页面。</span></div></div><div><div><div>9</div></div><div>
</div></div><div><div><div>10</div></div><div><span>重点研究：</span></div></div><div><div><div>11</div></div><div><span>- Navigation</span></div></div><div><div><div>12</div></div><div><span>- Search</span></div></div><div><div><div>13</div></div><div><span>- Article</span></div></div><div><div><div>14</div></div><div><span>- TOC</span></div></div><div><div><div>15</div></div><div><span>- Code block</span></div></div><div><div><div>16</div></div><div><span>- Mobile docs</span></div></div><div><div><div>17</div></div><div>
</div></div><div><div><div>18</div></div><div><span>不要开始 Build。</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div><hr /></section><section><h3>Phase 3：Refero Styles 找视觉方向<a href="#phase-3refero-styles-找视觉方向"><span>#</span></a></h3><p>自己搜索：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>documentation</span></div></div><div><div><div>2</div></div><div><span>developer tools</span></div></div><div><div><div>3</div></div><div><span>editorial</span></div></div><div><div><div>4</div></div><div><span>warm editorial</span></div></div><div><div><div>5</div></div><div><span>technical journal</span></div></div><div><div><div>6</div></div><div><span>minimal technical</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>保存 3~5 个喜欢的 Style / DESIGN.md。</p><hr /></section><section><h3>Phase 4：生成三个方向<a href="#phase-4生成三个方向"><span>#</span></a></h3><div><div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>结合：</span></div></div><div><div><div>2</div></div><div><span>- 当前项目需求</span></div></div><div><div><div>3</div></div><div><span>- Refero Research</span></div></div><div><div><div>4</div></div><div><span>- Refero Styles</span></div></div><div><div><div>5</div></div><div><span>- PRODUCT.md</span></div></div><div><div><div>6</div></div><div>
</div></div><div><div><div>7</div></div><div><span>提出 3 个明显不同的视觉方向。</span></div></div><div><div><div>8</div></div><div>
</div></div><div><div><div>9</div></div><div><span>A：</span></div></div><div><div><div>10</div></div><div><span>Developer Tool</span></div></div><div><div><div>11</div></div><div>
</div></div><div><div><div>12</div></div><div><span>B：</span></div></div><div><div><div>13</div></div><div><span>Warm Technical Editorial</span></div></div><div><div><div>14</div></div><div>
</div></div><div><div><div>15</div></div><div><span>C：</span></div></div><div><div><div>16</div></div><div><span>Minimal Documentation</span></div></div><div><div><div>17</div></div><div>
</div></div><div><div><div>18</div></div><div><span>不能只是换颜色。</span></div></div><div><div><div>19</div></div><div>
</div></div><div><div><div>20</div></div><div><span>分别定义：</span></div></div><div><div><div>21</div></div><div><span>Typography</span></div></div><div><div><div>22</div></div><div><span>Color</span></div></div><div><div><div>23</div></div><div><span>Layout</span></div></div><div><div><div>24</div></div><div><span>Navigation</span></div></div><div><div><div>25</div></div><div><span>Surface</span></div></div><div><div><div>26</div></div><div><span>Density</span></div></div><div><div><div>27</div></div><div><span>Radius</span></div></div><div><div><div>28</div></div><div><span>Border</span></div></div><div><div><div>29</div></div><div><span>Shadow</span></div></div><div><div><div>30</div></div><div><span>Motion</span></div></div><div><div><div>31</div></div><div><span>Article</span></div></div><div><div><div>32</div></div><div><span>Code Block</span></div></div><div><div><div>33</div></div><div><span>Mobile</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div><hr /></section><section><h3>Phase 5：人工只做一个决定<a href="#phase-5人工只做一个决定"><span>#</span></a></h3><p>你只需要：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>选 B。</span></div></div><div><div><div>2</div></div><div>
</div></div><div><div><div>3</div></div><div><span>但是导航采用 A，</span></div></div><div><div><div>4</div></div><div><span>代码块采用 C。</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section><section><h3>Phase 6：形成 DESIGN.md<a href="#phase-6形成-designmd"><span>#</span></a></h3><div><div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>现在将已确认设计整理为项目根目录 DESIGN.md。</span></div></div><div><div><div>2</div></div><div>
</div></div><div><div><div>3</div></div><div><span>这份文件是未来所有页面的视觉 Source of Truth。</span></div></div><div><div><div>4</div></div><div>
</div></div><div><div><div>5</div></div><div><span>需要定义：</span></div></div><div><div><div>6</div></div><div><span>Overview</span></div></div><div><div><div>7</div></div><div><span>Colors</span></div></div><div><div><div>8</div></div><div><span>Typography</span></div></div><div><div><div>9</div></div><div><span>Layout</span></div></div><div><div><div>10</div></div><div><span>Elevation &amp; Depth</span></div></div><div><div><div>11</div></div><div><span>Shapes</span></div></div><div><div><div>12</div></div><div><span>Components</span></div></div><div><div><div>13</div></div><div><span>Do's and Don'ts</span></div></div><div><div><div>14</div></div><div><span>Responsive</span></div></div><div><div><div>15</div></div><div><span>Motion</span></div></div><div><div><div>16</div></div><div><span>Accessibility</span></div></div><div><div><div>17</div></div><div>
</div></div><div><div><div>18</div></div><div><span>不要包含单个页面的临时决定。</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div><hr /></section><section><h3>Phase 7：实现一个代表页面<a href="#phase-7实现一个代表页面"><span>#</span></a></h3><p>选择：</p><blockquote><p>Article Detail。</p></blockquote><p>因为它是知识库的核心页面。</p><div><div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>读取 DESIGN.md。</span></div></div><div><div><div>2</div></div><div>
</div></div><div><div><div>3</div></div><div><span>使用 frontend-design skill。</span></div></div><div><div><div>4</div></div><div>
</div></div><div><div><div>5</div></div><div><span>只实现 Article Detail。</span></div></div><div><div><div>6</div></div><div>
</div></div><div><div><div>7</div></div><div><span>需要包含：</span></div></div><div><div><div>8</div></div><div><span>- Sidebar</span></div></div><div><div><div>9</div></div><div><span>- Breadcrumb</span></div></div><div><div><div>10</div></div><div><span>- Article header</span></div></div><div><div><div>11</div></div><div><span>- Article content</span></div></div><div><div><div>12</div></div><div><span>- Code block</span></div></div><div><div><div>13</div></div><div><span>- TOC</span></div></div><div><div><div>14</div></div><div><span>- Previous / Next</span></div></div><div><div><div>15</div></div><div><span>- Mobile layout</span></div></div><div><div><div>16</div></div><div>
</div></div><div><div><div>17</div></div><div><span>不要同时修改其他页面。</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div><hr /></section><section><h3>Phase 8：真实浏览器验收<a href="#phase-8真实浏览器验收"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>启动项目。</span></div></div><div><div><div>2</div></div><div>
</div></div><div><div><div>3</div></div><div><span>实际打开 Article Detail。</span></div></div><div><div><div>4</div></div><div>
</div></div><div><div><div>5</div></div><div><span>检查：</span></div></div><div><div><div>6</div></div><div><span>1440x900</span></div></div><div><div><div>7</div></div><div><span>1280x800</span></div></div><div><div><div>8</div></div><div><span>390x844</span></div></div><div><div><div>9</div></div><div>
</div></div><div><div><div>10</div></div><div><span>截图并做视觉检查。</span></div></div><div><div><div>11</div></div><div>
</div></div><div><div><div>12</div></div><div><span>不要根据代码判断 UI。</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section><section><h3>Phase 9：Impeccable<a href="#phase-9impeccable"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>/impeccable critique article</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>修复。</p><p>然后：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>/impeccable audit article</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>修复。</p><p>最后：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>/impeccable polish article</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section><section><h3>Phase 10：推广全站<a href="#phase-10推广全站"><span>#</span></a></h3><p>当 Article Detail 已确认后：</p><div><div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>当前 Article Detail 已作为 Design Reference。</span></div></div><div><div><div>2</div></div><div>
</div></div><div><div><div>3</div></div><div><span>接下来扩展到：</span></div></div><div><div><div>4</div></div><div><span>- 首页</span></div></div><div><div><div>5</div></div><div><span>- 分类</span></div></div><div><div><div>6</div></div><div><span>- 搜索</span></div></div><div><div><div>7</div></div><div><span>- About</span></div></div><div><div><div>8</div></div><div>
</div></div><div><div><div>9</div></div><div><span>必须继续遵循 DESIGN.md。</span></div></div><div><div><div>10</div></div><div>
</div></div><div><div><div>11</div></div><div><span>新页面允许解决新的 UX 问题，</span></div></div><div><div><div>12</div></div><div><span>但不得自行创造新的视觉语言。</span></div></div><div><div><div>13</div></div><div>
</div></div><div><div><div>14</div></div><div><span>如果 DESIGN.md 不足：</span></div></div><div><div><div>15</div></div><div><span>先提出 DESIGN.md 补充建议，</span></div></div><div><div><div>16</div></div><div><span>不要静默新增风格。</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div><hr /></section></section><section><h2>18. 适合 Claude Code / Codex 的总 Prompt<a href="#18-适合-claude-code--codex-的总-prompt"><span>#</span></a></h2><p>可以保存成自己的 Skill / Prompt。</p><div><div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>你现在担任本项目的 Product Designer、</span></div></div><div><div><div>2</div></div><div><span>UI/UX Designer 和 Frontend Design Engineer。</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span>当前项目可能没有明确视觉方向。</span></div></div><div><div><div>5</div></div><div>
</div></div><div><div><div>6</div></div><div><span>重要规则：</span></div></div><div><div><div>7</div></div><div>
</div></div><div><div><div>8</div></div><div><span>不要因为用户说“做一个页面”就立即开始写代码。</span></div></div><div><div><div>9</div></div><div>
</div></div><div><div><div>10</div></div><div><span>第一阶段永远先判断：</span></div></div><div><div><div>11</div></div><div><span>1. 是否已经存在 DESIGN.md</span></div></div><div><div><div>12</div></div><div><span>2. 是否存在成熟 UI</span></div></div><div><div><div>13</div></div><div><span>3. 是否已经有明确参考</span></div></div><div><div><div>14</div></div><div><span>4. 是否需要 Design Discovery</span></div></div><div><div><div>15</div></div><div>
</div></div><div><div><div>16</div></div><div><span>如果没有设计方向：</span></div></div><div><div><div>17</div></div><div>
</div></div><div><div><div>18</div></div><div><span>先理解：</span></div></div><div><div><div>19</div></div><div><span>- 产品是什么</span></div></div><div><div><div>20</div></div><div><span>- 核心用户</span></div></div><div><div><div>21</div></div><div><span>- 用户主要任务</span></div></div><div><div><div>22</div></div><div><span>- 页面类型</span></div></div><div><div><div>23</div></div><div><span>- 信息密度</span></div></div><div><div><div>24</div></div><div><span>- 技术栈</span></div></div><div><div><div>25</div></div><div><span>- 已有组件</span></div></div><div><div><div>26</div></div><div>
</div></div><div><div><div>27</div></div><div><span>然后进行设计研究。</span></div></div><div><div><div>28</div></div><div>
</div></div><div><div><div>29</div></div><div><span>如果可用，优先使用：</span></div></div><div><div><div>30</div></div><div><span>- Refero / Refero MCP</span></div></div><div><div><div>31</div></div><div><span>- Refero Styles</span></div></div><div><div><div>32</div></div><div><span>- Mobbin</span></div></div><div><div><div>33</div></div><div><span>- Landbook</span></div></div><div><div><div>34</div></div><div><span>- 21st</span></div></div><div><div><div>35</div></div><div><span>- UI/UX Pro Max</span></div></div><div><div><div>36</div></div><div>
</div></div><div><div><div>37</div></div><div><span>不要只根据模型记忆凭空设计。</span></div></div><div><div><div>38</div></div><div>
</div></div><div><div><div>39</div></div><div><span>至少提出 3 个明显不同的设计方向。</span></div></div><div><div><div>40</div></div><div>
</div></div><div><div><div>41</div></div><div><span>三个方向不能只是颜色不同。</span></div></div><div><div><div>42</div></div><div>
</div></div><div><div><div>43</div></div><div><span>需要在：</span></div></div><div><div><div>44</div></div><div><span>- Typography</span></div></div><div><div><div>45</div></div><div><span>- Color</span></div></div><div><div><div>46</div></div><div><span>- Layout</span></div></div><div><div><div>47</div></div><div><span>- Navigation</span></div></div><div><div><div>48</div></div><div><span>- Density</span></div></div><div><div><div>49</div></div><div><span>- Spacing</span></div></div><div><div><div>50</div></div><div><span>- Surface</span></div></div><div><div><div>51</div></div><div><span>- Radius</span></div></div><div><div><div>52</div></div><div><span>- Border</span></div></div><div><div><div>53</div></div><div><span>- Shadow</span></div></div><div><div><div>54</div></div><div><span>- Motion</span></div></div><div><div><div>55</div></div><div><span>- Content hierarchy</span></div></div><div><div><div>56</div></div><div>
</div></div><div><div><div>57</div></div><div><span>方面具有实际区别。</span></div></div><div><div><div>58</div></div><div>
</div></div><div><div><div>59</div></div><div><span>禁止默认 AI UI：</span></div></div><div><div><div>60</div></div><div>
</div></div><div><div><div>61</div></div><div><span>- purple/blue gradient</span></div></div><div><div><div>62</div></div><div><span>- glassmorphism</span></div></div><div><div><div>63</div></div><div><span>- every section in a card</span></div></div><div><div><div>64</div></div><div><span>- cards nested in cards</span></div></div><div><div><div>65</div></div><div><span>- oversized radius</span></div></div><div><div><div>66</div></div><div><span>- decorative badges everywhere</span></div></div><div><div><div>67</div></div><div><span>- meaningless glow</span></div></div><div><div><div>68</div></div><div><span>- giant generic hero</span></div></div><div><div><div>69</div></div><div><span>- excessive floating elements</span></div></div><div><div><div>70</div></div><div><span>- meaningless animation</span></div></div><div><div><div>71</div></div><div>
</div></div><div><div><div>72</div></div><div><span>选择方向以后，</span></div></div><div><div><div>73</div></div><div><span>形成 DESIGN.md。</span></div></div><div><div><div>74</div></div><div>
</div></div><div><div><div>75</div></div><div><span>DESIGN.md 是视觉 Source of Truth。</span></div></div><div><div><div>76</div></div><div>
</div></div><div><div><div>77</div></div><div><span>之后只实现一个最具有代表性的页面。</span></div></div><div><div><div>78</div></div><div>
</div></div><div><div><div>79</div></div><div><span>实现完成必须：</span></div></div><div><div><div>80</div></div><div><span>- 运行应用</span></div></div><div><div><div>81</div></div><div><span>- 打开真实浏览器</span></div></div><div><div><div>82</div></div><div><span>- 检查 Desktop</span></div></div><div><div><div>83</div></div><div><span>- 检查 Mobile</span></div></div><div><div><div>84</div></div><div><span>- 截图</span></div></div><div><div><div>85</div></div><div><span>- 进行 visual critique</span></div></div><div><div><div>86</div></div><div>
</div></div><div><div><div>87</div></div><div><span>如果 Impeccable 可用：</span></div></div><div><div><div>88</div></div><div><span>执行 critique → audit → polish。</span></div></div><div><div><div>89</div></div><div>
</div></div><div><div><div>90</div></div><div><span>最多进行两轮截图验证，</span></div></div><div><div><div>91</div></div><div><span>不要无限视觉循环。</span></div></div><div><div><div>92</div></div><div>
</div></div><div><div><div>93</div></div><div><span>只有代表页面确认后，</span></div></div><div><div><div>94</div></div><div><span>才将同一设计系统扩展到其他页面。</span></div></div><div><div><div>95</div></div><div>
</div></div><div><div><div>96</div></div><div><span>核心优先级：</span></div></div><div><div><div>97</div></div><div>
</div></div><div><div><div>98</div></div><div><span>1. Usability</span></div></div><div><div><div>99</div></div><div><span>2. Information hierarchy</span></div></div><div><div><div>100</div></div><div><span>3. Consistency</span></div></div><div><div><div>101</div></div><div><span>4. Readability</span></div></div><div><div><div>102</div></div><div><span>5. Visual identity</span></div></div><div><div><div>103</div></div><div><span>6. Decoration</span></div></div><div><div><div>104</div></div><div>
</div></div><div><div><div>105</div></div><div><span>真实产品参考优先于模型凭空想象。</span></div></div><div><div><div>106</div></div><div><span>明确设计方向优先于“现代、漂亮、高级”这类模糊形容词。</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div><hr /></section><section><h2>19. 我的推荐组合<a href="#19-我的推荐组合"><span>#</span></a></h2><p>如果不想把所有工具都装一遍，可以分三个级别。</p><section><h3>19.1 最小方案<a href="#191-最小方案"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Refero Styles</span></div></div><div><div><div>2</div></div><div><span>+</span></div></div><div><div><div>3</div></div><div><span>Anthropic frontend-design</span></div></div><div><div><div>4</div></div><div><span>+</span></div></div><div><div><div>5</div></div><div><span>DESIGN.md</span></div></div><div><div><div>6</div></div><div><span>+</span></div></div><div><div><div>7</div></div><div><span>浏览器截图验收</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>适合：</p><blockquote><p>不想增加很多 MCP / Skill，只想明显改善 AI UI。</p></blockquote><hr /></section><section><h3>19.2 推荐方案<a href="#192-推荐方案"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Refero Styles</span></div></div><div><div><div>2</div></div><div><span>+</span></div></div><div><div><div>3</div></div><div><span>Refero MCP</span></div></div><div><div><div>4</div></div><div><span>+</span></div></div><div><div><div>5</div></div><div><span>Anthropic frontend-design</span></div></div><div><div><div>6</div></div><div><span>+</span></div></div><div><div><div>7</div></div><div><span>Impeccable</span></div></div><div><div><div>8</div></div><div><span>+</span></div></div><div><div><div>9</div></div><div><span>21st.dev</span></div></div><div><div><div>10</div></div><div><span>+</span></div></div><div><div><div>11</div></div><div><span>DESIGN.md</span></div></div><div><div><div>12</div></div><div><span>+</span></div></div><div><div><div>13</div></div><div><span>Browser visual review</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>这是最适合 Claude Code / Codex 日常开发的一套。</p><p>职责：</p><div><div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Refero</span></div></div><div><div><div>2</div></div><div><span>→ 找真实参考</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span>DESIGN.md</span></div></div><div><div><div>5</div></div><div><span>→ 固化规则</span></div></div><div><div><div>6</div></div><div>
</div></div><div><div><div>7</div></div><div><span>frontend-design</span></div></div><div><div><div>8</div></div><div><span>→ 实现设计</span></div></div><div><div><div>9</div></div><div>
</div></div><div><div><div>10</div></div><div><span>21st</span></div></div><div><div><div>11</div></div><div><span>→ 找成熟组件</span></div></div><div><div><div>12</div></div><div>
</div></div><div><div><div>13</div></div><div><span>Impeccable</span></div></div><div><div><div>14</div></div><div><span>→ 审查和打磨</span></div></div><div><div><div>15</div></div><div>
</div></div><div><div><div>16</div></div><div><span>Browser</span></div></div><div><div><div>17</div></div><div><span>→ 真实视觉反馈</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div><hr /></section><section><h3>19.3 完全没有任何设计方向的新项目<a href="#193-完全没有任何设计方向的新项目"><span>#</span></a></h3><p>建议：</p><div><div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Google Stitch</span></div></div><div><div><div>2</div></div><div><span>↓</span></div></div><div><div><div>3</div></div><div><span>探索 3~5 个方向</span></div></div><div><div><div>4</div></div><div><span>↓</span></div></div><div><div><div>5</div></div><div><span>选一个</span></div></div><div><div><div>6</div></div><div><span>↓</span></div></div><div><div><div>7</div></div><div><span>DESIGN.md</span></div></div><div><div><div>8</div></div><div><span>↓</span></div></div><div><div><div>9</div></div><div><span>Refero 验证真实产品模式</span></div></div><div><div><div>10</div></div><div><span>↓</span></div></div><div><div><div>11</div></div><div><span>Claude Code / Codex</span></div></div><div><div><div>12</div></div><div><span>↓</span></div></div><div><div><div>13</div></div><div><span>frontend-design</span></div></div><div><div><div>14</div></div><div><span>↓</span></div></div><div><div><div>15</div></div><div><span>21st / shadcn</span></div></div><div><div><div>16</div></div><div><span>↓</span></div></div><div><div><div>17</div></div><div><span>Impeccable</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div><p>这时 Stitch 的价值最大。</p><hr /></section></section><section><h2>20. 参考链接<a href="#20-参考链接"><span>#</span></a></h2><section><h3>Google Stitch<a href="#google-stitch"><span>#</span></a></h3><ul>
<li><a href="https://stitch.withgoogle.com/" target="_blank">https://stitch.withgoogle.com/</a></li>
<li><a href="https://blog.google/innovation-and-ai/models-and-research/google-labs/stitch-ai-ui-design/" target="_blank">https://blog.google/innovation-and-ai/models-and-research/google-labs/stitch-ai-ui-design/</a></li>
<li><a href="https://blog.google/innovation-and-ai/models-and-research/google-labs/stitch-design-md/" target="_blank">https://blog.google/innovation-and-ai/models-and-research/google-labs/stitch-design-md/</a></li>
<li><a href="https://blog.google/innovation-and-ai/models-and-research/google-labs/stitch-updates/" target="_blank">https://blog.google/innovation-and-ai/models-and-research/google-labs/stitch-updates/</a></li>
</ul></section><section><h3>Refero<a href="#refero"><span>#</span></a></h3><ul>
<li><a href="https://refero.design/" target="_blank">https://refero.design/</a></li>
<li><a href="https://refero.design/mcp" target="_blank">https://refero.design/mcp</a></li>
<li><a href="https://styles.refero.design/" target="_blank">https://styles.refero.design/</a></li>
<li><a href="https://styles.refero.design/design-md/what-is-design-md" target="_blank">https://styles.refero.design/design-md/what-is-design-md</a></li>
<li><a href="https://styles.refero.design/ai-agents/design-md-examples" target="_blank">https://styles.refero.design/ai-agents/design-md-examples</a></li>
</ul><p>Refero Skill：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>npx</span><span> </span><span>skills</span><span> </span><span>add</span><span> </span><span>https://github.com/referodesign/refero_skill</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>Anthropic frontend-design<a href="#anthropic-frontend-design"><span>#</span></a></h3><ul>
<li><a href="https://github.com/anthropics/claude-code/tree/main/plugins/frontend-design" target="_blank">https://github.com/anthropics/claude-code/tree/main/plugins/frontend-design</a></li>
<li><a href="https://github.com/anthropics/skills/tree/main/skills/frontend-design" target="_blank">https://github.com/anthropics/skills/tree/main/skills/frontend-design</a></li>
<li><a href="https://github.com/anthropics/claude-plugins-official/tree/main/plugins/frontend-design" target="_blank">https://github.com/anthropics/claude-plugins-official/tree/main/plugins/frontend-design</a></li>
</ul></section><section><h3>Impeccable<a href="#impeccable"><span>#</span></a></h3><ul>
<li><a href="https://github.com/pbakaus/impeccable" target="_blank">https://github.com/pbakaus/impeccable</a></li>
<li><a href="https://impeccable.style/" target="_blank">https://impeccable.style/</a></li>
</ul><p>安装：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>npx</span><span> </span><span>impeccable</span><span> </span><span>install</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>21st.dev<a href="#21stdev"><span>#</span></a></h3><ul>
<li><a href="https://21st.dev/" target="_blank">https://21st.dev/</a></li>
<li><a href="https://21st.dev/mcp" target="_blank">https://21st.dev/mcp</a></li>
</ul><p>示例：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>21st</span><span> </span><span>search</span><span> </span><span>"pricing table"</span></div></div><div><div><div>2</div></div><div><span>21st</span><span> </span><span>generate</span><span> </span><span>"a pricing table"</span><span> </span><span>--variants</span><span> </span><span>3</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>UI/UX Pro Max<a href="#uiux-pro-max"><span>#</span></a></h3><ul>
<li><a href="https://github.com/nextlevelbuilder/ui-ux-pro-max-skill" target="_blank">https://github.com/nextlevelbuilder/ui-ux-pro-max-skill</a></li>
<li><a href="https://uupm.cc" target="_blank">https://uupm.cc</a></li>
</ul><p>Claude：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>npx</span><span> </span><span>ui-ux-pro-max-cli</span><span> </span><span>init</span><span> </span><span>--ai</span><span> </span><span>claude</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>Codex：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>npx</span><span> </span><span>ui-ux-pro-max-cli</span><span> </span><span>init</span><span> </span><span>--ai</span><span> </span><span>codex</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>Figma Make<a href="#figma-make"><span>#</span></a></h3><ul>
<li><a href="https://www.figma.com/make/" target="_blank">https://www.figma.com/make/</a></li>
<li><a href="https://www.figma.com/solutions/ai-web-design/" target="_blank">https://www.figma.com/solutions/ai-web-design/</a></li>
<li><a href="https://www.figma.com/solutions/ai-design-generator/" target="_blank">https://www.figma.com/solutions/ai-design-generator/</a></li>
</ul></section><section><h3>v0<a href="#v0"><span>#</span></a></h3><ul>
<li><a href="https://v0.app/" target="_blank">https://v0.app/</a></li>
<li><a href="https://v0.app/docs/screenshots" target="_blank">https://v0.app/docs/screenshots</a></li>
<li><a href="https://v0.app/docs/design-mode" target="_blank">https://v0.app/docs/design-mode</a></li>
</ul></section><section><h3>灵感 / 组件<a href="#灵感--组件"><span>#</span></a></h3><p>Landbook：</p><p><a href="https://land-book.com/" target="_blank">https://land-book.com/</a></p><p>Mobbin：</p><p><a href="https://mobbin.com/" target="_blank">https://mobbin.com/</a></p><p>Aceternity UI：</p><p><a href="https://ui.aceternity.com/" target="_blank">https://ui.aceternity.com/</a></p><p>shadcn Blocks：</p><p><a href="https://ui.shadcn.com/blocks" target="_blank">https://ui.shadcn.com/blocks</a></p><hr /></section></section><section><h2>一句话总结<a href="#一句话总结"><span>#</span></a></h2><p>以后遇到：</p><blockquote><p>“我要做前端，但是我完全没有设计方向。”</p></blockquote><p>不要直接进入代码阶段。</p><p>把默认流程改成：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Understand Product</span></div></div><div><div><div>2</div></div><div><span>→ Research Real Interfaces</span></div></div><div><div><div>3</div></div><div><span>→ Explore 3 Directions</span></div></div><div><div><div>4</div></div><div><span>→ Choose</span></div></div><div><div><div>5</div></div><div><span>→ DESIGN.md</span></div></div><div><div><div>6</div></div><div><span>→ Build One Representative Page</span></div></div><div><div><div>7</div></div><div><span>→ Browser Screenshot</span></div></div><div><div><div>8</div></div><div><span>→ Critique</span></div></div><div><div><div>9</div></div><div><span>→ Audit</span></div></div><div><div><div>10</div></div><div><span>→ Polish</span></div></div><div><div><div>11</div></div><div><span>→ Scale to the Rest of the Product</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>真正决定 AI UI 质量的，不是某一个“神级 Prompt”。</p><p>而是：</p><blockquote><p><strong>不要让模型凭空猜审美，要让它先看到真实设计、形成明确规则，再写代码。</strong></p></blockquote></section></section>]]></content>
    </entry>
    <entry>
      <id>https://yyq-firefly.pages.dev/posts/50-tutorials/windows/codex-microsoft-store-%E6%9B%B4%E6%96%B0%E5%8D%A1%E4%BD%8F%E6%8E%92%E6%9F%A5/</id>
      <title type="text">Codex Microsoft Store 更新卡住排查</title>
      <published>2026-09-23T00:00:00.000Z</published>
      <updated>2026-09-23T00:00:00.000Z</updated>
      <author><name>YYQ</name></author>
      <link rel="alternate" href="https://yyq-firefly.pages.dev/posts/50-tutorials/windows/codex-microsoft-store-%E6%9B%B4%E6%96%B0%E5%8D%A1%E4%BD%8F%E6%8E%92%E6%9F%A5/"/>
      <summary type="text"></summary>
      <content type="html"><![CDATA[<section><h1>Codex Microsoft Store 更新卡住排查<a href="#codex-microsoft-store-更新卡住排查"><span>#</span></a></h1><p>相关笔记：<a href="/posts/50-Tutorials/Windows/Codex%20Windows%20%E5%BE%AE%E8%BD%AF%E5%95%86%E5%BA%97%E5%AE%89%E8%A3%85%E5%8C%85%E6%8F%90%E5%8F%96%E4%B8%8E%E6%89%8B%E5%8A%A8%E6%9B%B4%E6%96%B0/">Codex Windows 微软商店安装包提取与手动更新</a>、<a href="/posts/50-Tutorials/Windows/ChatGPT%20Windows%20%E5%8D%87%E7%BA%A7%E5%90%8E%20Proxifier%20%E7%BD%91%E7%BB%9C%E5%BC%82%E5%B8%B8%E6%8E%92%E6%9F%A5/">ChatGPT Windows 升级后 Proxifier 网络异常排查</a></p><blockquote><p>本文记录一台 Windows 10 电脑在 2026-09-21 至 2026-09-23 的实际案例。故障先后由两个不同问题造成，不能合并成一次“商店更新失败”。</p><p>2026-09-23 复核时，<code>OpenAI.Codex</code> 已安装目标版本 <code>26.917.6896.0</code>，包状态为 <code>Ok</code>。</p></blockquote><section><h2>1. 现象<a href="#1-现象"><span>#</span></a></h2><p>Codex 左下角持续显示更新图标。点击下载后，界面停在“正在安装更新／正在准备”；但“帮助 → 检查更新”却提示没有更新。Microsoft Store 中对应的 <strong>ChatGPT</strong> 项目显示排队或 0%。</p><p>这里容易看错对象：商店里的 ChatGPT 项目，在这台电脑上对应程序包 <code>OpenAI.Codex</code>。</p></section><section><h2>2. 两个阻塞点<a href="#2-两个阻塞点"><span>#</span></a></h2>

<table><thead><tr><th>阶段</th><th>本机证据</th><th>结论</th></tr></thead><tbody><tr><td>下载服务无法启动（9 月 21—22 日）</td><td>Codex、Microsoft Store、HP Smart、应用安装程序出现 <code>0x80246008</code>；DoSvc 启动后立即停止，退出码为 <code>2</code>；系统事件 7023 报“系统找不到指定的文件”</td><td>空的 <code>Parameters</code> 子键遮住了上一级有效的 <code>ServiceDll</code>。移除该空子键后，服务可以启动。</td></tr><tr><td>商店队列停滞（9 月 23 日）</td><td>Codex 与商店购买组件均为 <code>Pending</code>、0 字节；此时 DoSvc 已正常运行</td><td>重启 <code>InstallService</code> 后队列开始推进。这只证明重启对这次队列有效，不能说明此前停滞的底层原因。</td></tr></tbody></table><p>第一阶段修复后，一次仅下载测试曾出现 <code>0x80072EE2</code> 网络超时和 0 字节进度。随后同一测试文件下载完成，多个商店应用也更新成功，因此不能根据早期超时认定网络持续故障。</p></section><section><h2>3. 修复 DoSvc<a href="#3-修复-dosvc"><span>#</span></a></h2><p><code>HKLM\SYSTEM\CurrentControlSet\Services\DoSvc</code> 根键中的 <code>ServiceDll</code> 是：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>REG_EXPAND_SZ  %SystemRoot%\system32\dosvc.dll</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>文件存在且签名有效，但这台电脑上同级的 <code>Parameters</code> 子键存在且完全为空。静态检查 <code>svchost.exe</code> 的读取顺序可见：它先从 <code>Parameters</code> 读取 <code>ServiceDll</code>，只有子键不存在时才回退到服务根键。读取空子键返回错误 <code>2</code>，与 DoSvc 的启动失败一致。</p><p>2026-09-22 11&lt;27&gt; 做了最小修复：</p><ol>
<li>备份 DoSvc 注册表子树、空子键权限和服务状态。</li>
<li>确认该子键没有值、没有下级键。</li>
<li>只删除这个空子键。</li>
<li>对比修复前后的注册表导出，确认差异只有该空子键。</li>
</ol><p>没有修改上一级 <code>ServiceDll</code>，也没有清理商店缓存或应用数据。</p><p>随后 DoSvc 两次启动都进入 <code>RUNNING</code>，退出码为 <code>0</code>，不再出现错误 <code>2</code>。Microsoft Store、应用安装程序、HP Smart 和 Codex 的已安装版本也都发生了升级。</p><p>这个修复有明确前提：<code>Parameters</code> 必须完全为空，根键配置必须有效，并且先完成备份。它不是通用的注册表清理方法。</p></section><section><h2>4. 推进停滞的商店队列<a href="#4-推进停滞的商店队列"><span>#</span></a></h2><p>到 2026-09-23，Codex 已安装 <code>26.915.4065.0</code>，商店日志指向待更新版本 <code>26.917.6896.0</code>，但 Codex 和 <code>Microsoft.StorePurchaseApp</code> 的实时队列仍是 <code>Pending</code>、0 字节。</p><p>应用更新器日志已经记录商店发现了更新，而应用内的“检查更新”仍提示没有更新。界面文字不能代替包版本和队列状态。商店日志里还出现过一次“RPC 服务器不可用”，它与队列停滞是否有因果关系并未确认。</p><p>11&lt;02&gt; 确认队列中没有正在安装的项目后，正常停止并重新启动 <code>InstallService</code>，没有强制结束进程。两个项目随后从 <code>Pending</code> 转为活动状态：</p><ul>
<li>商店购买组件下载约 12.2 MB 后安装完成，版本由 <code>22607.1401.4.0</code> 升至 <code>22608.1401.1.0</code>。</li>
<li>Codex 先显示 <code>ReadyToDownload</code>，随后进入下载。</li>
</ul><p>当天 11&lt;10&gt; 的中间状态是：两个服务均为 <code>RUNNING</code>、退出码 <code>0</code>；Codex 已下载 29,193,019 字节，进度 4%，已安装版本仍是旧版本。当时只能确认下载已开始。</p><p>2026-09-23 再次复核时，<code>OpenAI.Codex</code> 的已安装版本已经是 <code>26.917.6896.0</code>，包状态为 <code>Ok</code>。本次没有清空商店缓存、重装 Codex 或修改网络配置。</p></section><section><h2>5. 后续判断<a href="#5-后续判断"><span>#</span></a></h2><ul>
<li><code>Pending</code>、<code>ReadyToDownload</code>、<code>Downloading</code>、<code>Installing</code> 是不同阶段。“正在安装更新”不足以证明已经进入安装。</li>
<li>重启 <code>InstallService</code> 只说明它解决了这一次队列停滞，不能推广为所有商店更新故障的修复方法。</li>
<li>如果下载再次停滞，应按新的时间戳检查队列、已下载字节和事件，不要沿用上一次的错误码。</li>
<li>商店更新仍不可用时，可改用<a href="/posts/50-Tutorials/Windows/Codex%20Windows%20%E5%BE%AE%E8%BD%AF%E5%95%86%E5%BA%97%E5%AE%89%E8%A3%85%E5%8C%85%E6%8F%90%E5%8F%96%E4%B8%8E%E6%89%8B%E5%8A%A8%E6%9B%B4%E6%96%B0/">Codex Windows 微软商店安装包提取与手动更新</a>。</li>
</ul></section></section>]]></content>
    </entry>
    <entry>
      <id>https://yyq-firefly.pages.dev/posts/50-tutorials/windows/codex-%E4%B8%8E-claude-code-%E8%A7%84%E5%88%99%E6%96%87%E4%BB%B6%E7%BB%9F%E4%B8%80/</id>
      <title type="text">Codex 与 Claude Code 规则文件统一</title>
      <published>2026-09-23T00:00:00.000Z</published>
      <updated>2026-09-23T00:00:00.000Z</updated>
      <author><name>YYQ</name></author>
      <link rel="alternate" href="https://yyq-firefly.pages.dev/posts/50-tutorials/windows/codex-%E4%B8%8E-claude-code-%E8%A7%84%E5%88%99%E6%96%87%E4%BB%B6%E7%BB%9F%E4%B8%80/"/>
      <summary type="text"></summary>
      <content type="html"><![CDATA[<section><h1>Codex 与 Claude Code 规则文件统一<a href="#codex-与-claude-code-规则文件统一"><span>#</span></a></h1><p>相关笔记：<a href="/posts/50-Tutorials/Windows/Claude%20Code%20Hook%20%E9%80%9A%E7%9F%A5%E4%B8%8E%E6%8F%90%E7%A4%BA%E9%9F%B3%E9%85%8D%E7%BD%AE/">Claude Code Hook 通知与提示音配置</a>、<a href="/posts/50-Tutorials/Windows/Codex%20Claude%20%E8%BD%AF%E4%BB%B6%E7%BA%A7%E4%BB%A3%E7%90%86%E8%AE%BE%E7%BD%AE%E6%95%99%E7%A8%8B/">Codex Claude 软件级代理设置教程</a></p><blockquote><p>适用场景：同一台电脑同时使用 Codex 和 Claude Code，希望个人规则和项目规则都只维护一份。</p><ul>
<li>全局规则只写 <code>~/.codex/AGENTS.md</code></li>
<li>Claude Code 通过 <code>@</code> 引用这份规则</li>
<li>新项目只写 <code>AGENTS.md</code></li>
<li>只有 <code>CLAUDE.md</code> 的旧项目由 Codex fallback 兼容</li>
</ul></blockquote><section><h2>1. 最终结构<a href="#1-最终结构"><span>#</span></a></h2><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>全局：</span></div></div><div><div><div>2</div></div><div><span>~/.codex/AGENTS.md      ← 唯一维护的个人规则</span></div></div><div><div><div>3</div></div><div><span>~/.claude/CLAUDE.md     ← 只写 @~/.codex/AGENTS.md</span></div></div><div><div><div>4</div></div><div>
</div></div><div><div><div>5</div></div><div><span>项目：</span></div></div><div><div><div>6</div></div><div><span>project/AGENTS.md       ← 唯一维护的项目规则</span></div></div><div><div><div>7</div></div><div><span>project/CLAUDE.md       ← 可选；需要时只写 @AGENTS.md</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>Windows 上的用户目录对应：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>C:\Users\&lt;用户名&gt;\.codex\AGENTS.md</span></div></div><div><div><div>2</div></div><div><span>C:\Users\&lt;用户名&gt;\.claude\CLAUDE.md</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>不使用软链接，也不再增加第三份公共规则文件。</p></section><section><h2>2. 全局规则<a href="#2-全局规则"><span>#</span></a></h2><p><code>~/.codex/AGENTS.md</code> 保存真正的个人规则，例如：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span># Global Instructions</span></div></div><div><div><div>2</div></div><div>
</div></div><div><div><div>3</div></div><div><span><span>-</span><span> 未经用户明确授权禁止 git push。</span></span></div></div><div><div><div>4</div></div><div><span><span>-</span><span> 修改代码时优先最小改动。</span></span></div></div><div><div><div>5</div></div><div><span><span>-</span><span> 不做与当前任务无关的重构。</span></span></div></div><div><div><div>6</div></div><div><span><span>-</span><span> 修改完成后执行必要验证。</span></span></div></div><div><div><div>7</div></div><div><span><span>-</span><span> Git 操作前注意敏感信息。</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><code>~/.claude/CLAUDE.md</code> 只保留：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>@~/.codex/AGENTS.md</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>Claude Code 会在载入用户级 <code>CLAUDE.md</code> 时导入这份文件。用户级 <code>~/.claude/CLAUDE.md</code> 不算项目规则，因此不会阻止项目中的 <code>AGENTS.md</code> 被读取。</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>~/.codex/AGENTS.md</span></div></div><div><div><div>2</div></div><div><span><span>        </span></span><span>├─→ Codex</span></div></div><div><div><div>3</div></div><div><span><span>        </span></span><span>└─→ ~/.claude/CLAUDE.md ─→ Claude Code</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h2>3. 新项目<a href="#3-新项目"><span>#</span></a></h2><p>新项目只保留：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>project/</span></div></div><div><div><div>2</div></div><div><span>└─ AGENTS.md</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>Codex 会直接读取它。Claude Code 在默认模式下发现项目没有 <code>CLAUDE.md</code>，也会读取 <code>AGENTS.md</code>。这是维护成本最低的形式。</p></section><section><h2>4. 兼容旧项目<a href="#4-兼容旧项目"><span>#</span></a></h2><p>旧项目可能只有：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>project/</span></div></div><div><div><div>2</div></div><div><span>└─ CLAUDE.md</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>Codex 默认不读取它。在 <code>~/.codex/config.toml</code> 的顶层增加：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>project_doc_fallback_filenames</span><span> = [</span><span>"CLAUDE.md"</span><span>]</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>它必须是顶层字段，不能写进某个 <code>[section]</code> 下面。</p><p>fallback 的含义是“没有标准规则文件时才读取”，不是两份一起读取：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>AGENTS.override.md 存在 → 使用它</span></div></div><div><div><div>2</div></div><div><span>否则 AGENTS.md 存在     → 使用它</span></div></div><div><div><div>3</div></div><div><span>否则 CLAUDE.md 存在     → 使用它</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>因此，项目里已经有 <code>AGENTS.md</code> 时，Codex 不会再加载同目录的 <code>CLAUDE.md</code>。</p></section><section><h2>5. 两边都有文件时<a href="#5-两边都有文件时"><span>#</span></a></h2><p>如果项目同时保留两份文件，默认读取结果会不同：</p>

<table><thead><tr><th>项目文件</th><th>Codex（已配置 fallback）</th><th>Claude Code 默认模式</th></tr></thead><tbody><tr><td>只有 <code>AGENTS.md</code></td><td><code>AGENTS.md</code></td><td><code>AGENTS.md</code></td></tr><tr><td>只有 <code>CLAUDE.md</code></td><td><code>CLAUDE.md</code></td><td><code>CLAUDE.md</code></td></tr><tr><td>两份都有</td><td>只用 <code>AGENTS.md</code></td><td>只用 <code>CLAUDE.md</code></td></tr></tbody></table><p>要消除最后一行的差异，让 <code>CLAUDE.md</code> 只负责导入：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>@AGENTS.md</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>Claude Code 仍从 <code>CLAUDE.md</code> 进入，但实际规则来自 <code>AGENTS.md</code>；Codex 则直接读取 <code>AGENTS.md</code>。不要把 <code>@</code> 写进 <code>AGENTS.md</code>，Codex 不会处理这种导入。</p><p>如果确实需要 Claude Code 同时主动加载两份独立内容，可以在 <code>/config</code> 的 Project instructions 中改为 <code>claude-md-and-agents-md</code>。同一份由 <code>@AGENTS.md</code> 导入的内容会去重。没有这种需求时，保持默认的 <code>claude-md-or-agents-md</code> 即可。</p></section><section><h2>6. 多层目录<a href="#6-多层目录"><span>#</span></a></h2><p>Codex 会从全局目录一直读到当前工作目录，更靠近当前目录的规则更具体：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>~/.codex/AGENTS.md</span></div></div><div><div><div>2</div></div><div><span><span>        </span></span><span>↓</span></div></div><div><div><div>3</div></div><div><span>project/AGENTS.md</span></div></div><div><div><div>4</div></div><div><span><span>        </span></span><span>↓</span></div></div><div><div><div>5</div></div><div><span>project/module-a/AGENTS.md</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>根目录写通用规则，模块目录只写该模块的特殊规则，不要把根规则整份复制到子目录。</p></section><section><h2>7. 迁移顺序<a href="#7-迁移顺序"><span>#</span></a></h2><ol>
<li>全局只维护 <code>~/.codex/AGENTS.md</code>，让 <code>~/.claude/CLAUDE.md</code> 引用它。</li>
<li>给 Codex 配置 <code>CLAUDE.md</code> fallback，先兼容旧项目。</li>
<li>新项目只创建 <code>AGENTS.md</code>。</li>
<li>整理旧项目时，把规则移入 <code>AGENTS.md</code>，原 <code>CLAUDE.md</code> 改为 <code>@AGENTS.md</code>。</li>
<li>确认所用 Claude Code 能直接读取 <code>AGENTS.md</code> 后，再考虑删除仅作兼容的 <code>CLAUDE.md</code>。</li>
</ol><p>修改配置后重新打开会话。Claude Code 可用 <code>/context</code> 查看实际载入的规则文件，并用 <code>/config</code> 确认 Project instructions 的模式。Codex 可以在临时项目中分别放入内容明显不同的 <code>AGENTS.md</code> 和 <code>CLAUDE.md</code>，用新会话确认实际读取了哪一份。</p></section><section><h2>参考<a href="#参考"><span>#</span></a></h2><ul>
<li><a href="https://developers.openai.com/api/docs/guides/latest-model" target="_blank">OpenAI Codex：Model guidance / Using agents.md</a></li>
<li><a href="https://developers.openai.com/docs/config-file/config-reference" target="_blank">OpenAI Codex：Configuration reference</a></li>
<li><a href="https://developers.openai.com/docs/config-file/config-basic" target="_blank">OpenAI Codex：Basic configuration</a></li>
<li><a href="https://code.claude.com/docs/en/memory" target="_blank">Claude Code：Memory / CLAUDE.md / AGENTS.md</a></li>
<li><a href="https://github.com/anthropics/claude-code/blob/main/mods/agents-md/README.md" target="_blank">Claude Code agents-md 插件说明</a></li>
</ul></section></section>]]></content>
    </entry>
    <entry>
      <id>https://yyq-firefly.pages.dev/posts/50-tutorials/windows/git-%E4%B8%8E-github-ssh-%E4%BB%A3%E7%90%86%E9%85%8D%E7%BD%AE%E6%95%99%E7%A8%8B/</id>
      <title type="text">Git 与 GitHub SSH 代理配置教程</title>
      <published>2026-09-20T00:00:00.000Z</published>
      <updated>2026-09-20T00:00:00.000Z</updated>
      <author><name>YYQ</name></author>
      <link rel="alternate" href="https://yyq-firefly.pages.dev/posts/50-tutorials/windows/git-%E4%B8%8E-github-ssh-%E4%BB%A3%E7%90%86%E9%85%8D%E7%BD%AE%E6%95%99%E7%A8%8B/"/>
      <summary type="text"></summary>
      <content type="html"><![CDATA[<p>相关笔记：<a href="/posts/50-Tutorials/Windows/Codex%20Claude%20%E8%BD%AF%E4%BB%B6%E7%BA%A7%E4%BB%A3%E7%90%86%E8%AE%BE%E7%BD%AE%E6%95%99%E7%A8%8B/">Codex Claude 软件级代理设置教程</a>、<a href="/posts/50-Tutorials/Windows/GitHub%20%E6%8F%90%E4%BA%A4%E9%82%AE%E7%AE%B1%E9%9A%90%E7%A7%81%E4%B8%8E%20Git%20%E5%A4%9A%E8%BA%AB%E4%BB%BD%E9%85%8D%E7%BD%AE/">GitHub 提交邮箱隐私与 Git 多身份配置</a>、<a href="/posts/50-Tutorials/Windows/Windows%20%E4%BD%BF%E7%94%A8%20KeePassXC%20%E4%B8%8E%20SSH%20Agent%20%E7%AE%A1%E7%90%86%20SSH%20%E5%AF%86%E9%92%A5/">Windows 使用 KeePassXC 与 SSH Agent 管理 SSH 密钥</a></p>
<blockquote><p>适用场景：Windows + Git for Windows + 本地代理工具（Clash / FlClash 等）。</p><ul>
<li>Git 的 <strong>HTTP/HTTPS</strong> 仓库走本地代理端口</li>
<li>Git 的 <strong>SSH</strong> 仓库通过 <code>~/.ssh/config</code> 走同一个本地代理端口</li>
<li>GitHub、GitLab 均可使用</li>
</ul><p>本文用 <code>&lt;本地代理端口&gt;</code> 作为示例占位符，请替换成你实际代理工具监听的端口。</p></blockquote>
<section><h2>1. 先理解两套代理分别管什么<a href="#1-先理解两套代理分别管什么"><span>#</span></a></h2><p>Git 仓库常见有两种地址。</p><section><h3>HTTPS 地址<a href="#https-地址"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>https://github.com/user/repo.git</span></div></div><div><div><div>2</div></div><div><span>https://gitlab.com/user/repo.git</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>这种连接受 Git 的：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>http.proxy</span></div></div><div><div><div>2</div></div><div><span>https.proxy</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>控制。</p></section><section><h3>SSH 地址<a href="#ssh-地址"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>git@github.com:user/repo.git</span></div></div><div><div><div>2</div></div><div><span>git@gitlab.com:user/repo.git</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>这种连接实际上由 <code>ssh.exe</code> 建立，<strong>不会读取 Git 的 <code>http.proxy</code> / <code>https.proxy</code></strong>。</p><p>因此最终方案是：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Git HTTPS</span></div></div><div><div><div>2</div></div><div><span><span>    </span></span><span>↓</span></div></div><div><div><div>3</div></div><div><span>~/.gitconfig</span></div></div><div><div><div>4</div></div><div><span><span>    </span></span><span>↓</span></div></div><div><div><div>5</div></div><div><span>127.0.0.1:&lt;本地代理端口&gt;</span></div></div><div><div><div>6</div></div><div>
</div></div><div><div><div>7</div></div><div><span>Git SSH</span></div></div><div><div><div>8</div></div><div><span><span>    </span></span><span>↓</span></div></div><div><div><div>9</div></div><div><span>~/.ssh/config</span></div></div><div><div><div>10</div></div><div><span><span>    </span></span><span>↓</span></div></div><div><div><div>11</div></div><div><span>ProxyCommand</span></div></div><div><div><div>12</div></div><div><span><span>    </span></span><span>↓</span></div></div><div><div><div>13</div></div><div><span>127.0.0.1:&lt;本地代理端口&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section></section>
<section><h2>2. 查看当前 Git 代理配置<a href="#2-查看当前-git-代理配置"><span>#</span></a></h2><p>推荐先执行：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span><span>git config </span><span>--</span></span><span>show-origin</span><span><span> </span><span>--</span></span><span>show-scope</span><span><span> </span><span>--</span></span><span>get-regexp</span><span> </span><span>"proxy"</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>它会显示：</p><ul>
<li>配置作用域</li>
<li>配置文件位置</li>
<li>当前代理内容</li>
</ul><p>也可以只查看全局配置：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span><span>git config </span><span>--</span><span>global </span><span>--</span></span><span>get-regexp</span><span> proxy</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>例如可能看到：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>http.https://github.com.proxy http://127.0.0.1:&lt;本地代理端口&gt;</span></div></div><div><div><div>2</div></div><div><span>https.https://github.com.proxy http://127.0.0.1:&lt;本地代理端口&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>这代表之前配置的是“仅 GitHub 使用代理”。</p><hr /></section>
<section><h2>3. 两种 Git 代理策略怎么选<a href="#3-两种-git-代理策略怎么选"><span>#</span></a></h2><p>Git 的 HTTP/HTTPS 代理有两种配法，适用场景相反：</p>

<table><thead><tr><th>策略</th><th>配置</th><th>适合</th></tr></thead><tbody><tr><td>全局代理</td><td>通用 <code>http.proxy</code> / <code>https.proxy</code></td><td>所有 Git 远程都需要走代理，没有必须直连的仓库</td></tr><tr><td>URL 级代理</td><td><code>http.https://github.com/.proxy</code></td><td>只有 GitHub 走代理，GitLab 或公司仓库必须直连</td></tr></tbody></table><p>如果公司仓库、内网 GitLab 必须直连，用 URL 级配置，只给 GitHub 配代理：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span><span>git config </span><span>--</span><span>global http.https:</span><span>//</span></span><span>github.com</span><span><span>/</span><span>.proxy http:</span><span>//</span></span><span>127.0</span><span>.</span><span>0.1</span><span>:&lt;本地代理端口&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>这种配法的详细说明见 <a href="/posts/50-Tutorials/Windows/Codex%20Claude%20%E8%BD%AF%E4%BB%B6%E7%BA%A7%E4%BB%A3%E7%90%86%E8%AE%BE%E7%BD%AE%E6%95%99%E7%A8%8B/">Codex Claude 软件级代理设置教程</a> 的「方案三」，本文不重复。</p><p>下面以「所有 Git 仓库统一走代理」为例。如果你已经在用 URL 级配置，可以跳到第 7 节配置 SSH。</p><hr /></section>
<section><h2>4. 清理旧的 GitHub 专用代理<a href="#4-清理旧的-github-专用代理"><span>#</span></a></h2><p>如果准备恢复为“所有 HTTPS Git 仓库统一走代理”，先删除旧的 GitHub 专用配置：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span><span>git config </span><span>--</span><span>global </span><span>--</span><span>unset</span><span>-</span><span>all http.https:</span><span>//</span></span><span>github.com</span><span>.proxy</span></div></div><div><div><div>2</div></div><div><span><span>git config </span><span>--</span><span>global </span><span>--</span><span>unset</span><span>-</span><span>all https.https:</span><span>//</span></span><span>github.com</span><span>.proxy</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>如果某条配置不存在，Git 可能返回非 0 状态，不影响后续配置。</p><p>再次检查：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span><span>git config </span><span>--</span><span>global </span><span>--</span></span><span>get-regexp</span><span> proxy</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section>
<section><h2>5. 配置所有 Git HTTP/HTTPS 请求走代理<a href="#5-配置所有-git-httphttps-请求走代理"><span>#</span></a></h2><p>执行：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span><span>git config </span><span>--</span><span>global http.proxy http:</span><span>//</span></span><span>127.0</span><span>.</span><span>0.1</span><span>:&lt;本地代理端口&gt;</span></div></div><div><div><div>2</div></div><div><span><span>git config </span><span>--</span><span>global https.proxy http:</span><span>//</span></span><span>127.0</span><span>.</span><span>0.1</span><span>:&lt;本地代理端口&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>检查：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span><span>git config </span><span>--</span><span>global </span><span>--</span></span><span>get-regexp</span><span> proxy</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>正常应看到：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>http.proxy http://127.0.0.1:&lt;本地代理端口&gt;</span></div></div><div><div><div>2</div></div><div><span>https.proxy http://127.0.0.1:&lt;本地代理端口&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>Windows 下，全局 Git 配置通常位于：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>C:\Users\你的用户名\.gitconfig</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>也可以直接打开：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span><span>git config </span><span>--</span><span>global </span><span>--</span><span>edit</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>对应配置大致为：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>[http]</span></div></div><div><div><div>2</div></div><div><span>    </span><span>proxy</span><span><span> </span><span>=</span><span> http://127.0.0.1:&lt;本地代理端口&gt;</span></span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span>[https]</span></div></div><div><div><div>5</div></div><div><span>    </span><span>proxy</span><span><span> </span><span>=</span><span> http://127.0.0.1:&lt;本地代理端口&gt;</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section>
<section><h2>6. 判断当前仓库使用 HTTPS 还是 SSH<a href="#6-判断当前仓库使用-https-还是-ssh"><span>#</span></a></h2><p>进入 Git 仓库后执行：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span><span>git remote </span><span>-</span><span>v</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>如果看到：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>origin  https://github.com/user/repo.git</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>说明当前仓库使用 HTTPS，会读取 Git 全局代理。</p><p>如果看到：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>origin  git@github.com:user/repo.git</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>说明当前仓库使用 SSH，需要继续配置 <code>~/.ssh/config</code>。</p><hr /></section>
<section><h2>7. 配置 SSH Git 走代理<a href="#7-配置-ssh-git-走代理"><span>#</span></a></h2><section><h3>7.1 Windows 下 SSH 配置文件位置<a href="#71-windows-下-ssh-配置文件位置"><span>#</span></a></h3><p>默认位置：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>C:\Users\你的用户名\.ssh\config</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>也就是：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>~/.ssh/config</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>注意：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>config</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>没有文件后缀</strong>。</p><p>如果文件不存在，可以手动创建。</p><hr /></section><section><h3>7.2 先确认 connect.exe 是否存在<a href="#72-先确认-connectexe-是否存在"><span>#</span></a></h3><p>在 PowerShell 执行：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>where.exe</span><span> connect</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>Git for Windows 常见位置可能是：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>C:\Program Files\Git\mingw64\bin\connect.exe</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>或类似路径。</p><p>只要：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>where.exe</span><span> connect</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>能找到 <code>connect.exe</code>，下面的 <code>ProxyCommand</code> 一般即可直接使用。</p><hr /></section><section><h3>7.3 给 GitHub 配置 SSH 代理<a href="#73-给-github-配置-ssh-代理"><span>#</span></a></h3><p>编辑：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>C:\Users\你的用户名\.ssh\config</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>添加：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Host github.com</span></div></div><div><div><div>2</div></div><div><span><span>    </span></span><span>HostName github.com</span></div></div><div><div><div>3</div></div><div><span><span>    </span></span><span>User git</span></div></div><div><div><div>4</div></div><div><span><span>    </span></span><span>ProxyCommand connect -S 127.0.0.1:&lt;本地代理端口&gt; %h %p</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>其中：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>-S 127.0.0.1:&lt;本地代理端口&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>表示通过本地 SOCKS 代理连接目标服务器。</p><p>如果本地代理端口是代理工具的 Mixed Port，一般同时支持 HTTP 和 SOCKS，可直接使用。</p><hr /></section><section><h3>7.4 给 GitLab 配置 SSH 代理<a href="#74-给-gitlab-配置-ssh-代理"><span>#</span></a></h3><p>继续添加：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Host gitlab.com</span></div></div><div><div><div>2</div></div><div><span><span>    </span></span><span>HostName gitlab.com</span></div></div><div><div><div>3</div></div><div><span><span>    </span></span><span>User git</span></div></div><div><div><div>4</div></div><div><span><span>    </span></span><span>ProxyCommand connect -S 127.0.0.1:&lt;本地代理端口&gt; %h %p</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>最终可以写成：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Host github.com</span></div></div><div><div><div>2</div></div><div><span><span>    </span></span><span>HostName github.com</span></div></div><div><div><div>3</div></div><div><span><span>    </span></span><span>User git</span></div></div><div><div><div>4</div></div><div><span><span>    </span></span><span>ProxyCommand connect -S 127.0.0.1:&lt;本地代理端口&gt; %h %p</span></div></div><div><div><div>5</div></div><div>
</div></div><div><div><div>6</div></div><div><span>Host gitlab.com</span></div></div><div><div><div>7</div></div><div><span><span>    </span></span><span>HostName gitlab.com</span></div></div><div><div><div>8</div></div><div><span><span>    </span></span><span>User git</span></div></div><div><div><div>9</div></div><div><span><span>    </span></span><span>ProxyCommand connect -S 127.0.0.1:&lt;本地代理端口&gt; %h %p</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section></section>
<section><h2>8. 如果已经配置 SSH Key<a href="#8-如果已经配置-ssh-key"><span>#</span></a></h2><p>如果你原本的 SSH 配置已经包含：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Host github.com</span></div></div><div><div><div>2</div></div><div><span><span>    </span></span><span>HostName github.com</span></div></div><div><div><div>3</div></div><div><span><span>    </span></span><span>User git</span></div></div><div><div><div>4</div></div><div><span><span>    </span></span><span>IdentityFile ~/.ssh/id_ed25519_github</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>不要重新再写一个相同的 <code>Host github.com</code>，直接把代理配置追加进去即可：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Host github.com</span></div></div><div><div><div>2</div></div><div><span><span>    </span></span><span>HostName github.com</span></div></div><div><div><div>3</div></div><div><span><span>    </span></span><span>User git</span></div></div><div><div><div>4</div></div><div><span><span>    </span></span><span>IdentityFile ~/.ssh/id_ed25519_github</span></div></div><div><div><div>5</div></div><div><span><span>    </span></span><span>ProxyCommand connect -S 127.0.0.1:&lt;本地代理端口&gt; %h %p</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>GitLab 同理：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Host gitlab.com</span></div></div><div><div><div>2</div></div><div><span><span>    </span></span><span>HostName gitlab.com</span></div></div><div><div><div>3</div></div><div><span><span>    </span></span><span>User git</span></div></div><div><div><div>4</div></div><div><span><span>    </span></span><span>IdentityFile ~/.ssh/id_ed25519_gitlab</span></div></div><div><div><div>5</div></div><div><span><span>    </span></span><span>ProxyCommand connect -S 127.0.0.1:&lt;本地代理端口&gt; %h %p</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section>
<section><h2>9. 测试 GitHub SSH<a href="#9-测试-github-ssh"><span>#</span></a></h2><p>确保 本地代理工具 正在运行，并且 本地代理端口正常监听。</p><p>执行：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span><span>ssh </span><span>-</span><span>T git</span></span><span>@github.com</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>首次连接可能提示确认主机指纹：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Are you sure you want to continue connecting (yes/no/[fingerprint])?</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>确认域名无误后输入：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>yes</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>认证正常时，通常会看到类似：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Hi xxx! You've successfully authenticated, but GitHub does not provide shell access.</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>这表示 SSH Key 和 SSH 代理均已经工作。</p><hr /></section>
<section><h2>10. 测试 GitLab SSH<a href="#10-测试-gitlab-ssh"><span>#</span></a></h2><p>执行：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span><span>ssh </span><span>-</span><span>T git</span></span><span>@gitlab.com</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>正常情况下会出现 GitLab 的欢迎或认证成功信息。</p><hr /></section>
<section><h2>11. 测试 Git HTTPS<a href="#11-测试-git-https"><span>#</span></a></h2><p>可以使用现有 HTTPS 仓库：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>git fetch</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>或者：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>git pull</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>只要仓库 Remote 是：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>https://...</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>就会读取：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>http.proxy</span></div></div><div><div><div>2</div></div><div><span>https.proxy</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>并通过：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>127.0.0.1:&lt;本地代理端口&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>访问。</p><hr /></section>
<section><h2>12. 查看本机代理端口是否正在监听<a href="#12-查看本机代理端口是否正在监听"><span>#</span></a></h2><p>PowerShell：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>Get-NetTCPConnection</span><span><span> </span><span>-</span><span>LocalPort &lt;本地代理端口&gt; </span><span>-</span><span>ErrorAction SilentlyContinue</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>也可以：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span><span>netstat </span><span>-</span><span>ano | findstr :&lt;本地代理端口&gt;</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>如果能看到监听状态，例如：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>LISTENING</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>说明本地代理端口已经启动。</p><hr /></section>
<section><h2>13. 查看 Git 实际使用哪个 ssh.exe<a href="#13-查看-git-实际使用哪个-sshexe"><span>#</span></a></h2><p>Windows 上可能同时存在：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>C:\Windows\System32\OpenSSH\ssh.exe</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>和：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>C:\Program Files\Git\usr\bin\ssh.exe</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>查看：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>where.exe</span><span> ssh</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>还可以检查 Git 是否单独指定 SSH：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span><span>git config </span><span>--</span></span><span>show-origin</span><span><span> </span><span>--</span><span>get core.sshCommand</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>以及环境变量：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>$env:GIT_SSH</span></div></div><div><div><div>2</div></div><div><span>$env:GIT_SSH_COMMAND</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>如果这些都没有特殊设置，Git 一般按照当前环境找到可用的 <code>ssh.exe</code>。</p><hr /></section>
<section><h2>14. 查看 SSH 最终展开后的配置<a href="#14-查看-ssh-最终展开后的配置"><span>#</span></a></h2><p>OpenSSH 可以查看某个 Host 最终会使用哪些配置：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span><span>ssh </span><span>-</span><span>G </span></span><span>github.com</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>可以重点寻找：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>hostname</span></div></div><div><div><div>2</div></div><div><span>user</span></div></div><div><div><div>3</div></div><div><span>proxycommand</span></div></div><div><div><div>4</div></div><div><span>identityfile</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>例如：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span><span>ssh </span><span>-</span><span>G </span></span><span>github.com</span><span> | </span><span>Select-String</span><span> </span><span>"hostname|user|proxycommand|identityfile"</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>如果配置生效，应能看到对应的：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>proxycommand connect -S 127.0.0.1:&lt;本地代理端口&gt; ...</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section>
<section><h2>15. 最终推荐配置<a href="#15-最终推荐配置"><span>#</span></a></h2><section><h3>Git HTTPS<a href="#git-https"><span>#</span></a></h3><p>全局：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span><span>git config </span><span>--</span><span>global http.proxy http:</span><span>//</span></span><span>127.0</span><span>.</span><span>0.1</span><span>:&lt;本地代理端口&gt;</span></div></div><div><div><div>2</div></div><div><span><span>git config </span><span>--</span><span>global https.proxy http:</span><span>//</span></span><span>127.0</span><span>.</span><span>0.1</span><span>:&lt;本地代理端口&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>对应：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>C:\Users\你的用户名\.gitconfig</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section><section><h3>Git SSH<a href="#git-ssh"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>C:\Users\你的用户名\.ssh\config</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>内容：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Host github.com</span></div></div><div><div><div>2</div></div><div><span><span>    </span></span><span>HostName github.com</span></div></div><div><div><div>3</div></div><div><span><span>    </span></span><span>User git</span></div></div><div><div><div>4</div></div><div><span><span>    </span></span><span>ProxyCommand connect -S 127.0.0.1:&lt;本地代理端口&gt; %h %p</span></div></div><div><div><div>5</div></div><div>
</div></div><div><div><div>6</div></div><div><span>Host gitlab.com</span></div></div><div><div><div>7</div></div><div><span><span>    </span></span><span>HostName gitlab.com</span></div></div><div><div><div>8</div></div><div><span><span>    </span></span><span>User git</span></div></div><div><div><div>9</div></div><div><span><span>    </span></span><span>ProxyCommand connect -S 127.0.0.1:&lt;本地代理端口&gt; %h %p</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>如果已经配置 SSH Key，则将 <code>ProxyCommand</code> 加入原有对应 <code>Host</code> 块中。</p><hr /></section></section>
<section><h2>16. 最终流量结构<a href="#16-最终流量结构"><span>#</span></a></h2><div><div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>HTTPS GitHub / GitLab / 其他 Git</span></div></div><div><div><div>2</div></div><div><span><span>                </span></span><span>│</span></div></div><div><div><div>3</div></div><div><span><span>                </span></span><span>▼</span></div></div><div><div><div>4</div></div><div><span><span>          </span></span><span>Git .gitconfig</span></div></div><div><div><div>5</div></div><div><span><span>                </span></span><span>│</span></div></div><div><div><div>6</div></div><div><span><span>                </span></span><span>▼</span></div></div><div><div><div>7</div></div><div><span><span>       </span></span><span>http://127.0.0.1:&lt;本地代理端口&gt;</span></div></div><div><div><div>8</div></div><div><span><span>                </span></span><span>│</span></div></div><div><div><div>9</div></div><div><span><span>                </span></span><span>▼</span></div></div><div><div><div>10</div></div><div><span><span>             </span></span><span>本地代理工具</span></div></div><div><div><div>11</div></div><div>
</div></div><div><div><div>12</div></div><div>
</div></div><div><div><div>13</div></div><div><span>SSH GitHub / GitLab</span></div></div><div><div><div>14</div></div><div><span><span>                </span></span><span>│</span></div></div><div><div><div>15</div></div><div><span><span>                </span></span><span>▼</span></div></div><div><div><div>16</div></div><div><span><span>           </span></span><span>ssh.exe</span></div></div><div><div><div>17</div></div><div><span><span>                </span></span><span>│</span></div></div><div><div><div>18</div></div><div><span><span>                </span></span><span>▼</span></div></div><div><div><div>19</div></div><div><span><span>          </span></span><span>~/.ssh/config</span></div></div><div><div><div>20</div></div><div><span><span>                </span></span><span>│</span></div></div><div><div><div>21</div></div><div><span><span>                </span></span><span>▼</span></div></div><div><div><div>22</div></div><div><span><span> </span></span><span>ProxyCommand connect -S 127.0.0.1:&lt;本地代理端口&gt;</span></div></div><div><div><div>23</div></div><div><span><span>                </span></span><span>│</span></div></div><div><div><div>24</div></div><div><span><span>                </span></span><span>▼</span></div></div><div><div><div>25</div></div><div><span><span>             </span></span><span>本地代理工具</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div><p>这样 HTTP/HTTPS 和 SSH 两套 Git 连接都可以统一经过本地代理。</p><hr /></section>
<section><h2>17. 撤销 Git HTTP/HTTPS 代理<a href="#17-撤销-git-httphttps-代理"><span>#</span></a></h2><p>如果以后不想让 Git HTTP/HTTPS 走代理：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span><span>git config </span><span>--</span><span>global </span><span>--</span><span>unset</span><span>-</span><span>all http.proxy</span></span></div></div><div><div><div>2</div></div><div><span><span>git config </span><span>--</span><span>global </span><span>--</span><span>unset</span><span>-</span><span>all https.proxy</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>检查：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span><span>git config </span><span>--</span><span>global </span><span>--</span></span><span>get-regexp</span><span> proxy</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>没有输出即代表 Git 全局代理已删除。</p><hr /></section>
<section><h2>18. 撤销 SSH 代理<a href="#18-撤销-ssh-代理"><span>#</span></a></h2><p>打开：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>C:\Users\你的用户名\.ssh\config</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>删除 GitHub / GitLab Host 块中的：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>ProxyCommand connect -S 127.0.0.1:&lt;本地代理端口&gt; %h %p</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>例如从：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Host github.com</span></div></div><div><div><div>2</div></div><div><span><span>    </span></span><span>HostName github.com</span></div></div><div><div><div>3</div></div><div><span><span>    </span></span><span>User git</span></div></div><div><div><div>4</div></div><div><span><span>    </span></span><span>IdentityFile ~/.ssh/id_ed25519_github</span></div></div><div><div><div>5</div></div><div><span><span>    </span></span><span>ProxyCommand connect -S 127.0.0.1:&lt;本地代理端口&gt; %h %p</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>恢复为：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Host github.com</span></div></div><div><div><div>2</div></div><div><span><span>    </span></span><span>HostName github.com</span></div></div><div><div><div>3</div></div><div><span><span>    </span></span><span>User git</span></div></div><div><div><div>4</div></div><div><span><span>    </span></span><span>IdentityFile ~/.ssh/id_ed25519_github</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>即可。</p><hr /></section>
<section><h2>19. 常见问题<a href="#19-常见问题"><span>#</span></a></h2><section><h3>问题 1：配置了 Git 全局 proxy，为什么 SSH 不走代理？<a href="#问题-1配置了-git-全局-proxy为什么-ssh-不走代理"><span>#</span></a></h3><p>因为：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>http.proxy</span></div></div><div><div><div>2</div></div><div><span>https.proxy</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>属于 Git HTTP 传输层配置。</p><p>而：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>git@github.com:...</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>调用的是 SSH，两者完全独立。</p><p>因此 SSH 必须通过：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>~/.ssh/config</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>或其他 SSH/系统级代理方式单独处理。</p><hr /></section><section><h3>问题 2：为什么推荐 <code>.ssh/config</code>，而不是 Proxifier 接管 ssh.exe？<a href="#问题-2为什么推荐-sshconfig而不是-proxifier-接管-sshexe"><span>#</span></a></h3><p>两种方案都可以。</p><p>使用 <code>.ssh/config</code> 的优点是：</p><ul>
<li>配置属于 SSH 自身</li>
<li>哪些域名走代理一目了然</li>
<li>不依赖 Proxifier 的进程匹配</li>
<li>不影响其他使用 <code>ssh.exe</code> 的场景</li>
<li>SSH Key 和代理规则可以放在一起管理</li>
</ul><p>如果 GitHub/GitLab 的 SSH 使用比较固定，<code>.ssh/config</code> 通常更加清晰。</p><hr /></section><section><h3>问题 3：本地代理端口到底应该使用 HTTP 还是 SOCKS？<a href="#问题-3本地代理端口到底应该使用-http-还是-socks"><span>#</span></a></h3><p>Git HTTPS 使用：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>http://127.0.0.1:&lt;本地代理端口&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>SSH <code>ProxyCommand connect</code> 使用：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>-S 127.0.0.1:&lt;本地代理端口&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>后者表示 SOCKS。</p><p>如果本地代理端口是代理工具的 Mixed Port，一般可以同时支持这两种方式。</p><hr /></section><section><h3>问题 4：公司 GitLab 不希望走代理怎么办？<a href="#问题-4公司-gitlab-不希望走代理怎么办"><span>#</span></a></h3><p>不要给公司 GitLab 的 Host 配：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>ProxyCommand</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>例如：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Host gitlab.company.com</span></div></div><div><div><div>2</div></div><div><span><span>    </span></span><span>HostName gitlab.company.com</span></div></div><div><div><div>3</div></div><div><span><span>    </span></span><span>User git</span></div></div><div><div><div>4</div></div><div><span><span>    </span></span><span>IdentityFile ~/.ssh/id_ed25519_company</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>即可继续直连。</p><p>需要注意：如果你同时设置了 Git 全局：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>http.proxy</span></div></div><div><div><div>2</div></div><div><span>https.proxy</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>那么公司 Git 仓库如果使用 <strong>HTTPS Remote</strong>，仍会尝试走全局 Git HTTP 代理。</p><p>这种情况下可以再根据域名做例外配置，或者公司仓库统一使用 SSH。</p><hr /></section></section>
<section><h2>20. 日常排查命令速查<a href="#20-日常排查命令速查"><span>#</span></a></h2><p>查看 Git 代理：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span><span>git config </span><span>--</span></span><span>show-origin</span><span><span> </span><span>--</span></span><span>show-scope</span><span><span> </span><span>--</span></span><span>get-regexp</span><span> proxy</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>查看 Remote：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span><span>git remote </span><span>-</span><span>v</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>查看 SSH：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>where.exe</span><span> ssh</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>查看 connect：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>where.exe</span><span> connect</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>查看 GitHub SSH 展开配置：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span><span>ssh </span><span>-</span><span>G </span></span><span>github.com</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>测试 GitHub：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span><span>ssh </span><span>-</span><span>T git</span></span><span>@github.com</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>测试 GitLab：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span><span>ssh </span><span>-</span><span>T git</span></span><span>@gitlab.com</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>检查代理端口：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span><span>netstat </span><span>-</span><span>ano | findstr :&lt;本地代理端口&gt;</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section>
<section><h2>配置总结<a href="#配置总结"><span>#</span></a></h2><p>最终只需要记住两处：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>C:\Users\你的用户名\.gitconfig</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>负责：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Git HTTP / HTTPS</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>以及：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>C:\Users\你的用户名\.ssh\config</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>负责：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Git SSH</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>统一指向：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>127.0.0.1:&lt;本地代理端口&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>即可。</p></section>]]></content>
    </entry>
    <entry>
      <id>https://yyq-firefly.pages.dev/posts/30-moc/windows%E7%B4%A2%E5%BC%95/</id>
      <title type="text">Windows 索引</title>
      <published>2026-09-18T00:00:00.000Z</published>
      <updated>2026-09-23T00:00:00.000Z</updated>
      <author><name>YYQ</name></author>
      <link rel="alternate" href="https://yyq-firefly.pages.dev/posts/30-moc/windows%E7%B4%A2%E5%BC%95/"/>
      <summary type="text"></summary>
      <content type="html"><![CDATA[<section><h1>Windows 索引<a href="#windows-索引"><span>#</span></a></h1><p>Windows 软件、效率工具与环境配置笔记。</p><section><h2>软件与效率<a href="#软件与效率"><span>#</span></a></h2><ul>
<li><a href="/posts/20-Knowledge/Windows/%E7%94%B5%E8%84%91%E5%BF%85%E5%A4%87%E8%BD%AF%E4%BB%B6/">电脑必备软件</a>：常用工具清单</li>
<li><a href="/posts/20-Knowledge/Windows/KeePass/KeePass%E5%AF%86%E7%A0%81%E7%AE%A1%E7%90%86/">KeePass 密码管理</a>：KeePass 安装、安全配置、自动输入与插件实践</li>
<li><a href="/posts/20-Knowledge/Windows/KeePass/KeePassXC%20%E6%8E%A8%E8%8D%90%E9%85%8D%E7%BD%AE%E4%B8%8E%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/">KeePassXC 推荐配置与使用指南</a>：KeePassXC 2.7.12 简体中文界面推荐配置、浏览器集成、TOTP/Passkey 与 SSH Agent</li>
</ul></section><section><h2>Codex<a href="#codex"><span>#</span></a></h2><ul>
<li><a href="/posts/50-Tutorials/Windows/Codex%20Windows%20%E5%BE%AE%E8%BD%AF%E5%95%86%E5%BA%97%E5%AE%89%E8%A3%85%E5%8C%85%E6%8F%90%E5%8F%96%E4%B8%8E%E6%89%8B%E5%8A%A8%E6%9B%B4%E6%96%B0/">Codex Windows 微软商店安装包提取与手动更新</a>：Microsoft Store 安装包提取、更新与备份</li>
<li><a href="/posts/50-Tutorials/Windows/Codex%20Microsoft%20Store%20%E6%9B%B4%E6%96%B0%E5%8D%A1%E4%BD%8F%E6%8E%92%E6%9F%A5/">Codex Microsoft Store 更新卡住排查</a>：DoSvc <code>0x80246008</code> 与商店队列停滞的一次实际排障</li>
<li><a href="/posts/50-Tutorials/Windows/Codex%20Claude%20%E8%BD%AF%E4%BB%B6%E7%BA%A7%E4%BB%A3%E7%90%86%E8%AE%BE%E7%BD%AE%E6%95%99%E7%A8%8B/">Codex Claude 软件级代理设置教程</a>：Codex、Claude、Proxifier 的进程级代理与 DNS 排障</li>
<li><a href="/posts/50-Tutorials/Windows/Codex%20%E4%B8%8E%20Claude%20Code%20%E8%A7%84%E5%88%99%E6%96%87%E4%BB%B6%E7%BB%9F%E4%B8%80/">Codex 与 Claude Code 规则文件统一</a>：用一份 <code>AGENTS.md</code> 同时维护 Codex 和 Claude Code 规则</li>
<li><a href="/posts/50-Tutorials/Windows/Claude%20Code%20Hook%20%E9%80%9A%E7%9F%A5%E4%B8%8E%E6%8F%90%E7%A4%BA%E9%9F%B3%E9%85%8D%E7%BD%AE/">Claude Code Hook 通知与提示音配置</a>：权限确认、回答完成和错误结束时的 Windows 通知与提示音</li>
<li><a href="/posts/50-Tutorials/Windows/ChatGPT%20Windows%20%E5%8D%87%E7%BA%A7%E5%90%8E%20Proxifier%20%E7%BD%91%E7%BB%9C%E5%BC%82%E5%B8%B8%E6%8E%92%E6%9F%A5/">ChatGPT Windows 升级后 Proxifier 网络异常排查</a>：升级后启动、用量、侧边栏附件失败与 Proxifier DNS 链路排查</li>
<li><a href="/posts/50-Tutorials/Windows/Tampermonkey%E5%A4%9A%E7%94%B5%E8%84%91%E5%90%8C%E6%AD%A5%E6%8C%87%E5%8D%97/">Tampermonkey 多电脑同步指南</a>：多台电脑间同步用户脚本、备份与冲突处理</li>
</ul></section><section><h2>网络与代理<a href="#网络与代理"><span>#</span></a></h2><ul>
<li><a href="/posts/50-Tutorials/%E7%BD%91%E7%BB%9C%E4%B8%8E%E5%9F%9F%E5%90%8D/%E4%B8%BA%20Linux.do%20%E6%8C%87%E5%AE%9A%E5%9B%BA%E5%AE%9A%20DNS%20%E4%B8%8E%E7%9B%B4%E8%BF%9E%E8%A7%84%E5%88%99/">为 Linux.do 指定固定 DNS 与直连规则</a>：Clash Verge Rev、FlClash 的 DoH 与 DIRECT 规则</li>
<li><a href="/posts/50-Tutorials/%E7%BD%91%E7%BB%9C%E4%B8%8E%E5%9F%9F%E5%90%8D/%E7%BE%8E%E5%9B%BD%20VPS%20%E6%90%AD%E5%BB%BA%20AI%20%E4%B8%93%E7%94%A8%E5%87%BA%E5%8F%A3%20Xray%20REALITY%20%E4%B8%8E%20FlClash%20%E5%88%86%E6%B5%81%E6%95%99%E7%A8%8B/">用一台美国 VPS 搭建 AI 专用出口：Xray REALITY + FlClash + Mihomo 动态 AI 分流</a>：VPS 自建 Xray REALITY 与 AI 分流</li>
</ul></section><section><h2>Git 与 GitHub<a href="#git-与-github"><span>#</span></a></h2><ul>
<li><a href="/posts/50-Tutorials/Windows/GitHub%20%E6%8F%90%E4%BA%A4%E9%82%AE%E7%AE%B1%E9%9A%90%E7%A7%81%E4%B8%8E%20Git%20%E5%A4%9A%E8%BA%AB%E4%BB%BD%E9%85%8D%E7%BD%AE/">GitHub 提交邮箱隐私与 Git 多身份配置</a>：隐藏提交邮箱，并按目录自动切换公司、个人身份</li>
</ul></section><section><h2>知识库发布<a href="#知识库发布"><span>#</span></a></h2><ul>
<li><a href="/posts/50-Tutorials/Obsidian/Obsidian%20%E7%A7%81%E4%BA%BA%E7%9F%A5%E8%AF%86%E5%BA%93%E8%87%AA%E5%8A%A8%E5%8F%91%E5%B8%83%20Quartz%20%E4%B8%8E%20Cloudflare%20Pages/">Obsidian 私人知识库自动发布 Quartz 与 Cloudflare Pages</a>：从私人笔记筛选公开内容，并自动部署为静态网站</li>
<li><a href="/posts/50-Tutorials/Obsidian/Quartz%204%20%E5%8D%87%E7%BA%A7%20Quartz%205%20%E5%A4%8D%E7%9B%98/">Quartz 4 升级 Quartz 5 复盘</a>：Quartz 大版本迁移过程、问题排查与主题调研</li>
</ul></section></section>]]></content>
    </entry>
    <entry>
      <id>https://yyq-firefly.pages.dev/posts/50-tutorials/windows/windows-%E4%BD%BF%E7%94%A8-keepassxc-%E4%B8%8E-ssh-agent-%E7%AE%A1%E7%90%86-ssh-%E5%AF%86%E9%92%A5/</id>
      <title type="text">Windows 使用 KeePassXC 与 SSH Agent 管理 SSH 密钥</title>
      <published>2026-09-17T00:00:00.000Z</published>
      <updated>2026-09-17T00:00:00.000Z</updated>
      <author><name>YYQ</name></author>
      <link rel="alternate" href="https://yyq-firefly.pages.dev/posts/50-tutorials/windows/windows-%E4%BD%BF%E7%94%A8-keepassxc-%E4%B8%8E-ssh-agent-%E7%AE%A1%E7%90%86-ssh-%E5%AF%86%E9%92%A5/"/>
      <summary type="text"></summary>
      <content type="html"><![CDATA[<section><h1>Windows 使用 KeePassXC 与 SSH Agent 管理 SSH 密钥<a href="#windows-使用-keepassxc-与-ssh-agent-管理-ssh-密钥"><span>#</span></a></h1><p>本文在 Windows 10/11 上使用系统 OpenSSH Agent，并把私钥作为附件保存在 KeePassXC 数据库中。解锁数据库后，KeePassXC 将密钥加载到 Agent；SSH 客户端无需直接读取裸私钥文件。</p><p>相关笔记：<a href="/posts/20-Knowledge/Windows/KeePass/KeePassXC%20%E6%8E%A8%E8%8D%90%E9%85%8D%E7%BD%AE%E4%B8%8E%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/">KeePassXC 推荐配置与使用指南</a>、<a href="/posts/20-Knowledge/Windows/KeePass/KeePass%E5%AF%86%E7%A0%81%E7%AE%A1%E7%90%86/">KeePass 密码管理</a>、<a href="/posts/50-Tutorials/Windows/GitHub%20%E6%8F%90%E4%BA%A4%E9%82%AE%E7%AE%B1%E9%9A%90%E7%A7%81%E4%B8%8E%20Git%20%E5%A4%9A%E8%BA%AB%E4%BB%BD%E9%85%8D%E7%BD%AE/">GitHub 提交邮箱隐私与 Git 多身份配置</a>、<a href="/posts/50-Tutorials/%E7%BD%91%E7%BB%9C%E4%B8%8E%E5%9F%9F%E5%90%8D/Debian%20SSH%20%E5%AF%86%E9%92%A5%E7%99%BB%E5%BD%95%E6%8E%92%E9%9A%9C%E4%B8%8E%E5%AE%89%E5%85%A8%E5%8A%A0%E5%9B%BA/">Debian SSH 密钥登录排障与安全加固</a>。</p><div><div><div></div><div>Important</div></div><div><p>KeePassXC 不是 SSH Agent。它是 Windows OpenSSH Agent 或 Pageant 的客户端，负责在数据库解锁和锁定时添加、移除密钥。</p></div></div><section><h2>最终结构<a href="#最终结构"><span>#</span></a></h2><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>KeePassXC 数据库</span></div></div><div><div><div>2</div></div><div><span>└─ SSH 条目</span></div></div><div><div><div>3</div></div><div><span><span>   </span></span><span>├─ 密码字段：私钥 passphrase</span></div></div><div><div><div>4</div></div><div><span><span>   </span></span><span>└─ 附件：OpenSSH 私钥</span></div></div><div><div><div>5</div></div><div><span><span>          </span></span><span>↓ 数据库解锁时加载</span></div></div><div><div><div>6</div></div><div><span>Windows OpenSSH Authentication Agent</span></div></div><div><div><div>7</div></div><div><span><span>          </span></span><span>↓</span></div></div><div><div><div>8</div></div><div><span>ssh / Git</span></div></div><div><div><div>9</div></div><div><span><span>          </span></span><span>↓</span></div></div><div><div><div>10</div></div><div><span>服务器 ~/.ssh/authorized_keys 中的对应公钥</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h2>一、规划密钥<a href="#一规划密钥"><span>#</span></a></h2><p>推荐每台电脑使用独立密钥：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>家用电脑  → Key A</span></div></div><div><div><div>2</div></div><div><span>工作电脑  → Key B</span></div></div><div><div><div>3</div></div><div><span>笔记本    → Key C</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>把各自的公钥添加到需要访问的服务器。某台设备丢失或停用时，只需删除对应公钥，不会影响其他设备。</p><p>多台电脑共用同一私钥虽然可行，但服务器无法区分设备，单机失陷后也不能只撤销这一台。KeePassXC 数据库可以同步，密钥身份仍应按设备拆分。</p></section><section><h2>二、启用 Windows OpenSSH Agent<a href="#二启用-windows-openssh-agent"><span>#</span></a></h2><p>普通 PowerShell 检查组件：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span><span>ssh </span><span>-</span><span>V</span></span></div></div><div><div><div>2</div></div><div><span>Get-Service</span><span><span> ssh</span><span>-</span><span>agent</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>若找不到 <code>ssh</code>，在 Windows 的 <strong>设置 → 应用 → 可选功能</strong> 中安装 <strong>OpenSSH 客户端</strong>。</p><p>以管理员身份打开 PowerShell：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>Get-Service</span><span><span> ssh</span><span>-</span><span>agent | </span></span><span>Set-Service</span><span><span> </span><span>-</span><span>StartupType Automatic</span></span></div></div><div><div><div>2</div></div><div><span>Start-Service</span><span><span> ssh</span><span>-</span><span>agent</span></span></div></div><div><div><div>3</div></div><div><span>Get-Service</span><span><span> ssh</span><span>-</span><span>agent</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>随后检查：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span><span>ssh</span><span>-</span><span>add </span><span>-</span><span>l</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>出现 <code>The agent has no identities.</code> 表示 Agent 正常，只是尚未加载密钥。</p></section><section><h2>三、生成 Ed25519 密钥<a href="#三生成-ed25519-密钥"><span>#</span></a></h2><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span><span>ssh</span><span>-</span><span>keygen </span><span>-</span><span>t ed25519 </span><span>-</span><span>C </span></span><span>"device-name"</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>默认会在当前用户的 <code>.ssh</code> 目录生成：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>id_ed25519       私钥</span></div></div><div><div><div>2</div></div><div><span>id_ed25519.pub   公钥</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>为私钥设置强 passphrase。它用于解密私钥，与服务器账号密码完全不同。</p><div><div><div></div><div>Warning</div></div><div><p>服务器只接收公钥。私钥不可上传到服务器、公开仓库、聊天记录或普通云盘目录。</p></div></div></section><section><h2>四、把私钥保存在 KeePassXC<a href="#四把私钥保存在-keepassxc"><span>#</span></a></h2><p>新建条目，例如：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>标题：SSH Key - device-name</span></div></div><div><div><div>2</div></div><div><span>用户名：登录用户名或设备名</span></div></div><div><div><div>3</div></div><div><span>密码：私钥 passphrase</span></div></div><div><div><div>4</div></div><div><span>URL：ssh://server.example.com</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>若私钥没有 passphrase，密码字段保持为空；不要填写服务器密码。</p><p>编辑条目，进入 <strong>高级 → 附件 → 添加</strong>，选择没有 <code>.pub</code> 后缀的私钥文件。使用附件后，私钥会保存在加密的 KDBX 中；选择“外部文件”则只保存路径引用，换电脑后仍需单独复制文件。</p><p>检查文件类型：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>Get-Content</span><span> </span><span><span>"</span><span>$</span></span><span>env:USERPROFILE</span><span>\.ssh\id_ed25519"</span><span><span> </span><span>-</span><span>TotalCount </span></span><span>1</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>OpenSSH 私钥开头应类似：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>[OpenSSH 私钥头部标记]</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>若看到 <code>ssh-ed25519 AAAA...</code>，说明选中的是公钥。</p></section><section><h2>五、配置 KeePassXC SSH Agent 集成<a href="#五配置-keepassxc-ssh-agent-集成"><span>#</span></a></h2><p>进入 <strong>工具 → 设置 → SSH Agent</strong>：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>☑ 启用 SSH Agent 集成</span></div></div><div><div><div>2</div></div><div><span>☑ OpenSSH for Windows</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>设置页应显示 Agent 连接正常。不要同时混用 Windows OpenSSH、Git for Windows 自带 Agent 和 Pageant。</p><p>再编辑 SSH 条目，进入 <strong>SSH Agent</strong>：</p><ol>
<li>私钥来源选择刚添加的附件。</li>
<li>开启“数据库解锁时添加密钥”。</li>
<li>开启“数据库锁定时移除密钥”。</li>
</ol><p>也可在条目右键菜单中手动把密钥添加到 SSH Agent。验证：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span><span>ssh</span><span>-</span><span>add </span><span>-</span><span>l</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>正常时会显示密钥指纹和类型，例如 <code>ED25519</code>。</p></section><section><h2>六、把公钥安装到服务器<a href="#六把公钥安装到服务器"><span>#</span></a></h2><p>读取公钥：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>Get-Content</span><span> </span><span><span>"</span><span>$</span></span><span>env:USERPROFILE</span><span>\.ssh\id_ed25519.pub"</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>首次使用原有密码或云厂商控制台登录服务器，然后执行：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>mkdir</span><span> </span><span>-p</span><span> </span><span>~/.ssh</span></div></div><div><div><div>2</div></div><div><span>chmod</span><span> </span><span>700</span><span> </span><span>~/.ssh</span></div></div><div><div><div>3</div></div><div><span>nano</span><span> </span><span>~/.ssh/authorized_keys</span></div></div><div><div><div>4</div></div><div><span>chmod</span><span> </span><span>600</span><span> </span><span>~/.ssh/authorized_keys</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>把完整公钥粘贴为一行。多台电脑的公钥各占一行：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>ssh-ed25519 AAAA... home-pc</span></div></div><div><div><div>2</div></div><div><span>ssh-ed25519 BBBB... work-pc</span></div></div></code></pre><div><div></div><div></div></div></figure></div><div><div><div></div><div>Warning</div></div><div><p>保留当前已登录的 SSH 会话，在另一个终端确认密钥登录成功后再退出。不要在首次测试前关闭密码登录。</p></div></div></section><section><h2>七、测试登录<a href="#七测试登录"><span>#</span></a></h2><p>确认 Agent 已加载密钥：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span><span>ssh</span><span>-</span><span>add </span><span>-</span><span>l</span></span></div></div><div><div><div>2</div></div><div><span>ssh user</span><span>@203.0.113.10</span><span><span> </span><span>-</span><span>p </span></span><span>2222</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>如需查看认证过程：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span><span>ssh </span><span>-</span><span>v user</span></span><span>@203.0.113.10</span><span><span> </span><span>-</span><span>p </span></span><span>2222</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>成功时日志通常会包含：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Offering public key</span></div></div><div><div><div>2</div></div><div><span>Server accepts key</span></div></div><div><div><div>3</div></div><div><span>Authenticated ... using "publickey"</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h2>八、使用 SSH Config 简化命令<a href="#八使用-ssh-config-简化命令"><span>#</span></a></h2><p>编辑当前用户 <code>.ssh\config</code>：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Host server-a</span></div></div><div><div><div>2</div></div><div><span><span>    </span></span><span>HostName 203.0.113.10</span></div></div><div><div><div>3</div></div><div><span><span>    </span></span><span>User user</span></div></div><div><div><div>4</div></div><div><span><span>    </span></span><span>Port 2222</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>之后只需：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span><span>ssh server</span><span>-</span><span>a</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>密钥较少时，OpenSSH 会从 Agent 中选择服务器接受的身份，无需设置 <code>IdentityFile</code>。</p><section><h3>Agent 中密钥很多时<a href="#agent-中密钥很多时"><span>#</span></a></h3><p>若出现 <code>Too many authentication failures</code>，为每台服务器精确指定公钥并限制身份：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Host server-a</span></div></div><div><div><div>2</div></div><div><span><span>    </span></span><span>HostName 203.0.113.10</span></div></div><div><div><div>3</div></div><div><span><span>    </span></span><span>User user</span></div></div><div><div><div>4</div></div><div><span><span>    </span></span><span>Port 2222</span></div></div><div><div><div>5</div></div><div><span><span>    </span></span><span>IdentityFile ~/.ssh/server-a_ed25519.pub</span></div></div><div><div><div>6</div></div><div><span><span>    </span></span><span>IdentitiesOnly yes</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>这里可以让 <code>IdentityFile</code> 指向对应公钥；私钥仍由 Agent 提供，不必以裸文件长期保存在 <code>.ssh</code> 目录。</p></section></section><section><h2>九、常见故障<a href="#九常见故障"><span>#</span></a></h2><section><h3><code>The agent has no identities.</code><a href="#the-agent-has-no-identities"><span>#</span></a></h3><p>依次检查：</p><ol>
<li><code>ssh-agent</code> 服务是否为 <code>Running</code>。</li>
<li>KeePassXC 是否启用了 OpenSSH for Windows 集成。</li>
<li>条目是否选择了正确的私钥附件。</li>
<li>数据库解锁时自动添加是否开启。</li>
<li>锁定再解锁数据库，或手动添加条目密钥。</li>
</ol></section><section><h3>KeePassXC 提示解密失败<a href="#keepassxc-提示解密失败"><span>#</span></a></h3><p>密码字段必须填写私钥 passphrase，而不是服务器密码。可以验证私钥：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span><span>ssh</span><span>-</span><span>keygen </span><span>-</span><span>y </span></span><span>-f</span><span> </span><span><span>"</span><span>$</span></span><span>env:USERPROFILE</span><span>\.ssh\id_ed25519"</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>输入正确 passphrase 后应输出对应公钥。</p></section><section><h3>PowerShell 可用，Git Bash 不可用<a href="#powershell-可用git-bash-不可用"><span>#</span></a></h3><p>检查实际调用的 SSH：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>where.exe</span><span> ssh</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>优先统一使用：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>C:\Windows\System32\OpenSSH\ssh.exe</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>Git for Windows 的 MSYS2 Agent socket 不受 KeePassXC 支持。安装 Git 时选择 Windows OpenSSH，或配置 Git 使用系统 OpenSSH。</p></section><section><h3>同步盘保存 KDBX 失败<a href="#同步盘保存-kdbx-失败"><span>#</span></a></h3><p>若 OneDrive 等同步工具短暂占用文件：</p><ol>
<li>不要立即关闭 KeePassXC。</li>
<li>等待同步完成后再次保存。</li>
<li>把 KDBX 设置为始终保留在本机。</li>
<li>检查窗口标题是否有 <code>*</code>，它表示仍有未保存修改。</li>
</ol><p>同步不是备份。至少保留云端版本历史和一份独立离线备份。</p></section></section><section><h2>十、安全收尾<a href="#十安全收尾"><span>#</span></a></h2><p>连续验证以下场景后，才考虑关闭服务器密码认证：</p><ul>
<li>KeePassXC 重启后可以加载密钥。</li>
<li>数据库锁定后密钥从 Agent 移除，解锁后重新加入。</li>
<li>Windows 重启后 <code>ssh-agent</code> 自动运行。</li>
<li>新终端可以稳定完成公钥登录。</li>
<li>云厂商控制台或其他应急入口可用。</li>
</ul><p>本地裸私钥确认已进入 KDBX 且有可靠备份后，可按自己的恢复策略安全删除；公钥和 SSH Config 可以保留。</p></section><section><h2>验收清单<a href="#验收清单"><span>#</span></a></h2><ul>
<li> Windows OpenSSH 客户端可用。</li>
<li> <code>ssh-agent</code> 自动启动且状态为 Running。</li>
<li> KeePassXC 已连接 OpenSSH for Windows。</li>
<li> 私钥附件与 passphrase 配置正确。</li>
<li> <code>ssh-add -l</code> 能看到预期指纹。</li>
<li> 服务器 <code>authorized_keys</code> 只包含需要保留的公钥。</li>
<li> <code>ssh -v</code> 确认使用 publickey 认证。</li>
<li> KDBX 有版本历史与独立备份。</li>
</ul></section><section><h2>参考资料<a href="#参考资料"><span>#</span></a></h2><ul>
<li><a href="https://keepassxc.org/docs/KeePassXC_UserGuide.html#_setup_ssh_agent" target="_blank">KeePassXC User Guide：SSH Agent</a></li>
<li><a href="https://keepassxc.org/docs/" target="_blank">KeePassXC Documentation and FAQ</a></li>
<li><a href="https://learn.microsoft.com/en-us/windows-server/administration/openssh/openssh_keymanagement" target="_blank">Microsoft Learn：OpenSSH 密钥认证</a></li>
</ul></section></section>]]></content>
    </entry>
    <entry>
      <id>https://yyq-firefly.pages.dev/posts/50-tutorials/%E7%BD%91%E7%BB%9C%E4%B8%8E%E5%9F%9F%E5%90%8D/cf-server-monitor-%E9%83%A8%E7%BD%B2%E4%B8%8E%E8%BF%90%E7%BB%B4%E6%8C%87%E5%8D%97/</id>
      <title type="text">CF-Server-Monitor 部署与运维指南</title>
      <published>2026-09-17T00:00:00.000Z</published>
      <updated>2026-09-17T00:00:00.000Z</updated>
      <author><name>YYQ</name></author>
      <link rel="alternate" href="https://yyq-firefly.pages.dev/posts/50-tutorials/%E7%BD%91%E7%BB%9C%E4%B8%8E%E5%9F%9F%E5%90%8D/cf-server-monitor-%E9%83%A8%E7%BD%B2%E4%B8%8E%E8%BF%90%E7%BB%B4%E6%8C%87%E5%8D%97/"/>
      <summary type="text"></summary>
      <content type="html"><![CDATA[<section><h1>CF-Server-Monitor 部署与运维指南<a href="#cf-server-monitor-部署与运维指南"><span>#</span></a></h1><p>CF-Server-Monitor 把监控面板部署在 Cloudflare Workers 上，使用 D1 保存数据、Durable Objects 与 WebSocket 提供实时更新；每台被监控主机运行 <code>cf-probe</code> Agent，主动向 Worker 上报状态。</p><div><div><div></div><div>Important</div></div><div><p>项目仍在快速迭代。界面名称、Agent 参数和升级方式应以上游 README 与部署后的管理后台为准，不要照搬旧版本命令。</p></div></div><section><h2>架构与适用场景<a href="#架构与适用场景"><span>#</span></a></h2><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>VPS-A ─┐</span></div></div><div><div><div>2</div></div><div><span>VPS-B ─┼─ cf-probe ─ HTTPS / WSS ─&gt; Cloudflare Worker</span></div></div><div><div><div>3</div></div><div><span>VPS-C ─┘                              ├─ D1：配置与历史数据</span></div></div><div><div><div>4</div></div><div><span><span>                                     </span></span><span>├─ Durable Objects：实时连接</span></div></div><div><div><div>5</div></div><div><span><span>                                     </span></span><span>└─ 管理面板与状态页</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>它适合少量到中等规模的个人服务器监控：不需要额外维护主控 VPS，Agent 也无需开放 Web 管理端口。若需要完整的主机可观测性、日志分析或复杂告警，应再评估 Netdata、Prometheus、Beszel 或 Uptime Kuma 等方案。</p></section><section><h2>部署前准备<a href="#部署前准备"><span>#</span></a></h2><ul>
<li>Cloudflare 账号。</li>
<li>GitHub 账号。</li>
<li>至少一台可通过 SSH 管理的 Linux 主机。</li>
<li>一段随机生成的 <code>API_SECRET</code>。</li>
</ul><p>为减少 Shell 粘贴和转义问题，<code>API_SECRET</code> 可使用足够长的字母数字组合。不要在笔记、截图、终端历史或聊天记录中保存真实 Secret。</p></section><section><h2>一、连接 GitHub 部署 Worker<a href="#一连接-github-部署-worker"><span>#</span></a></h2><ol>
<li>
<p>打开 <a href="https://github.com/huilang-me/CF-Server-Monitor" target="_blank">CF-Server-Monitor 官方仓库</a>，Fork 到自己的 GitHub 账号。</p>
</li>
<li>
<p>进入 Cloudflare Dashboard 的 <strong>Workers &amp; Pages</strong>。</p>
</li>
<li>
<p>创建应用并连接 GitHub，选择刚 Fork 的仓库。</p>
</li>
<li>
<p>按上游 README 填写构建配置。当前常用值为：</p>
<div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Build command: npm run build:frontend</span></div></div><div><div><div>2</div></div><div><span>Deploy command: npx wrangler deploy</span></div></div></code></pre><div><div></div><div></div></div></figure></div>
</li>
<li>
<p>完成首次部署，确认构建日志成功。</p>
</li>
</ol><p>使用 Fork 的好处是可以通过 GitHub 的 <strong>Sync fork</strong> 获取上游更新，并触发 Cloudflare 重新部署。</p></section><section><h2>二、配置 Secret 与首次登录<a href="#二配置-secret-与首次登录"><span>#</span></a></h2><p>进入 Worker 的 <strong>Settings → Variables and Secrets</strong>，设置：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>API_SECRET=&lt;随机长字符串&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>保存后确认新版本已部署到 Production。默认管理账号通常为 <code>admin</code>，初始密码使用 <code>API_SECRET</code>；首次登录后应立即设置独立的管理员密码。</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>API_SECRET     → 仅供 Agent 上报认证</span></div></div><div><div><div>2</div></div><div><span>管理员密码     → 仅供人登录后台</span></div></div></code></pre><div><div></div><div></div></div></figure></div><div><div><div></div><div>Warning</div></div><div><p>Agent 安装命令通常包含 <code>API_SECRET</code>、服务器 ID 和 Worker 地址。不要公开命令全文，也不要在截图中暴露浏览器请求头里的 Bearer Token。</p></div></div><p>管理后台通常位于：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>https://&lt;worker-name&gt;.&lt;account-subdomain&gt;.workers.dev/admin</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>实际路径以上游当前版本为准。</p></section><section><h2>三、添加服务器并安装 Agent<a href="#三添加服务器并安装-agent"><span>#</span></a></h2><p>在管理后台新增服务器，例如：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>vps-us-01</span></div></div><div><div><div>2</div></div><div><span>vps-sg-01</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>新记录在 Agent 上线前显示离线是正常现象。点击服务器旁的复制按钮，使用后台生成的安装命令；它会携带正确的服务器 ID、Worker URL、Secret 和当前版本支持的参数。</p><div><div><div></div><div>Tip</div></div><div><p>不要从旧教程手工拼接完整安装命令。项目的 Agent、参数和安装脚本会随版本变化，后台生成的命令更可靠。</p></div></div><p>安装后检查服务：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>systemctl</span><span> </span><span>status</span><span> </span><span>cf-probe</span><span> </span><span>--no-pager</span></div></div><div><div><div>2</div></div><div><span>journalctl</span><span> </span><span>-u</span><span> </span><span>cf-probe</span><span> </span><span>-n</span><span> </span><span>100</span><span> </span><span>--no-pager</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>若使用用户级 systemd：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>systemctl</span><span> </span><span>--user</span><span> </span><span>status</span><span> </span><span>cf-probe</span><span> </span><span>--no-pager</span></div></div><div><div><div>2</div></div><div><span>journalctl</span><span> </span><span>--user</span><span> </span><span>-u</span><span> </span><span>cf-probe</span><span> </span><span>-n</span><span> </span><span>100</span><span> </span><span>--no-pager</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>后台出现 CPU、内存、磁盘、网络、延迟和最近上报时间，即说明链路已打通。</p></section><section><h2>四、基础配置建议<a href="#四基础配置建议"><span>#</span></a></h2><section><h3>上报与采集间隔<a href="#上报与采集间隔"><span>#</span></a></h3><p>先使用项目默认值。个人少量主机通常不需要追求数秒级刷新；服务器增加后，可适当延长上报间隔以减少 Worker 请求、D1 写入和历史数据量。</p></section><section><h3>流量重置日<a href="#流量重置日"><span>#</span></a></h3><p>按服务商实际账单周期设置 <code>reset_day</code>。若套餐每月 15 日重置流量，就不要保留默认的 1 日，否则月流量统计会失真。</p></section><section><h3>服务器命名<a href="#服务器命名"><span>#</span></a></h3><p>使用不暴露内部信息的统一格式：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>用途-地区-序号</span></div></div><div><div><div>2</div></div><div><span>web-us-01</span></div></div><div><div><div>3</div></div><div><span>relay-sg-01</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>公开状态页时隐藏 IP、内部备注、价格、到期时间以及不需要展示的主机。</p></section><section><h3>域名<a href="#域名"><span>#</span></a></h3><p><code>workers.dev</code> 可用于初期验证。需要自定义域名时，在 Worker 的 <strong>Domains &amp; Routes</strong> 中添加 Custom Domain，再让 Agent 改用新地址。D1 数据、服务器 ID 和 Secret 无需因此重建。</p></section></section><section><h2>五、安全加固<a href="#五安全加固"><span>#</span></a></h2><ul>
<li>管理员密码与 <code>API_SECRET</code> 分离。</li>
<li>Agent 优先以低权限用户运行；使用用户级 systemd 时按需启用 linger。</li>
<li>状态页默认保持私有，只公开必要字段。</li>
<li>第三方背景图、脚本、字体和 Webhook 只允许可信来源。</li>
<li>定期轮换已泄露或疑似泄露的 Secret，并重新生成 Agent 安装命令。</li>
<li>升级前导出服务器配置，并记录当前部署版本。</li>
</ul><p>项目使用 CSP 限制外部资源。背景图、CSS、JS、字体或外部 API 加载失败时，应添加最小可信域名白名单，不要关闭或全面放开 CSP。</p></section><section><h2>六、常见故障<a href="#六常见故障"><span>#</span></a></h2><section><h3>Shell 持续显示 <code>&gt;</code><a href="#shell-持续显示-"><span>#</span></a></h3><p>这通常表示引号未闭合或复制的命令被截断，并非安装程序卡死。</p><ol>
<li>按 <code>Ctrl + C</code> 退出续行状态。</li>
<li>重新从后台复制完整命令。</li>
<li>检查 Secret 是否因特殊字符破坏 Shell 引号。</li>
</ol></section><section><h3>Agent 在线但后台仍显示离线<a href="#agent-在线但后台仍显示离线"><span>#</span></a></h3><p>依次检查：</p><ol>
<li><code>cf-probe</code> 服务和日志。</li>
<li>主机能否访问 Worker URL。</li>
<li>Worker URL、服务器 ID、<code>API_SECRET</code> 是否来自同一次后台生成。</li>
<li>Worker 最新部署是否已进入 Production。</li>
<li>修改 Secret 后是否重新安装或更新 Agent 配置。</li>
</ol></section><section><h3>修改 Secret 后仍出现旧值<a href="#修改-secret-后仍出现旧值"><span>#</span></a></h3><p>先确认 Cloudflare 中的 Secret 已保存并随新部署生效，再强制刷新管理页面并重新复制安装命令。若使用 GitHub Actions 部署，还要同步更新仓库 Actions Secret，避免下一次部署覆盖设置。</p></section><section><h3>页面能打开，保存时出现 <code>Failed to fetch</code><a href="#页面能打开保存时出现-failed-to-fetch"><span>#</span></a></h3><p>打开浏览器开发者工具检查失败请求：</p><ul>
<li>有 HTTP 状态码：根据 <code>401</code>、<code>403</code>、<code>5xx</code> 排查鉴权或 Worker 错误。</li>
<li>没有状态码并出现 <code>ERR_NETWORK_CHANGED</code>：通常是浏览器代理路径在请求期间发生切换。</li>
</ul><p>同时使用浏览器代理扩展、系统代理、分流工具和 TUN 时，应让同一站点的 HTML、Fetch/XHR 与 WebSocket 走同一条稳定路径。可暂时关闭自动切换，逐层排除代理。</p></section><section><h3>外部资源被浏览器拦截<a href="#外部资源被浏览器拦截"><span>#</span></a></h3><p>先在 Console 查看是否为 CSP 错误。仅将实际需要、可以信任的资源域名加入对应的 CSP Static 或 CSP API 白名单。</p></section></section><section><h2>七、升级、备份与容量<a href="#七升级备份与容量"><span>#</span></a></h2><section><h3>同步上游<a href="#同步上游"><span>#</span></a></h3><p>在 Fork 仓库选择 <strong>Sync fork → Update branch</strong>。部署完成后再观察 Worker 日志和 Agent 在线情况，不要把“同步成功”等同于“生产可用”。</p></section><section><h3>升级 Agent<a href="#升级-agent"><span>#</span></a></h3><p>优先使用管理后台当前版本给出的升级或重新安装命令。涉及 Agent 上报地址、Secret 或自动更新设置时，通常需要重新执行完整安装命令。</p></section><section><h3>备份<a href="#备份"><span>#</span></a></h3><p>以下时机应导出服务器配置：</p><ul>
<li>大版本升级前。</li>
<li>批量修改主机、分组或标签后。</li>
<li>迁移 Worker 或域名前。</li>
</ul><p>导出文件也可能包含内部资产信息，应按敏感配置保管。</p></section><section><h3>免费额度<a href="#免费额度"><span>#</span></a></h3><p>Cloudflare 配额会随套餐与官方政策变化，不应在教程中写死固定数值。以 Cloudflare Dashboard 和官方文档为准；机器增加时优先降低上报频率、减少 Ping 目标并控制历史数据量。</p></section></section><section><h2>八、验收清单<a href="#八验收清单"><span>#</span></a></h2><ul>
<li> Worker 构建与生产部署成功。</li>
<li> <code>API_SECRET</code> 已设置且未出现在仓库或截图中。</li>
<li> 管理员密码与 Agent Secret 不同。</li>
<li> 每台主机的 <code>cf-probe</code> 服务正常。</li>
<li> 管理后台持续收到 CPU、内存、磁盘和网络数据。</li>
<li> 告警时区、通知目标和流量重置日正确。</li>
<li> 外部资源仅使用最小 CSP 白名单。</li>
<li> 已导出一份服务器配置并安全保存。</li>
</ul></section><section><h2>参考资料<a href="#参考资料"><span>#</span></a></h2><ul>
<li><a href="https://github.com/huilang-me/CF-Server-Monitor" target="_blank">CF-Server-Monitor 官方仓库</a></li>
<li><a href="https://github.com/huilang-me/CF-Server-Monitor/blob/main/API.md" target="_blank">CF-Server-Monitor API 文档</a></li>
<li><a href="https://developers.cloudflare.com/workers/" target="_blank">Cloudflare Workers 文档</a></li>
<li><a href="https://developers.cloudflare.com/d1/" target="_blank">Cloudflare D1 文档</a></li>
<li><a href="https://developers.cloudflare.com/workers/configuration/routing/custom-domains/" target="_blank">Cloudflare Workers 自定义域名</a></li>
</ul></section></section>]]></content>
    </entry>
    <entry>
      <id>https://yyq-firefly.pages.dev/posts/50-tutorials/%E7%BD%91%E7%BB%9C%E4%B8%8E%E5%9F%9F%E5%90%8D/debian-ssh-%E5%AF%86%E9%92%A5%E7%99%BB%E5%BD%95%E6%8E%92%E9%9A%9C%E4%B8%8E%E5%AE%89%E5%85%A8%E5%8A%A0%E5%9B%BA/</id>
      <title type="text">Debian SSH 密钥登录排障与安全加固</title>
      <published>2026-09-17T00:00:00.000Z</published>
      <updated>2026-09-17T00:00:00.000Z</updated>
      <author><name>YYQ</name></author>
      <link rel="alternate" href="https://yyq-firefly.pages.dev/posts/50-tutorials/%E7%BD%91%E7%BB%9C%E4%B8%8E%E5%9F%9F%E5%90%8D/debian-ssh-%E5%AF%86%E9%92%A5%E7%99%BB%E5%BD%95%E6%8E%92%E9%9A%9C%E4%B8%8E%E5%AE%89%E5%85%A8%E5%8A%A0%E5%9B%BA/"/>
      <summary type="text"></summary>
      <content type="html"><![CDATA[<section><h1>Debian SSH 密钥登录排障与安全加固<a href="#debian-ssh-密钥登录排障与安全加固"><span>#</span></a></h1><p>本文处理一种典型故障：Windows 客户端能读取 ED25519 私钥，服务器也保存了对应公钥，但 SSH 仍只允许密码认证。排查后发现 Debian 服务端的最终配置为 <code>PubkeyAuthentication no</code>。</p><p>相关笔记：<a href="/posts/50-Tutorials/Windows/Windows%20%E4%BD%BF%E7%94%A8%20KeePassXC%20%E4%B8%8E%20SSH%20Agent%20%E7%AE%A1%E7%90%86%20SSH%20%E5%AF%86%E9%92%A5/">Windows 使用 KeePassXC 与 SSH Agent 管理 SSH 密钥</a>、<a href="/posts/50-Tutorials/%E7%BD%91%E7%BB%9C%E4%B8%8E%E5%9F%9F%E5%90%8D/%E7%BE%8E%E5%9B%BD%20VPS%20%E6%90%AD%E5%BB%BA%20AI%20%E4%B8%93%E7%94%A8%E5%87%BA%E5%8F%A3%20Xray%20REALITY%20%E4%B8%8E%20FlClash%20%E5%88%86%E6%B5%81%E6%95%99%E7%A8%8B/">用一台美国 VPS 搭建 AI 专用出口：Xray REALITY + FlClash + Mihomo 动态 AI 分流</a>。</p><section><h2>最终目标<a href="#最终目标"><span>#</span></a></h2><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Windows OpenSSH / KeePassXC Agent</span></div></div><div><div><div>2</div></div><div><span><span>        </span></span><span>│ ED25519 公钥认证</span></div></div><div><div><div>3</div></div><div><span><span>        </span></span><span>▼</span></div></div><div><div><div>4</div></div><div><span>Debian VPS</span></div></div><div><div><div>5</div></div><div><span>├─ 普通管理用户登录</span></div></div><div><div><div>6</div></div><div><span>├─ 需要时通过 sudo 提权</span></div></div><div><div><div>7</div></div><div><span>├─ 禁止 root 远程登录</span></div></div><div><div><div>8</div></div><div><span>└─ 验证成功后关闭密码与交互式认证</span></div></div></code></pre><div><div></div><div></div></div></figure></div><div><div><div></div><div>Danger</div></div><div><p>修改 SSH 认证方式可能导致远程失联。全程保留一个已登录的管理会话，并确认云厂商控制台、VNC 或其他应急入口可用。</p></div></div></section><section><h2>一、先确认本地密钥<a href="#一先确认本地密钥"><span>#</span></a></h2><p>以下示例使用占位符：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>管理用户：adminuser</span></div></div><div><div><div>2</div></div><div><span>服务器地址：203.0.113.10</span></div></div><div><div><div>3</div></div><div><span>SSH 端口：2222</span></div></div><div><div><div>4</div></div><div><span>私钥文件：server_ed25519</span></div></div></code></pre><div><div></div><div></div></div></figure></div><section><h3>检查文件<a href="#检查文件"><span>#</span></a></h3><p>在 Windows PowerShell 执行：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>Get-Item</span><span> </span><span><span>"</span><span>$</span></span><span>env:USERPROFILE</span><span>\.ssh\server_ed25519*"</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>应至少包含：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>server_ed25519       私钥，不可公开</span></div></div><div><div><div>2</div></div><div><span>server_ed25519.pub   公钥，可安装到服务器</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>比对公钥指纹<a href="#比对公钥指纹"><span>#</span></a></h3><p>Windows：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span><span>ssh</span><span>-</span><span>keygen </span><span>-</span><span>lf </span></span><span><span>"</span><span>$</span></span><span>env:USERPROFILE</span><span>\.ssh\server_ed25519.pub"</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>Debian：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>ssh-keygen</span><span> </span><span>-lf</span><span> </span><span>/home/adminuser/.ssh/authorized_keys</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>指纹一致可以排除“安装了错误公钥”，但不能证明服务端允许公钥认证。</p></section></section><section><h2>二、用客户端日志定位认证阶段<a href="#二用客户端日志定位认证阶段"><span>#</span></a></h2><p>强制只使用指定私钥：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span><span>ssh </span><span>-</span><span>vvv `</span></span></div></div><div><div><div>2</div></div><div><span><span>  </span></span><span>-</span><span>o IdentitiesOnly</span><span>=</span><span>yes `</span></div></div><div><div><div>3</div></div><div><span><span>  </span></span><span>-</span><span>i </span><span><span>"</span><span>$</span></span><span>env:USERPROFILE</span><span>\.ssh\server_ed25519"</span><span> `</span></div></div><div><div><div>4</div></div><div><span><span>  </span></span><span>-</span><span>p </span><span>2222</span><span> `</span></div></div><div><div><div>5</div></div><div><span><span>  </span></span><span>adminuser</span><span>@203.0.113.10</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>关键日志：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Offering public key</span></div></div><div><div><div>2</div></div><div><span>Server accepts key</span></div></div><div><div><div>3</div></div><div><span>Authenticated ... using "publickey"</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>若客户端已经列出待尝试密钥，但服务端返回的可用认证方式只有 <code>password</code>，并且从未出现 <code>Offering public key</code>，应优先检查服务端是否关闭了公钥认证。</p><p>以下信息通常不是根因：</p><ul>
<li>用户级 <code>.ssh/config</code> 不存在。</li>
<li>显式使用 <code>-i</code> 时，客户端无法连接 ssh-agent。</li>
<li>登录成功后仍显示 <code>debug3</code>：这是 <code>-vvv</code> 调试输出。</li>
<li>Debian 中没有 <code>ll</code>：它只是未定义该 alias。</li>
</ul></section><section><h2>三、确认 Debian 的最终生效配置<a href="#三确认-debian-的最终生效配置"><span>#</span></a></h2><p>查看全局最终值：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>sudo</span><span> </span><span>/usr/sbin/sshd</span><span> </span><span>-T</span><span> | </span><span>grep</span><span> </span><span>-Ei</span><span> </span><span>\</span></div></div><div><div><div>2</div></div><div><span>'pubkeyauthentication|passwordauthentication|kbdinteractiveauthentication|authorizedkeysfile|authenticationmethods|permitrootlogin|usepam'</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>再查找配置来源：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>sudo</span><span> </span><span>grep</span><span> </span><span>-RniE</span><span> </span><span>\</span></div></div><div><div><div>2</div></div><div><span>'^[[:space:]]*(Include|PubkeyAuthentication|PasswordAuthentication|KbdInteractiveAuthentication|AuthorizedKeysFile|AuthenticationMethods|PermitRootLogin|Match)[[:space:]]'</span><span> </span><span>\</span></div></div><div><div><div>3</div></div><div><span>/etc/ssh/sshd_config </span><span>/etc/ssh/sshd_config.d</span><span> 2&gt;</span><span>/dev/null</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>若存在 <code>Match</code> 条件块，用实际连接条件检查：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>sudo</span><span> </span><span>/usr/sbin/sshd</span><span> </span><span>-T</span><span> </span><span>\</span></div></div><div><div><div>2</div></div><div><span>  </span><span>-C</span><span> </span><span>user=adminuser,host=server.example,addr=</span><span>198.51.100.25</span><span> </span><span>\</span></div></div><div><div><div>3</div></div><div><span><span>  </span></span><span>| </span><span>grep</span><span> </span><span>-Ei</span><span> </span><span>'pubkeyauthentication|passwordauthentication|kbdinteractiveauthentication|permitrootlogin'</span></div></div></code></pre><div><div></div><div></div></div></figure></div><div><div><div></div><div>Important</div></div><div><p>OpenSSH 对多数配置项采用“首次取得的值生效”。<code>Include</code> 文件按字典序加载，因此不要简单地把重复配置追加到主文件末尾；必须以 <code>sshd -T</code> 的结果为准。</p></div></div></section><section><h2>四、先恢复公钥认证<a href="#四先恢复公钥认证"><span>#</span></a></h2><p>本节只开启公钥认证，暂时保留原有密码和 root 登录作为回退。</p><section><h3>备份配置<a href="#备份配置"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>sudo</span><span> </span><span>cp</span><span> </span><span>-a</span><span> </span><span>/etc/ssh/sshd_config</span><span> </span><span>\</span></div></div><div><div><div>2</div></div><div><span>  </span><span>/etc/ssh/sshd_config.before-pubkey</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span>sudo</span><span> </span><span>cp</span><span> </span><span>-a</span><span> </span><span>/etc/ssh/sshd_config.d</span><span> </span><span>\</span></div></div><div><div><div>5</div></div><div><span>  </span><span>/etc/ssh/sshd_config.d.before-pubkey</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>确认主配置包含位于认证设置之前的：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Include /etc/ssh/sshd_config.d/*.conf</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>然后创建本地管理文件：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>sudoedit</span><span> </span><span>/etc/ssh/sshd_config.d/00-local-auth.conf</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>第一阶段只写：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>PubkeyAuthentication yes</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>如果当前系统不加载 <code>sshd_config.d</code>，应编辑前一步查到的实际配置来源，而不是继续写一个不会被读取的文件。</p></section><section><h3>语法与最终值检查<a href="#语法与最终值检查"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>sudo</span><span> </span><span>/usr/sbin/sshd</span><span> </span><span>-t</span></div></div><div><div><div>2</div></div><div><span>sudo</span><span> </span><span>/usr/sbin/sshd</span><span> </span><span>-T</span><span> | </span><span>grep</span><span> </span><span>-Ei</span><span> </span><span>\</span></div></div><div><div><div>3</div></div><div><span>'permitrootlogin|passwordauthentication|kbdinteractiveauthentication|pubkeyauthentication'</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><code>sshd -t</code> 无输出代表语法检查通过。只有当最终值显示：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>pubkeyauthentication yes</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>才重新加载服务：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>sudo</span><span> </span><span>systemctl</span><span> </span><span>reload</span><span> </span><span>ssh</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>不要先停止 <code>ssh</code> 服务，也不要关闭当前会话。</p></section></section><section><h2>五、在第二个窗口验证密钥登录<a href="#五在第二个窗口验证密钥登录"><span>#</span></a></h2><p>新开 PowerShell：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span><span>ssh </span><span>-</span><span>vvv `</span></span></div></div><div><div><div>2</div></div><div><span><span>  </span></span><span>-</span><span>o IdentitiesOnly</span><span>=</span><span>yes `</span></div></div><div><div><div>3</div></div><div><span><span>  </span></span><span>-</span><span>i </span><span><span>"</span><span>$</span></span><span>env:USERPROFILE</span><span>\.ssh\server_ed25519"</span><span> `</span></div></div><div><div><div>4</div></div><div><span><span>  </span></span><span>-</span><span>p </span><span>2222</span><span> `</span></div></div><div><div><div>5</div></div><div><span><span>  </span></span><span>adminuser</span><span>@203.0.113.10</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>验证身份和提权：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>whoami</span></div></div><div><div><div>2</div></div><div><span>sudo</span><span> </span><span>-v</span></div></div><div><div><div>3</div></div><div><span>sudo</span><span> </span><span>whoami</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>输入项不要混淆：</p>

<table><thead><tr><th>提示</th><th>应输入的内容</th></tr></thead><tbody><tr><td><code>Enter passphrase for key</code></td><td>本地 SSH 私钥口令</td></tr><tr><td><code>[sudo] password for adminuser</code></td><td>Debian 普通用户密码</td></tr><tr><td>SSH 密码认证提示</td><td>Debian 登录用户密码</td></tr></tbody></table><p>Linux 输入 sudo 密码时不会显示字符或星号，这是正常行为。</p></section><section><h2>六、确认密钥稳定后收紧认证<a href="#六确认密钥稳定后收紧认证"><span>#</span></a></h2><p>只有以下条件全部满足才能继续：</p><ul>
<li>第二个独立窗口已通过密钥登录普通用户。</li>
<li><code>sudo whoami</code> 返回 <code>root</code>。</li>
<li>原有管理会话仍保持连接。</li>
<li>应急控制台可用。</li>
</ul><p>编辑：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>sudoedit</span><span> </span><span>/etc/ssh/sshd_config.d/00-local-auth.conf</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>设置：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>PubkeyAuthentication yes</span></div></div><div><div><div>2</div></div><div><span>PasswordAuthentication no</span></div></div><div><div><div>3</div></div><div><span>KbdInteractiveAuthentication no</span></div></div><div><div><div>4</div></div><div><span>PermitRootLogin no</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>再次检查：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>sudo</span><span> </span><span>/usr/sbin/sshd</span><span> </span><span>-t</span></div></div><div><div><div>2</div></div><div><span>sudo</span><span> </span><span>/usr/sbin/sshd</span><span> </span><span>-T</span><span> | </span><span>grep</span><span> </span><span>-Ei</span><span> </span><span>\</span></div></div><div><div><div>3</div></div><div><span>'permitrootlogin|passwordauthentication|kbdinteractiveauthentication|pubkeyauthentication'</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>目标结果：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>permitrootlogin no</span></div></div><div><div><div>2</div></div><div><span>pubkeyauthentication yes</span></div></div><div><div><div>3</div></div><div><span>passwordauthentication no</span></div></div><div><div><div>4</div></div><div><span>kbdinteractiveauthentication no</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>确认后重新加载：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>sudo</span><span> </span><span>systemctl</span><span> </span><span>reload</span><span> </span><span>ssh</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h2>七、用第三个窗口做最终验收<a href="#七用第三个窗口做最终验收"><span>#</span></a></h2><p>保持以下三个窗口：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>窗口 A：修改前已登录的管理会话，用于回滚</span></div></div><div><div><div>2</div></div><div><span>窗口 B：第一次密钥登录成功的普通用户会话</span></div></div><div><div><div>3</div></div><div><span>窗口 C：重新加载后新开的最终测试会话</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>在窗口 C 登录：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>ssh `</span></div></div><div><div><div>2</div></div><div><span><span>  </span></span><span>-</span><span>o IdentitiesOnly</span><span>=</span><span>yes `</span></div></div><div><div><div>3</div></div><div><span><span>  </span></span><span>-</span><span>i </span><span><span>"</span><span>$</span></span><span>env:USERPROFILE</span><span>\.ssh\server_ed25519"</span><span> `</span></div></div><div><div><div>4</div></div><div><span><span>  </span></span><span>-</span><span>p </span><span>2222</span><span> `</span></div></div><div><div><div>5</div></div><div><span><span>  </span></span><span>adminuser</span><span>@203.0.113.10</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>再次执行：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>whoami</span></div></div><div><div><div>2</div></div><div><span>sudo</span><span> </span><span>whoami</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>窗口 C 验证成功后才能关闭窗口 A。</p><section><h3>反向验证密码认证已关闭<a href="#反向验证密码认证已关闭"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>ssh `</span></div></div><div><div><div>2</div></div><div><span><span>  </span></span><span>-</span><span>o PubkeyAuthentication</span><span>=</span><span>no `</span></div></div><div><div><div>3</div></div><div><span><span>  </span></span><span>-</span><span>o PreferredAuthentications</span><span>=</span><span>password `</span></div></div><div><div><div>4</div></div><div><span><span>  </span></span><span>-</span><span>p </span><span>2222</span><span> `</span></div></div><div><div><div>5</div></div><div><span><span>  </span></span><span>adminuser</span><span>@203.0.113.10</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>预期失败并返回类似：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Permission denied (publickey).</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section></section><section><h2>八、配置 SSH 别名<a href="#八配置-ssh-别名"><span>#</span></a></h2><p>在 Windows 当前用户的 <code>.ssh\config</code> 中写入：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Host server-a</span></div></div><div><div><div>2</div></div><div><span><span>    </span></span><span>HostName 203.0.113.10</span></div></div><div><div><div>3</div></div><div><span><span>    </span></span><span>Port 2222</span></div></div><div><div><div>4</div></div><div><span><span>    </span></span><span>User adminuser</span></div></div><div><div><div>5</div></div><div><span><span>    </span></span><span>IdentityFile ~/.ssh/server_ed25519</span></div></div><div><div><div>6</div></div><div><span><span>    </span></span><span>IdentitiesOnly yes</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>以后使用：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span><span>ssh server</span><span>-</span><span>a</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>若私钥只保存在 KeePassXC、由 Agent 提供，可按 <a href="/posts/50-Tutorials/Windows/Windows%20%E4%BD%BF%E7%94%A8%20KeePassXC%20%E4%B8%8E%20SSH%20Agent%20%E7%AE%A1%E7%90%86%20SSH%20%E5%AF%86%E9%92%A5/#agent-%E4%B8%AD%E5%AF%86%E9%92%A5%E5%BE%88%E5%A4%9A%E6%97%B6">Windows 使用 KeePassXC 与 SSH Agent 管理 SSH 密钥#Agent 中密钥很多时</a> 的方式让 <code>IdentityFile</code> 指向对应公钥。</p></section><section><h2>九、排障判断表<a href="#九排障判断表"><span>#</span></a></h2>

<table><thead><tr><th>现象</th><th>优先检查</th></tr></thead><tbody><tr><td>本地私钥不存在</td><td>路径和文件名</td></tr><tr><td>两端公钥指纹不同</td><td><code>authorized_keys</code> 是否贴错</td></tr><tr><td>服务端只提供 <code>password</code></td><td><code>sshd -T</code> 中的 <code>PubkeyAuthentication</code></td></tr><tr><td>已出现 <code>Offering public key</code> 但失败</td><td>用户、文件权限、<code>AuthorizedKeysFile</code>、<code>Match</code> 规则</td></tr><tr><td><code>Too many authentication failures</code></td><td><code>IdentitiesOnly</code> 与 Agent 中密钥数量</td></tr><tr><td>登录后持续出现 <code>debug3</code></td><td>客户端仍带 <code>-vvv</code></td></tr><tr><td>提示私钥 passphrase</td><td>输入本地私钥口令</td></tr><tr><td>提示 sudo 密码</td><td>输入 Debian 普通用户密码</td></tr><tr><td>Agent pipe 不存在</td><td>Agent 未运行；显式 <code>-i</code> 不受影响</td></tr></tbody></table></section><section><h2>十、公开前隐私检查<a href="#十公开前隐私检查"><span>#</span></a></h2><p>发布教程、终端输出或截图前移除：</p><ul>
<li>真实 VPS IP、端口、主机名和用户名。</li>
<li>SSH 私钥、完整公钥及指纹。</li>
<li><code>Last login</code> 中的客户端出口 IP。</li>
<li>Windows 本地用户名和绝对路径。</li>
<li>代理节点 UUID、REALITY 密钥、short ID、订阅地址。</li>
<li>API Key、Cookie、Token 和安装命令中的 Secret。</li>
</ul></section><section><h2>验收清单<a href="#验收清单"><span>#</span></a></h2><ul>
<li> 本地公钥与服务器 <code>authorized_keys</code> 指纹一致。</li>
<li> <code>sshd -T</code> 显示 <code>pubkeyauthentication yes</code>。</li>
<li> 普通用户可在新窗口通过密钥登录。</li>
<li> 普通用户可正常执行 sudo。</li>
<li> <code>sshd -t</code> 语法检查通过。</li>
<li> 重新加载后第三个窗口仍能登录。</li>
<li> <code>PermitRootLogin no</code> 已生效。</li>
<li> 密码和交互式认证反向测试失败。</li>
<li> 应急控制台和配置备份可用。</li>
</ul></section><section><h2>参考资料<a href="#参考资料"><span>#</span></a></h2><ul>
<li><a href="https://man.openbsd.org/sshd_config" target="_blank">OpenSSH <code>sshd_config</code> 手册</a></li>
<li><a href="https://man.openbsd.org/sshd" target="_blank">OpenSSH <code>sshd</code> 手册</a></li>
<li><a href="https://manpages.debian.org/bookworm/openssh-server/sshd_config.5.en.html" target="_blank">Debian 12 <code>sshd_config</code> 手册</a></li>
<li><a href="https://wiki.debian.org/SSH" target="_blank">Debian Wiki：SSH</a></li>
</ul></section></section>]]></content>
    </entry>
    <entry>
      <id>https://yyq-firefly.pages.dev/posts/20-knowledge/windows/keepass/keepassxc-%E6%8E%A8%E8%8D%90%E9%85%8D%E7%BD%AE%E4%B8%8E%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/</id>
      <title type="text">KeePassXC 推荐配置与使用指南</title>
      <published>2026-09-15T00:00:00.000Z</published>
      <updated>2026-09-17T00:00:00.000Z</updated>
      <author><name>YYQ</name></author>
      <link rel="alternate" href="https://yyq-firefly.pages.dev/posts/20-knowledge/windows/keepass/keepassxc-%E6%8E%A8%E8%8D%90%E9%85%8D%E7%BD%AE%E4%B8%8E%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/"/>
      <summary type="text"></summary>
      <content type="html"><![CDATA[<section><h1>KeePassXC 推荐配置与使用指南<a href="#keepassxc-推荐配置与使用指南"><span>#</span></a></h1><div><div><div></div><div>Info</div></div><div><p>本文按 <strong>KeePassXC 2.7.12 简体中文界面</strong>整理。
菜单名和选项名尽量使用软件中的实际中文名称，而不是自行翻译。
适用场景：Windows 10/11、KeePassXC 作为主力、Chrome/Edge 浏览器、可与 KeePass 2.x 共用同一个 <code>.kdbx</code>。</p></div></div><p>相关笔记：<a href="/posts/20-Knowledge/Windows/KeePass/KeePass%E5%AF%86%E7%A0%81%E7%AE%A1%E7%90%86/">KeePass 密码管理</a>、<a href="/posts/20-Knowledge/Windows/%E7%94%B5%E8%84%91%E5%BF%85%E5%A4%87%E8%BD%AF%E4%BB%B6/">电脑必备软件</a></p><p>官方下载：<a href="https://keepassxc.org/download/" target="_blank">KeePassXC</a></p><section><h2>1. 推荐配置速览<a href="#1-推荐配置速览"><span>#</span></a></h2><div><div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>KeePassXC</span></div></div><div><div><div>2</div></div><div><span>├─ 常规</span></div></div><div><div><div>3</div></div><div><span>│  ├─ 启动：自动启动、单实例、记住数据库</span></div></div><div><div><div>4</div></div><div><span>│  ├─ 文件管理：修改后自动保存、外部修改自动重新加载</span></div></div><div><div><div>5</div></div><div><span>│  ├─ 用户界面：任务栏图标、最小化到任务栏</span></div></div><div><div><div>6</div></div><div><span>│  └─ 自动输入：设置全局快捷键</span></div></div><div><div><div>7</div></div><div><span>├─ 安全</span></div></div><div><div><div>8</div></div><div><span>│  ├─ 剪贴板：10~15 秒清空</span></div></div><div><div><div>9</div></div><div><span>│  ├─ 闲置锁定：900~1800 秒</span></div></div><div><div><div>10</div></div><div><span>│  ├─ Windows Hello：开启快速解锁</span></div></div><div><div><div>11</div></div><div><span>│  ├─ Windows 锁屏时锁数据库</span></div></div><div><div><div>12</div></div><div><span>│  └─ 不建议“最小化窗口后锁定数据库”</span></div></div><div><div><div>13</div></div><div><span>├─ 浏览器集成</span></div></div><div><div><div>14</div></div><div><span>│  ├─ 开启 KeePassXC-Browser</span></div></div><div><div><div>15</div></div><div><span>│  ├─ 勾选实际使用的浏览器</span></div></div><div><div><div>16</div></div><div><span>│  ├─ 优先按真实 URL 匹配</span></div></div><div><div><div>17</div></div><div><span>│  └─ 不建议自动提交登录表单</span></div></div><div><div><div>18</div></div><div><span>├─ 数据库</span></div></div><div><div><div>19</div></div><div><span>│  ├─ KDBX 4</span></div></div><div><div><div>20</div></div><div><span>│  ├─ AES-256</span></div></div><div><div><div>21</div></div><div><span>│  ├─ Argon2id</span></div></div><div><div><div>22</div></div><div><span>│  ├─ 保留历史记录</span></div></div><div><div><div>23</div></div><div><span>│  └─ 开启回收站</span></div></div><div><div><div>24</div></div><div><span>└─ 可选增强</span></div></div><div><div><div>25</div></div><div><span><span>   </span></span><span>├─ TOTP</span></div></div><div><div><div>26</div></div><div><span><span>   </span></span><span>├─ Passkey</span></div></div><div><div><div>27</div></div><div><span><span>   </span></span><span>├─ SSH 代理</span></div></div><div><div><div>28</div></div><div><span><span>   </span></span><span>├─ 高级自定义字段</span></div></div><div><div><div>29</div></div><div><span><span>   </span></span><span>└─ 数据库报告</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div></section><section><h2>2. 工具 → 设置 → 常规<a href="#2-工具--设置--常规"><span>#</span></a></h2><p>打开：<strong>工具 → 设置 → 常规</strong></p><section><h3>2.1 启动<a href="#21-启动"><span>#</span></a></h3><p>位置：<strong>工具 → 设置 → 常规 → 启动</strong></p>

<table><thead><tr><th>中文界面实际名称</th><th>推荐</th><th>说明</th></tr></thead><tbody><tr><td>只启动一个 KeePassXC 实例</td><td>✅</td><td>避免重复打开多个实例</td></tr><tr><td>系统启动时自动启动 KeePassXC</td><td>✅</td><td>开机即运行</td></tr><tr><td>在应用程序启动时最小化窗口</td><td>可选</td><td>喜欢后台运行可开启</td></tr><tr><td>解锁数据库后最小化窗口</td><td>✅</td><td>解锁后自动回到后台</td></tr><tr><td>记住以前使用的数据库</td><td>✅</td><td>不必每次重新选 KDBX</td></tr><tr><td>启动时加载以前打开的数据库</td><td>✅</td><td>建议和上一项一起开</td></tr><tr><td>记住数据库密钥文件和安全加密狗</td><td>按需</td><td>只有使用 Key File / YubiKey 时才需要</td></tr><tr><td>每周在应用程序启动时检查更新</td><td>✅</td><td>保持版本更新</td></tr><tr><td>检查更新时包含 Beta 版本</td><td>❌</td><td>日常主力机不建议</td></tr></tbody></table></section><section><h3>2.2 文件管理<a href="#22-文件管理"><span>#</span></a></h3><p>位置：<strong>工具 → 设置 → 常规 → 文件管理</strong></p>

<table><thead><tr><th>中文界面实际名称</th><th>推荐</th><th>说明</th></tr></thead><tbody><tr><td>修改后自动保存</td><td>✅</td><td>很重要</td></tr><tr><td>锁定数据库时自动保存</td><td>✅</td><td>避免未保存修改</td></tr><tr><td>锁定数据库时，自动保存非数据更改</td><td>✅</td><td>推荐</td></tr><tr><td>有外部修改时自动重新加载数据库</td><td>✅</td><td>与 KeePass/同步盘共用时尤其有用</td></tr><tr><td>保存前备份数据库文件</td><td>✅ 可开</td><td>会额外保留旧数据库</td></tr><tr><td>使用替代保存方式</td><td>默认关闭</td><td>云盘保存异常时再考虑</td></tr></tbody></table><p>如必须启用“使用替代保存方式”，优先：</p><p><strong>写入临时文件再覆盖移动</strong></p><p>不要主动使用：</p><p><strong>直接写入数据库文件（危险）</strong></p><div><div><div></div><div>Warning</div></div><div><p>若 KeePass 与 KeePassXC 共用同一个 <code>.kdbx</code>，建议开启“修改后自动保存”和“有外部修改时自动重新加载数据库”，但仍不要让两个程序长期同时编辑同一个数据库。外部修改自动重新加载不等于自动安全合并。</p></div></div></section><section><h3>2.3 条目管理<a href="#23-条目管理"><span>#</span></a></h3><p>位置：<strong>工具 → 设置 → 常规 → 条目管理</strong></p><p>推荐：</p><ul>
<li>✅ 新增条目时使用群组图标</li>
<li>✅ 删除条目到回收站之前提示确认</li>
<li>✅ 在条目视图中，双击字段复制数据</li>
<li>✅ 为新条目自动生成密码</li>
<li>“打开 URL 时最小化”按习惯</li>
<li>“复制到剪贴板时隐藏窗口”按习惯</li>
</ul></section><section><h3>2.4 用户界面<a href="#24-用户界面"><span>#</span></a></h3><p>位置：<strong>工具 → 设置 → 常规 → 用户界面</strong></p><p>推荐：</p><ul>
<li>✅ 显示任务栏图标</li>
<li>✅ 将窗口最小化至任务栏</li>
<li>✅ 最小化而不是退出应用程序</li>
<li>“备注使用等宽字体”开发用途推荐</li>
<li>“密码以彩色显示”按喜好</li>
</ul></section></section><section><h2>3. 工具 → 设置 → 安全<a href="#3-工具--设置--安全"><span>#</span></a></h2><p>打开：<strong>工具 → 设置 → 安全</strong></p><section><h3>3.1 超时<a href="#31-超时"><span>#</span></a></h3><p>位置：<strong>工具 → 设置 → 安全 → 超时</strong></p><section><h4>在多久后清空剪贴板<a href="#在多久后清空剪贴板"><span>#</span></a></h4><p>推荐：<code>10~15 秒</code>，建议 <code>15 秒</code>。</p><p>如果主要使用 KeePassXC-Browser，密码经过剪贴板的次数会明显减少。</p></section><section><h4>在多久后清空搜索框<a href="#在多久后清空搜索框"><span>#</span></a></h4><p>推荐：<code>5 分钟</code>。</p></section><section><h4>在闲置多久后锁定数据库<a href="#在闲置多久后锁定数据库"><span>#</span></a></h4><p>单位是<strong>秒</strong>。</p><p>推荐：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>900 秒  = 15 分钟</span></div></div><div><div><div>2</div></div><div><span>1800 秒 = 30 分钟</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>建议从 <code>900 秒</code> 开始。</p><div><div><div></div><div>Note</div></div><div><p>这里的“闲置”主要是 KeePassXC 自身的活动判断，不等于 Windows 整台电脑完全没有键盘鼠标操作。</p></div></div></section></section><section><h3>3.2 便利性<a href="#32-便利性"><span>#</span></a></h3><p>位置：<strong>工具 → 设置 → 安全 → 便利性</strong></p><p>建议开启：</p><p><strong>启用数据库快速解锁（Touch ID / Windows Hello）</strong></p><p>典型流程：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>KeePassXC 启动</span></div></div><div><div><div>2</div></div><div><span>→ 首次输入数据库主密码</span></div></div><div><div><div>3</div></div><div><span>→ 后续数据库自动锁定</span></div></div><div><div><div>4</div></div><div><span>→ Windows Hello 快速解锁</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>Windows Hello 主要用于后续快速解锁，不能取代数据库主密码本身。</p></section><section><h3>3.3 锁定选项<a href="#33-锁定选项"><span>#</span></a></h3><p>位置：<strong>工具 → 设置 → 安全 → 锁定选项</strong></p><p>推荐：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>☑ 系统锁定或合上盖子时锁定数据库</span></div></div><div><div><div>2</div></div><div><span>☑ 切换用户时锁定数据库</span></div></div><div><div><div>3</div></div><div><span>☐ 在最小化窗口后锁定数据库</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>不建议“在最小化窗口后锁定数据库”，尤其如果已经开启“解锁数据库后最小化窗口”。</p></section><section><h3>3.4 隐私<a href="#34-隐私"><span>#</span></a></h3><p>位置：<strong>工具 → 设置 → 安全 → 隐私</strong></p><p>推荐：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>☑ 编辑密码时隐藏密码</span></div></div><div><div><div>2</div></div><div><span>☑ 在条目预览面板中隐藏密码</span></div></div><div><div><div>3</div></div><div><span>☑ 在条目预览面板隐藏 TOTP</span></div></div><div><div><div>4</div></div><div><span>☑ 在条目预览面板隐藏备注</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>“使用 DuckDuckGo 来下载网站图标”按隐私偏好决定。</p></section></section><section><h2>4. 浏览器自动填充<a href="#4-浏览器自动填充"><span>#</span></a></h2><section><h3>4.1 安装 KeePassXC-Browser<a href="#41-安装-keepassxc-browser"><span>#</span></a></h3><p>安装官方扩展：<a href="https://keepassxc.org/docs/KeePassXC_GettingStarted.html#_setup_browser_integration" target="_blank">KeePassXC-Browser</a></p><p>支持 Chrome、Edge、Chromium、Brave、Vivaldi、Firefox。</p></section><section><h3>4.2 KeePassXC 中开启浏览器集成<a href="#42-keepassxc-中开启浏览器集成"><span>#</span></a></h3><p>位置：<strong>工具 → 设置 → 浏览器集成</strong></p><p>开启：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>☑ 启用浏览器集成</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>然后在“为这些浏览器开启集成”中勾选实际使用的浏览器，例如：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>☑ Google Chrome</span></div></div><div><div><div>2</div></div><div><span>☑ Edge</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>推荐同时开启：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>☑ 如果数据库已锁定，则请求解锁</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>“请求凭据时显示通知”按个人喜好。</p></section><section><h3>4.3 第一次连接数据库<a href="#43-第一次连接数据库"><span>#</span></a></h3><p>保证数据库已经解锁：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>浏览器</span></div></div><div><div><div>2</div></div><div><span>→ KeePassXC-Browser</span></div></div><div><div><div>3</div></div><div><span>→ Connect / 连接</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>连接名称建议：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Chrome-Home-PC</span></div></div><div><div><div>2</div></div><div><span>Edge-Home-PC</span></div></div><div><div><div>3</div></div><div><span>Chrome-Work-PC</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>避免不同设备重复使用完全相同的连接名。</p></section></section><section><h2>5. 条目的浏览器 URL 匹配<a href="#5-条目的浏览器-url-匹配"><span>#</span></a></h2><p>编辑条目：<strong>条目 → 浏览器集成</strong></p><p>主 URL 在条目首页，例如：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>https://github.com</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>同一账号用于多个地址时，在“浏览器集成”添加额外 URL，例如：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>https://login.example.com</span></div></div><div><div><div>2</div></div><div><span>https://account.example.com</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>KeePassXC 2.7.10+ 支持额外 URL 通配符：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>https://*.example.com</span></div></div><div><div><div>2</div></div><div><span>https://example.com/*/login</span></div></div><div><div><div>3</div></div><div><span>https://sub.*.example.com/path/*</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>推荐原则：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>网页 → KeePassXC-Browser → 按真实 URL 匹配</span></div></div><div><div><div>2</div></div><div><span>桌面程序 → Auto-Type / 窗口标题匹配</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>不要再把网页窗口标题匹配当作浏览器密码匹配主方案。</p></section><section><h2>6. 浏览器扩展中的自动填充策略<a href="#6-浏览器扩展中的自动填充策略"><span>#</span></a></h2><p>推荐：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>✅ 自动获取可用凭据</span></div></div><div><div><div>2</div></div><div><span>❌ 不建议页面打开就无条件自动填单一账号</span></div></div><div><div><div>3</div></div><div><span>❌ 不建议自动提交登录表单</span></div></div><div><div><div>4</div></div><div><span>TOTP 自动填充：按个人习惯</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>日常流程：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>打开登录页</span></div></div><div><div><div>2</div></div><div><span>→ 输入框出现 KeePassXC 图标</span></div></div><div><div><div>3</div></div><div><span>→ 点击账号</span></div></div><div><div><div>4</div></div><div><span>→ 填入用户名和密码</span></div></div><div><div><div>5</div></div><div><span>→ 需要 TOTP 时继续填 TOTP</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>不建议默认开启“自动提交”，避免误填、误登录或特殊网页识别错误。</p></section><section><h2>7. 自动输入 Auto-Type<a href="#7-自动输入-auto-type"><span>#</span></a></h2><p>Auto-Type 与浏览器集成是两套独立功能。</p><p>推荐用途：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>网页       → KeePassXC-Browser</span></div></div><div><div><div>2</div></div><div><span>桌面程序   → Auto-Type</span></div></div><div><div><div>3</div></div><div><span>远程工具   → Auto-Type</span></div></div><div><div><div>4</div></div><div><span>旧式登录框 → Auto-Type</span></div></div></code></pre><div><div></div><div></div></div></figure></div><section><h3>7.1 设置全局 Auto-Type 快捷键<a href="#71-设置全局-auto-type-快捷键"><span>#</span></a></h3><p>位置：<strong>工具 → 设置 → 自动输入</strong></p><p>找到：<strong>全局自动输入快捷键</strong></p><p>例如：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Ctrl + Alt + A</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>建议：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>☑ 全局自动输入时使用条目标题匹配窗口</span></div></div><div><div><div>2</div></div><div><span>☑ 总在执行自动输入前询问</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>同页还能设置：</p><ul>
<li>全局自动输入时使用条目 URL 匹配窗口</li>
<li>自动输入时隐藏已过期条目</li>
<li>自动输入起始延迟</li>
<li>自动输入延迟</li>
</ul></section><section><h3>7.2 给单个条目配置窗口标题<a href="#72-给单个条目配置窗口标题"><span>#</span></a></h3><p>编辑条目：<strong>条目 → 自动输入</strong></p><p>窗口规则：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>*GitHub*</span></div></div><div><div><div>2</div></div><div><span>*Oracle*</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><code>*</code> 是通配符。</p><p>正则示例：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>//^Secure Login - .*//</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>默认输入序列：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>{USERNAME}{TAB}{PASSWORD}{ENTER}</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>需要 TOTP：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>{USERNAME}{TAB}{PASSWORD}{ENTER}</span></div></div><div><div><div>2</div></div><div><span>{DELAY 1000}</span></div></div><div><div><div>3</div></div><div><span>{TOTP}{ENTER}</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>KeePassXC 2.7.12 也支持 <code>{TIMEOTP}</code>。</p></section></section><section><h2>8. TOTP<a href="#8-totp"><span>#</span></a></h2><section><h3>8.1 添加<a href="#81-添加"><span>#</span></a></h3><p>对条目右键：<strong>TOTP → 设置 TOTP</strong></p><p>填入网站提供的原始 Secret。</p><p>绝大多数网站：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>周期：30 秒</span></div></div><div><div><div>2</div></div><div><span>位数：6</span></div></div><div><div><div>3</div></div><div><span>算法：SHA-1</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>8.2 使用<a href="#82-使用"><span>#</span></a></h3><p><code>Ctrl + T</code>：复制当前 TOTP。</p><p><code>Ctrl + Y</code>：复制 Password + TOTP。</p><p>也可通过：</p><ul>
<li>KeePassXC-Browser</li>
<li>Auto-Type <code>{TOTP}</code></li>
<li>条目右键菜单</li>
</ul></section><section><h3>8.3 安全取舍<a href="#83-安全取舍"><span>#</span></a></h3><p>方便模式：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>同一个 KDBX</span></div></div><div><div><div>2</div></div><div><span>├─ 密码</span></div></div><div><div><div>3</div></div><div><span>└─ TOTP Secret</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>隔离更强：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>KeePassXC → 密码</span></div></div><div><div><div>2</div></div><div><span>独立 Authenticator → TOTP</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>与 KeePass 共用同一个 KDBX 时：KeePassXC 保存的 TOTP 不会导致数据库无法打开，但 KeePass 不一定自动识别成自己的 TOTP 字段。若 KeePassXC 已成为主力，建议主要由 KeePassXC 管理 TOTP。</p></section></section><section><h2>9. Passkey<a href="#9-passkey"><span>#</span></a></h2><p>KeePassXC 可以通过 KeePassXC-Browser 保存 Passkey。</p><div><div><div></div><div>Warning</div></div><div><p>KeePassXC 2.7.12 调整了 Passkey 的 BE/BS 标志。极少数更早版本创建的旧 Passkey 如果升级后异常，需要单独处理；新建 Passkey 无需额外配置。</p></div></div><p>建议：</p><ul>
<li>新建 Passkey 可以直接用 KeePassXC</li>
<li>重要账号仍保存 Recovery Codes</li>
<li>不要把 Recovery Codes 只保存在唯一一个 KDBX 中</li>
</ul></section><section><h2>10. 条目中的“高级”<a href="#10-条目中的高级"><span>#</span></a></h2><p>编辑条目：<strong>条目 → 高级</strong></p><p>用途：</p><ul>
<li>自定义属性</li>
<li>额外账号字段</li>
<li>API 信息</li>
<li>附件</li>
<li>特殊集成数据</li>
</ul><p>示例：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>标题：Example VPS</span></div></div><div><div><div>2</div></div><div><span>用户名：root</span></div></div><div><div><div>3</div></div><div><span>密码：********</span></div></div><div><div><div>4</div></div><div><span>URL：ssh://example.com</span></div></div><div><div><div>5</div></div><div>
</div></div><div><div><div>6</div></div><div><span>高级：</span></div></div><div><div><div>7</div></div><div><span>IP             203.0.113.10</span></div></div><div><div><div>8</div></div><div><span>SSH-Port       22</span></div></div><div><div><div>9</div></div><div><span>Panel-User     admin</span></div></div><div><div><div>10</div></div><div><span>Panel-Password ********</span></div></div><div><div><div>11</div></div><div><span>Client-ID      example-id</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>引用自定义字段：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>{S:字段名}</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>例如：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>{S:API_KEY}</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h2>11. 浏览器特殊表单字段<a href="#11-浏览器特殊表单字段"><span>#</span></a></h2><p>企业系统常见额外字段：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>租户号</span></div></div><div><div><div>2</div></div><div><span>公司编码</span></div></div><div><div><div>3</div></div><div><span>Account ID</span></div></div><div><div><div>4</div></div><div><span>PIN</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>可在“高级”中建立字段，再由 KeePassXC-Browser 选择网页对应输入框。不标准的登录页也可以使用 <code>KPH:</code> 自定义字段，然后在扩展中绑定网页输入框。</p></section><section><h2>12. 密码生成器<a href="#12-密码生成器"><span>#</span></a></h2><p>推荐：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>长度：20~32</span></div></div><div><div><div>2</div></div><div><span>大写：开启</span></div></div><div><div><div>3</div></div><div><span>小写：开启</span></div></div><div><div><div>4</div></div><div><span>数字：开启</span></div></div><div><div><div>5</div></div><div><span>特殊字符：开启</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>核心原则：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>每个网站独立随机密码</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>浏览器注册或改密码时，可直接调用 KeePassXC-Browser 密码生成器并保存到数据库。</p></section><section><h2>13. 数据库设置<a href="#13-数据库设置"><span>#</span></a></h2><p>打开：<strong>数据库 → 数据库设置</strong></p><p>这是当前 KDBX 的设置，不是 KeePassXC 全局设置。</p><section><h3>13.1 常规<a href="#131-常规"><span>#</span></a></h3><p>推荐：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>☑ 回收站</span></div></div><div><div><div>2</div></div><div><span>☑ 压缩</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>历史记录建议保留，但不要无限增长。经验值：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>历史条目数量：约 10</span></div></div><div><div><div>2</div></div><div><span>历史大小：约 6 MiB</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>13.2 安全 / 加密设置<a href="#132-安全--加密设置"><span>#</span></a></h3><p>推荐：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>数据库格式：KDBX 4</span></div></div><div><div><div>2</div></div><div><span>加密算法：AES-256</span></div></div><div><div><div>3</div></div><div><span>KDF：Argon2id</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>利用基准测试把解锁耗时设在大约 <code>1 秒</code> 即可，不必手工折腾 Iterations、Memory、Parallelism。</p><p>与 KeePass 共库时，如果还使用很旧的 KeePass、老插件或老手机客户端，修改 KDF 前先确认兼容性。</p></section></section><section><h2>14. 数据库 → 浏览器集成<a href="#14-数据库--浏览器集成"><span>#</span></a></h2><p>位置：<strong>数据库 → 数据库设置 → 浏览器集成</strong></p><p>这里用于当前数据库级管理，可进行：</p><ul>
<li>断开与所有浏览器的关联</li>
<li>转换旧 KeePassHTTP 数据</li>
<li>刷新数据库根群组 ID</li>
<li>管理数据库浏览器相关设置</li>
</ul><p>日常无需频繁操作。</p></section><section><h2>15. 群组级浏览器控制<a href="#15-群组级浏览器控制"><span>#</span></a></h2><p>编辑群组：<strong>群组 → 浏览器集成</strong></p><p>可设置：</p><p><strong>在浏览器扩展中隐藏条目</strong></p><p>适合：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>SSH Keys</span></div></div><div><div><div>2</div></div><div><span>API Tokens</span></div></div><div><div><div>3</div></div><div><span>Recovery Codes</span></div></div><div><div><div>4</div></div><div><span>内部凭据</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h2>16. 数据库报告<a href="#16-数据库报告"><span>#</span></a></h2><p>打开：<strong>数据库 → 数据库报告</strong></p><p>建议关注：</p><ul>
<li>健康检查：弱密码、重复密码、过期密码</li>
<li>HIBP：检查公开泄漏</li>
<li>浏览器统计：排查某网站为什么不显示凭据</li>
</ul><p>建议每 2~3 个月做一次健康检查。HIBP 属于在线检查，不必频繁运行。</p></section><section><h2>17. SSH 代理<a href="#17-ssh-代理"><span>#</span></a></h2><p>适合 GitHub、GitLab、VPS、Linux 服务器。</p><p>完整配置与排障步骤见：<a href="/posts/50-Tutorials/Windows/Windows%20%E4%BD%BF%E7%94%A8%20KeePassXC%20%E4%B8%8E%20SSH%20Agent%20%E7%AE%A1%E7%90%86%20SSH%20%E5%AF%86%E9%92%A5/">Windows 使用 KeePassXC 与 SSH Agent 管理 SSH 密钥</a>。</p><p>KeePassXC 不是 SSH Agent 本身，而是现有 SSH Agent 的客户端。</p><section><h3>17.1 Windows 启用 OpenSSH Authentication Agent<a href="#171-windows-启用-openssh-authentication-agent"><span>#</span></a></h3><p>管理员 PowerShell：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>Get-Service</span><span><span> ssh</span><span>-</span><span>agent | </span></span><span>Set-Service</span><span><span> </span><span>-</span><span>StartupType Automatic</span></span></div></div><div><div><div>2</div></div><div><span>Start-Service</span><span><span> ssh</span><span>-</span><span>agent</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>17.2 KeePassXC 开启<a href="#172-keepassxc-开启"><span>#</span></a></h3><p>位置：<strong>工具 → 设置 → SSH 代理</strong></p><p>开启：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>☑ 启用 SSH 代理集成</span></div></div><div><div><div>2</div></div><div><span>☑ 使用 OpenSSH</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>若显示“SSH 代理连接工作正常！”，说明连接成功。</p></section><section><h3>17.3 条目配置 SSH Key<a href="#173-条目配置-ssh-key"><span>#</span></a></h3><p>编辑条目：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>条目 → 高级 → 添加私钥附件</span></div></div><div><div><div>2</div></div><div><span>条目 → SSH 代理 → 选择对应私钥</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>可配置数据库解锁时自动加载、锁定时移除等。之后可减少 <code>git pull</code>、<code>git push</code>、<code>ssh user@example.com</code> 过程中反复输入私钥密码的次数。</p></section></section><section><h2>18. 数据库同步与备份<a href="#18-数据库同步与备份"><span>#</span></a></h2><p>KDBX 可放在 OneDrive、Dropbox、Google Drive、Nextcloud、Syncthing、NAS。</p><p>推荐：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>OneDrive</span></div></div><div><div><div>2</div></div><div><span>└─ KeePass</span></div></div><div><div><div>3</div></div><div><span><span>   </span></span><span>└─ passwords.kdbx</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>最好选带版本历史的同步服务。</p><p>同步 ≠ 备份。</p><p>至少建议：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>主 KDBX</span></div></div><div><div><div>2</div></div><div><span>+</span></div></div><div><div><div>3</div></div><div><span>云盘版本历史</span></div></div><div><div><div>4</div></div><div><span>+</span></div></div><div><div><div>5</div></div><div><span>偶尔离线备份</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>如果使用 Key File，不要把它和 <code>.kdbx</code> 放在同一个云盘同一位置。出现冲突副本时，可使用：</p><p><code>数据库 → 从数据库合并</code></p></section><section><h2>19. KeePass + KeePassXC 共用一个 KDBX<a href="#19-keepass--keepassxc-共用一个-kdbx"><span>#</span></a></h2><p>基本兼容：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>账号 / 密码 / URL / 备注</span></div></div><div><div><div>2</div></div><div><span>→ 两边正常使用</span></div></div></code></pre><div><div></div><div></div></div></figure></div><section><h3>19.1 TOTP<a href="#191-totp"><span>#</span></a></h3><p>KeePassXC 与 KeePass 原生 TOTP 的内部字段格式不完全一致。</p><p>结果：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>KeePassXC 添加 TOTP</span></div></div><div><div><div>2</div></div><div><span>→ KeePass 能正常打开数据库</span></div></div><div><div><div>3</div></div><div><span>→ 但不一定自动识别成 KeePass 自己的 TOTP</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>不会因此破坏整个 KDBX。</p><p>如果 KeePassXC 已成为主力，建议 TOTP 主要由 KeePassXC 管理。</p></section><section><h3>19.2 Passkey<a href="#192-passkey"><span>#</span></a></h3><p>Passkey 更偏 KeePassXC 自己的浏览器集成，建议主要让 KeePassXC 管理。不要假设 KeePass 能直接使用。</p></section><section><h3>19.3 自定义字段<a href="#193-自定义字段"><span>#</span></a></h3><p>KeePass 通常可以保留 KeePassXC 创建的普通自定义字段。</p><p>但重要数据库升级前仍建议备份。</p><p>推荐使用方式：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>KeePassXC = 主力，长期运行</span></div></div><div><div><div>2</div></div><div><span>KeePass = 兼容 / 备用，用完关闭</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section></section><section><h2>20. 不建议为了“高级”强行开启的功能<a href="#20-不建议为了高级强行开启的功能"><span>#</span></a></h2><section><h3>Key File<a href="#key-file"><span>#</span></a></h3><p>能增强安全性，但会增加备份、多设备同步和遗失风险。没有明确需求时不用强开。</p></section><section><h3>YubiKey<a href="#yubikey"><span>#</span></a></h3><p>支持 Challenge-Response，但必须认真准备备用硬件和恢复方案，否则硬件损坏或丢失可能导致数据库无法解锁。</p><p>当前更推荐：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>强主密码</span></div></div><div><div><div>2</div></div><div><span>+ Windows Hello 快速解锁</span></div></div><div><div><div>3</div></div><div><span>+ KDBX 多份备份</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>除非确实有更高安全需求，再增加第二解锁因素。</p></section></section><section><h2>21. 截图保护<a href="#21-截图保护"><span>#</span></a></h2><p>KeePassXC 在 Windows 上支持阻止普通截图/录屏捕获敏感窗口。</p><p>临时需要截图时：</p><p><strong>查看 → 允许屏幕截图</strong></p><p>涉及主密码、TOTP Secret、Recovery Code、私钥、API Token 时不要随意截图。使用后及时关闭。</p></section><section><h2>22. 推荐快捷键<a href="#22-推荐快捷键"><span>#</span></a></h2>

<table><thead><tr><th>操作</th><th>快捷键</th></tr></thead><tbody><tr><td>搜索</td><td><code>Ctrl + F</code></td></tr><tr><td>编辑条目</td><td><code>Enter</code> / <code>Ctrl + E</code></td></tr><tr><td>新建条目</td><td><code>Ctrl + N</code></td></tr><tr><td>复制用户名</td><td><code>Ctrl + B</code></td></tr><tr><td>复制密码</td><td><code>Ctrl + C</code></td></tr><tr><td>复制 URL</td><td><code>Ctrl + U</code></td></tr><tr><td>复制 TOTP</td><td><code>Ctrl + T</code></td></tr><tr><td>Password + TOTP</td><td><code>Ctrl + Y</code></td></tr><tr><td>Auto-Type</td><td><code>Ctrl + Shift + V</code></td></tr><tr><td>锁定当前数据库</td><td><code>Ctrl + L</code></td></tr><tr><td>数据库报告</td><td><code>Ctrl + Shift + R</code></td></tr><tr><td>设置</td><td><code>Ctrl + ,</code></td></tr></tbody></table><p>全局 Auto-Type 快捷键建议自行设置，例如：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Ctrl + Alt + A</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h2>23. 最终推荐配置清单<a href="#23-最终推荐配置清单"><span>#</span></a></h2><section><h3>工具 → 设置 → 常规<a href="#工具--设置--常规"><span>#</span></a></h3><div><div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>启动</span></div></div><div><div><div>2</div></div><div><span>☑ 只启动一个 KeePassXC 实例</span></div></div><div><div><div>3</div></div><div><span>☑ 系统启动时自动启动 KeePassXC</span></div></div><div><div><div>4</div></div><div><span>☑ 记住以前使用的数据库</span></div></div><div><div><div>5</div></div><div><span>☑ 启动时加载以前打开的数据库</span></div></div><div><div><div>6</div></div><div><span>☑ 解锁数据库后最小化窗口</span></div></div><div><div><div>7</div></div><div><span>☑ 每周在应用程序启动时检查更新</span></div></div><div><div><div>8</div></div><div><span>☐ 检查更新时包含 Beta 版本</span></div></div><div><div><div>9</div></div><div>
</div></div><div><div><div>10</div></div><div><span>文件管理</span></div></div><div><div><div>11</div></div><div><span>☑ 修改后自动保存</span></div></div><div><div><div>12</div></div><div><span>☑ 锁定数据库时自动保存</span></div></div><div><div><div>13</div></div><div><span>☑ 锁定数据库时，自动保存非数据更改</span></div></div><div><div><div>14</div></div><div><span>☑ 有外部修改时自动重新加载数据库</span></div></div><div><div><div>15</div></div><div><span>☑ 保存前备份数据库文件（可选但推荐）</span></div></div><div><div><div>16</div></div><div>
</div></div><div><div><div>17</div></div><div><span>用户界面</span></div></div><div><div><div>18</div></div><div><span>☑ 显示任务栏图标</span></div></div><div><div><div>19</div></div><div><span>☑ 将窗口最小化至任务栏</span></div></div><div><div><div>20</div></div><div><span>☑ 最小化而不是退出应用程序</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div></section><section><h3>工具 → 设置 → 安全<a href="#工具--设置--安全"><span>#</span></a></h3><div><div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>超时</span></div></div><div><div><div>2</div></div><div><span>在多久后清空剪贴板：15 秒</span></div></div><div><div><div>3</div></div><div><span>在闲置多久后锁定数据库：900 秒</span></div></div><div><div><div>4</div></div><div>
</div></div><div><div><div>5</div></div><div><span>便利性 / 锁定选项</span></div></div><div><div><div>6</div></div><div><span>☑ 启用数据库快速解锁（Touch ID / Windows Hello）</span></div></div><div><div><div>7</div></div><div><span>☑ 系统锁定或合上盖子时锁定数据库</span></div></div><div><div><div>8</div></div><div><span>☑ 切换用户时锁定数据库</span></div></div><div><div><div>9</div></div><div><span>☐ 在最小化窗口后锁定数据库</span></div></div><div><div><div>10</div></div><div>
</div></div><div><div><div>11</div></div><div><span>隐私</span></div></div><div><div><div>12</div></div><div><span>☑ 编辑密码时隐藏密码</span></div></div><div><div><div>13</div></div><div><span>☑ 在条目预览面板中隐藏密码</span></div></div><div><div><div>14</div></div><div><span>☑ 在条目预览面板隐藏 TOTP</span></div></div><div><div><div>15</div></div><div><span>☑ 在条目预览面板隐藏备注</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div></section><section><h3>工具 → 设置 → 浏览器集成<a href="#工具--设置--浏览器集成"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>☑ 启用浏览器集成</span></div></div><div><div><div>2</div></div><div><span>☑ Google Chrome（如果使用）</span></div></div><div><div><div>3</div></div><div><span>☑ Edge（如果使用）</span></div></div><div><div><div>4</div></div><div><span>☑ 如果数据库已锁定，则请求解锁</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>数据库<a href="#数据库"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>KDBX 4</span></div></div><div><div><div>2</div></div><div><span>AES-256</span></div></div><div><div><div>3</div></div><div><span>Argon2id</span></div></div><div><div><div>4</div></div><div><span>KDF 基准约 1 秒</span></div></div><div><div><div>5</div></div><div>
</div></div><div><div><div>6</div></div><div><span>☑ 回收站</span></div></div><div><div><div>7</div></div><div><span>☑ 压缩</span></div></div><div><div><div>8</div></div><div><span>保留合理数量的历史记录</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>推荐工作方式<a href="#推荐工作方式"><span>#</span></a></h3><div><div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>网页登录</span></div></div><div><div><div>2</div></div><div><span>→ KeePassXC-Browser</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span>桌面登录窗口</span></div></div><div><div><div>5</div></div><div><span>→ Auto-Type</span></div></div><div><div><div>6</div></div><div>
</div></div><div><div><div>7</div></div><div><span>动态验证码</span></div></div><div><div><div>8</div></div><div><span>→ KeePassXC TOTP</span></div></div><div><div><div>9</div></div><div>
</div></div><div><div><div>10</div></div><div><span>Git / VPS</span></div></div><div><div><div>11</div></div><div><span>→ KeePassXC + Windows OpenSSH Agent</span></div></div><div><div><div>12</div></div><div>
</div></div><div><div><div>13</div></div><div><span>同步</span></div></div><div><div><div>14</div></div><div><span>→ KDBX 放带版本历史的同步盘</span></div></div><div><div><div>15</div></div><div>
</div></div><div><div><div>16</div></div><div><span>备份</span></div></div><div><div><div>17</div></div><div><span>→ 额外离线副本</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div></section></section><section><h2>24. 当前版本说明<a href="#24-当前版本说明"><span>#</span></a></h2><p>本文基于：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>KeePassXC 2.7.12</span></div></div><div><div><div>2</div></div><div><span>简体中文</span></div></div><div><div><div>3</div></div><div><span>Windows</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>如果以后升级到 2.8.x 或更高版本，菜单结构和中文翻译可能变化，应重新核对实际软件界面。</p></section><section><h2>参考依据<a href="#参考依据"><span>#</span></a></h2><ul>
<li><a href="https://keepassxc.org/docs/" target="_blank">KeePassXC Documentation</a></li>
<li><a href="https://keepassxc.org/docs/KeePassXC_UserGuide.html" target="_blank">KeePassXC User Guide</a></li>
<li><a href="https://keepassxc.org/docs/KeePassXC_GettingStarted.html#_setup_browser_integration" target="_blank">KeePassXC Getting Started：Browser Integration</a></li>
<li><a href="https://keepassxc.org/docs/KeePassXC_UserGuide.html#_setup_ssh_agent" target="_blank">KeePassXC User Guide：SSH Agent</a></li>
<li><a href="https://github.com/keepassxreboot/keepassxc" target="_blank">KeePassXC GitHub Repository</a></li>
<li>KeePassXC 2.7.12 官方简体中文翻译文件</li>
<li>KeePassXC 2.7.12 Release Notes</li>
</ul></section></section>]]></content>
    </entry>
    <entry>
      <id>https://yyq-firefly.pages.dev/posts/50-tutorials/%E7%BD%91%E7%BB%9C%E4%B8%8E%E5%9F%9F%E5%90%8D/%E7%BE%8E%E5%9B%BD-vps-%E6%90%AD%E5%BB%BA-ai-%E4%B8%93%E7%94%A8%E5%87%BA%E5%8F%A3-xray-reality-%E4%B8%8E-flclash-%E5%88%86%E6%B5%81%E6%95%99%E7%A8%8B/</id>
      <title type="text">用一台美国 VPS 搭建 AI 专用出口：Xray REALITY + FlClash + Mihomo 动态 AI 分流</title>
      <published>2026-09-11T00:00:00.000Z</published>
      <updated>2026-09-17T00:00:00.000Z</updated>
      <author><name>YYQ</name></author>
      <link rel="alternate" href="https://yyq-firefly.pages.dev/posts/50-tutorials/%E7%BD%91%E7%BB%9C%E4%B8%8E%E5%9F%9F%E5%90%8D/%E7%BE%8E%E5%9B%BD-vps-%E6%90%AD%E5%BB%BA-ai-%E4%B8%93%E7%94%A8%E5%87%BA%E5%8F%A3-xray-reality-%E4%B8%8E-flclash-%E5%88%86%E6%B5%81%E6%95%99%E7%A8%8B/"/>
      <summary type="text"></summary>
      <content type="html"><![CDATA[<section><h1>用一台美国 VPS 搭建 AI 专用出口：Xray REALITY + FlClash + Mihomo 动态 AI 分流<a href="#用一台美国-vps-搭建-ai-专用出口xray-reality--flclash--mihomo-动态-ai-分流"><span>#</span></a></h1><div><div><div></div><div>这篇教程解决什么问题</div></div><div><p>用一台 Debian VPS 自建 <strong>VLESS + REALITY + Vision</strong> 出口，并在 Windows / Android 的 <strong>FlClash（Mihomo）</strong> 中做精细分流：</p><ul>
<li>ChatGPT / Claude / Gemini / Grok 以及 Cursor、Copilot、Perplexity、OpenRouter 等海外 AI 服务走固定 VPS；</li>
<li>普通网站继续走原来的机场/代理；</li>
<li>Android 上用 App 包名兜底，避免 ChatGPT、Claude、Gemini、Grok 的 Sentry、Datadog、NTP 等辅助请求漏到其他出口；</li>
<li>使用社区维护的 <code>category-ai-!cn</code> 动态规则集，减少手工维护几十个域名；</li>
<li>VPS 仍保留为“机场故障时的手动应急出口”，但不参加机场自动测速组。</li>
</ul><p>本文是<strong>已实际跑通过的阶段性方案</strong>整理版。为了可以公开发布，所有真实 IP、SSH 端口、UUID、REALITY 私钥/公钥、Short ID、机场节点名、订阅地址等均已替换为占位符。</p></div></div><p>服务器密钥登录和关闭密码认证的后续步骤见：<a href="/posts/50-Tutorials/%E7%BD%91%E7%BB%9C%E4%B8%8E%E5%9F%9F%E5%90%8D/Debian%20SSH%20%E5%AF%86%E9%92%A5%E7%99%BB%E5%BD%95%E6%8E%92%E9%9A%9C%E4%B8%8E%E5%AE%89%E5%85%A8%E5%8A%A0%E5%9B%BA/">Debian SSH 密钥登录排障与安全加固</a>。</p><hr /><section><h2>0. 先看最终架构<a href="#0-先看最终架构"><span>#</span></a></h2><div><div><div><div><span></span></div><div><span><p>AI App 包名</p></span></div><div><span><p>category-ai-!cn</p></span></div><div><span><p>普通国外网站</p></span></div><div><span><p>国内 / 内网</p></span></div><div><span></span></div><div><span></span></div><div><span></span></div><div><span><p>Windows / Android</p></span></div><div><span><p>FlClash / Mihomo</p></span></div><div><span><p>AI 专线策略组</p></span></div><div><span><p>机场主策略组</p></span></div><div><span><p>DIRECT</p></span></div><div><span><p>VLESS + REALITY + Vision</p></span></div><div><span><p>美国 VPS</p></span></div><div><span><p>ChatGPT / Claude / Gemini / Grok / Cursor / Copilot...</p></span></div>
</div><div><div><span></span></div><div><span><p>AI App 包名</p></span></div><div><span><p>category-ai-!cn</p></span></div><div><span><p>普通国外网站</p></span></div><div><span><p>国内 / 内网</p></span></div><div><span></span></div><div><span></span></div><div><span></span></div><div><span><p>Windows / Android</p></span></div><div><span><p>FlClash / Mihomo</p></span></div><div><span><p>AI 专线策略组</p></span></div><div><span><p>机场主策略组</p></span></div><div><span><p>DIRECT</p></span></div><div><span><p>VLESS + REALITY + Vision</p></span></div><div><span><p>美国 VPS</p></span></div><div><span><p>ChatGPT / Claude / Gemini / Grok / Cursor / Copilot...</p></span></div>
</div></div></div><p>核心思想不是“全局都走 VPS”，而是：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>AI / AI 编程工具</span></div></div><div><div><div>2</div></div><div><span><span>        </span></span><span>↓</span></div></div><div><div><div>3</div></div><div><span>固定 VPS 出口</span></div></div><div><div><div>4</div></div><div>
</div></div><div><div><div>5</div></div><div><span>普通外网</span></div></div><div><div><div>6</div></div><div><span><span>        </span></span><span>↓</span></div></div><div><div><div>7</div></div><div><span>机场</span></div></div><div><div><div>8</div></div><div>
</div></div><div><div><div>9</div></div><div><span>国内 / 内网</span></div></div><div><div><div>10</div></div><div><span><span>        </span></span><span>↓</span></div></div><div><div><div>11</div></div><div><span>DIRECT</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>这样做的好处是：需要固定出口的 AI 服务尽量保持一致，而视频、下载、GitHub Release、普通网页等流量不会无意义占用 VPS 带宽。</p><hr /></section><section><h2>1. 隐私与安全：公开教程前一定先做脱敏<a href="#1-隐私与安全公开教程前一定先做脱敏"><span>#</span></a></h2><p>下面这些内容<strong>绝对不要发布到 GitHub、论坛、博客、截图或群聊</strong>：</p>

<table><thead><tr><th>内容</th><th>是否可公开</th></tr></thead><tbody><tr><td>VPS 厂商、套餐名称</td><td>一般可以</td></tr><tr><td>操作系统、CPU、内存</td><td>可以</td></tr><tr><td>VPS 真实公网 IP</td><td>建议隐藏</td></tr><tr><td>SSH 真实端口</td><td>建议隐藏</td></tr><tr><td>VLESS UUID</td><td>不公开</td></tr><tr><td>REALITY <code>privateKey</code></td><td><strong>绝对不公开</strong></td></tr><tr><td>REALITY 客户端公钥 / <code>public-key</code></td><td>不建议公开</td></tr><tr><td><code>short-id</code></td><td>不建议公开</td></tr><tr><td>VLESS 分享链接 / 二维码</td><td><strong>等同访问凭据，不公开</strong></td></tr><tr><td>机场订阅地址</td><td><strong>绝对不公开</strong></td></tr><tr><td>机场节点名、套餐信息</td><td>没必要公开</td></tr><tr><td>API Key / Cookie / Token</td><td><strong>绝对不公开</strong></td></tr></tbody></table><p>本文统一使用：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>REPLACE_VPS_IP</span></div></div><div><div><div>2</div></div><div><span>REPLACE_SSH_PORT</span></div></div><div><div><div>3</div></div><div><span>REPLACE_UUID</span></div></div><div><div><div>4</div></div><div><span>REPLACE_PRIVATE_KEY</span></div></div><div><div><div>5</div></div><div><span>REPLACE_CLIENT_PUBLIC_KEY</span></div></div><div><div><div>6</div></div><div><span>REPLACE_SHORT_ID</span></div></div></code></pre><div><div></div><div></div></div></figure></div><div><div><div></div><div>Warning</div></div><div><p>REALITY 的服务端 <code>PrivateKey</code> <strong>只存在 VPS 服务端</strong>。不要放进 FlClash，不要放进二维码，也不要为了求助把它截图发出来。</p></div></div><hr /></section><section><h2>2. 环境说明<a href="#2-环境说明"><span>#</span></a></h2><p>本文以以下环境为例：</p><ul>
<li>VPS：美国节点；</li>
<li>系统：Debian 12；</li>
<li>架构：x86_64 / amd64；</li>
<li>内存：1 GB 也可运行；</li>
<li>Xray：官方安装脚本；</li>
<li>协议：VLESS + REALITY + XTLS Vision；</li>
<li>公网入口：TCP 443；</li>
<li>Windows / Android 客户端：FlClash；</li>
<li>FlClash 核心：Mihomo。</li>
</ul><p>如果你的 VPS 已经跑着 Docker、Nginx、Caddy、面板或其他服务，<strong>不要直接照抄防火墙和 443 配置</strong>，先确认端口没有冲突：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>ss</span><span> </span><span>-lntup</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section></section>
<section><h1>第一部分：VPS 基础配置<a href="#第一部分vps-基础配置"><span>#</span></a></h1><section><h2>3. 第一次登录后先做盘点<a href="#3-第一次登录后先做盘点"><span>#</span></a></h2><p>以下命令在 <strong>VPS 的 Bash/SSH 终端</strong>执行：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>cat</span><span> </span><span>/etc/os-release</span></div></div><div><div><div>2</div></div><div><span>uname</span><span> </span><span>-r</span></div></div><div><div><div>3</div></div><div><span>uname</span><span> </span><span>-m</span></div></div><div><div><div>4</div></div><div><span>free</span><span> </span><span>-h</span></div></div><div><div><div>5</div></div><div><span>df</span><span> </span><span>-hT</span><span> </span><span>/</span></div></div><div><div><div>6</div></div><div><span>swapon</span><span> </span><span>--show</span></div></div><div><div><div>7</div></div><div><span>ip</span><span> </span><span>-br</span><span> </span><span>addr</span></div></div><div><div><div>8</div></div><div><span>ip</span><span> </span><span>route</span></div></div><div><div><div>9</div></div><div><span>ss</span><span> </span><span>-lntup</span></div></div><div><div><div>10</div></div><div><span>timedatectl</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>重点确认：</p><ol>
<li>系统确实是你预期的 Debian；</li>
<li>架构是不是 <code>x86_64</code>；</li>
<li>443 是否已被其他程序占用；</li>
<li>当前有没有 Swap；</li>
<li>时间是否正确。</li>
</ol><hr /></section><section><h2>4. 更新 Debian 与安装基础工具<a href="#4-更新-debian-与安装基础工具"><span>#</span></a></h2><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>apt</span><span> </span><span>update</span></div></div><div><div><div>2</div></div><div><span>apt</span><span> </span><span>upgrade</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span>apt</span><span> </span><span>install</span><span> </span><span>ca-certificates</span><span> </span><span>curl</span><span> </span><span>wget</span><span> </span><span>nano</span><span> </span><span>unzip</span><span> </span><span>jq</span><span> </span><span>openssl</span><span> </span><span>sudo</span><span> </span><span>ufw</span><span> </span><span>\</span></div></div><div><div><div>5</div></div><div><span>  </span><span>htop</span><span> </span><span>mtr-tiny</span><span> </span><span>dnsutils</span><span> </span><span>iproute2</span><span> </span><span>iputils-ping</span><span> </span><span>systemd-timesyncd</span><span> </span><span>\</span></div></div><div><div><div>6</div></div><div><span>  </span><span>unattended-upgrades</span><span> </span><span>debian-security-support</span></div></div><div><div><div>7</div></div><div>
</div></div><div><div><div>8</div></div><div><span>systemctl</span><span> </span><span>enable</span><span> </span><span>--now</span><span> </span><span>systemd-timesyncd</span></div></div><div><div><div>9</div></div><div><span>timedatectl</span><span> </span><span>status</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>如果系统升级涉及内核，完成更新后可以安排一次重启：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>reboot</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>重连后确认：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>uname</span><span> </span><span>-r</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section><section><h2>5. 1 GB 小内存 VPS：没有 Swap 时加 1 GB<a href="#5-1-gb-小内存-vps没有-swap-时加-1-gb"><span>#</span></a></h2><p>先检查：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>swapon</span><span> </span><span>--show</span></div></div><div><div><div>2</div></div><div><span>df</span><span> </span><span>-hT</span><span> </span><span>/</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>只有没有 Swap 时才执行</strong>：</p><div><div><div><figure><figcaption><span></span><span>Terminal window</span><span>展开</span><span>收起</span></figcaption><pre><code><div><div><div>1</div></div><div><span>if</span><span><span> [ </span><span>-z</span><span> </span></span><span>"$(</span><span>swapon</span><span> </span><span>--noheadings</span><span> </span><span>--show</span><span>)"</span><span> ] &amp;&amp; </span><span>\</span></div></div><div><div><div>2</div></div><div><span><span>   </span></span><span>[ </span><span>!</span><span> </span><span>-e</span><span> /swapfile ] &amp;&amp; ! </span><span>grep</span><span> </span><span>-qE</span><span> </span><span>'^/swapfile[[:space:]]'</span><span> </span><span>/etc/fstab</span><span>; </span><span>then</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span>  </span><span>if</span><span> </span><span>fallocate</span><span> </span><span>-l</span><span> </span><span>1G</span><span> </span><span>/swapfile</span><span> &amp;&amp; </span><span>\</span></div></div><div><div><div>5</div></div><div><span>     </span><span>chmod</span><span> </span><span>600</span><span> </span><span>/swapfile</span><span> &amp;&amp; </span><span>\</span></div></div><div><div><div>6</div></div><div><span>     </span><span>mkswap</span><span> </span><span>/swapfile</span><span> &amp;&amp; </span><span>\</span></div></div><div><div><div>7</div></div><div><span>     </span><span>swapon</span><span> </span><span>/swapfile</span><span>; </span><span>then</span></div></div><div><div><div>8</div></div><div>
</div></div><div><div><div>9</div></div><div><span>    </span><span>printf</span><span> </span><span>'/swapfile none swap sw 0 0\n'</span><span> &gt;&gt; </span><span>/etc/fstab</span></div></div><div><div><div>10</div></div><div><span>    </span><span>printf</span><span> </span><span>'vm.swappiness=10\n'</span><span> &gt; </span><span>/etc/sysctl.d/90-ai-memory.conf</span></div></div><div><div><div>11</div></div><div><span>    </span><span>sysctl</span><span> </span><span>-p</span><span> </span><span>/etc/sysctl.d/90-ai-memory.conf</span></div></div><div><div><div>12</div></div><div><span>    </span><span>swapon</span><span> </span><span>--show</span></div></div><div><div><div>13</div></div><div><span>  </span><span>else</span></div></div><div><div><div>14</div></div><div><span>    </span><span>echo</span><span> </span><span>'Swap 创建失败，请检查文件系统和剩余空间。'</span></div></div><div><div><div>15</div></div><div><span>  </span><span>fi</span></div></div><div><div><div>16</div></div><div><span>else</span></div></div><div><div><div>17</div></div><div><span>  </span><span>echo</span><span> </span><span>'检测到已有 Swap 或旧配置，跳过。'</span></div></div><div><div><div>18</div></div><div><span>fi</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div><p>这个配置的目的不是让 1 GB VPS 变成 2 GB 内存，而是避免某些瞬时内存峰值直接触发 OOM。</p><hr /></section><section><h2>6. UFW：只开放 SSH 与 Xray 443<a href="#6-ufw只开放-ssh-与-xray-443"><span>#</span></a></h2><div><div><div></div><div>Danger</div></div><div><p><strong>先确认 VPS 厂商控制台/VNC/救援入口可用，并确认真实 SSH 端口。</strong>
写错 SSH 规则可能把自己锁在服务器外面。</p></div></div><p>查看当前状态：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>ufw</span><span> </span><span>status</span><span> </span><span>verbose</span></div></div><div><div><div>2</div></div><div><span>ss</span><span> </span><span>-lntp</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>将 <code>REPLACE_SSH_PORT</code> 换成你自己的 SSH 端口：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>ufw</span><span> </span><span>default</span><span> </span><span>deny</span><span> </span><span>incoming</span></div></div><div><div><div>2</div></div><div><span>ufw</span><span> </span><span>default</span><span> </span><span>allow</span><span> </span><span>outgoing</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span>ufw</span><span> </span><span>allow</span><span> </span><span>REPLACE_SSH_PORT/tcp</span><span> </span><span>comment</span><span> </span><span>'SSH management'</span></div></div><div><div><div>5</div></div><div><span>ufw</span><span> </span><span>allow</span><span> </span><span>443/tcp</span><span> </span><span>comment</span><span> </span><span>'Xray REALITY'</span></div></div><div><div><div>6</div></div><div>
</div></div><div><div><div>7</div></div><div><span>ufw</span><span> </span><span>enable</span></div></div><div><div><div>8</div></div><div><span>ufw</span><span> </span><span>status</span><span> </span><span>numbered</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>这套方案不需要把本地代理端口、数据库端口或未来的监控面板端口直接暴露到公网。</p><hr /></section><section><h2>7. 限制 systemd 日志体积<a href="#7-限制-systemd-日志体积"><span>#</span></a></h2><p>小硬盘 VPS 没必要让日志无限增长：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>mkdir</span><span> </span><span>-p</span><span> </span><span>/etc/systemd/journald.conf.d</span></div></div><div><div><div>2</div></div><div>
</div></div><div><div><div>3</div></div><div><span>cat</span><span> &gt; </span><span>/etc/systemd/journald.conf.d/90-ai-vps.conf</span><span> &lt;&lt;</span><span>'EOF'</span></div></div><div><div><div>4</div></div><div><span>[Journal]</span></div></div><div><div><div>5</div></div><div><span>SystemMaxUse=100M</span></div></div><div><div><div>6</div></div><div><span>RuntimeMaxUse=50M</span></div></div><div><div><div>7</div></div><div><span>MaxRetentionSec=7day</span></div></div><div><div><div>8</div></div><div><span>EOF</span></div></div><div><div><div>9</div></div><div>
</div></div><div><div><div>10</div></div><div><span>systemctl</span><span> </span><span>restart</span><span> </span><span>systemd-journald</span></div></div><div><div><div>11</div></div><div><span>journalctl</span><span> </span><span>--disk-usage</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>正常运行时，Xray 日志保持 <code>warning</code> / <code>error</code> 即可。排障时可以临时开 debug，但解决后记得恢复。</p><hr /></section></section>
<section><h1>第二部分：安装 Xray + REALITY<a href="#第二部分安装-xray--reality"><span>#</span></a></h1><section><h2>8. 使用 Xray 官方安装器<a href="#8-使用-xray-官方安装器"><span>#</span></a></h2><p>不要从不明网盘或“一键整合包”下载安装。</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>install</span><span> </span><span>-d</span><span> </span><span>-m</span><span> </span><span>700</span><span> </span><span>/opt/ai-vps-setup</span></div></div><div><div><div>2</div></div><div><span>cd</span><span> </span><span>/opt/ai-vps-setup</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span>curl</span><span> </span><span>-fL</span><span> </span><span>--proto</span><span> </span><span>'=https'</span><span> </span><span>--tlsv1.2</span><span> </span><span>\</span></div></div><div><div><div>5</div></div><div><span>  </span><span>https://raw.githubusercontent.com/XTLS/Xray-install/main/install-release.sh</span><span> </span><span>\</span></div></div><div><div><div>6</div></div><div><span>  </span><span>-o</span><span> </span><span>install-xray.sh</span></div></div><div><div><div>7</div></div><div>
</div></div><div><div><div>8</div></div><div><span>less</span><span> </span><span>install-xray.sh</span></div></div><div><div><div>9</div></div><div><span>sha256sum</span><span> </span><span>install-xray.sh</span></div></div><div><div><div>10</div></div><div><span>bash</span><span> </span><span>install-xray.sh</span><span> </span><span>help</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>安装时建议先查看 Xray 官方 Releases，再固定一个你确认过的稳定版本。</p><p>示例：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>bash</span><span> </span><span>install-xray.sh</span><span> </span><span>install</span><span> </span><span>--version</span><span> </span><span>REPLACE_XRAY_VERSION</span><span> </span><span>--without-geodata</span></div></div><div><div><div>2</div></div><div>
</div></div><div><div><div>3</div></div><div><span>/usr/local/bin/xray</span><span> </span><span>version</span></div></div><div><div><div>4</div></div><div><span>systemctl</span><span> </span><span>cat</span><span> </span><span>xray</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>本文的显式分流不依赖 Xray 的 geoip/geosite 文件，因此服务端可以不安装 geodata。</p><hr /></section><section><h2>9. 生成 VLESS / REALITY 参数<a href="#9-生成-vless--reality-参数"><span>#</span></a></h2><p>在 VPS 上执行：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>/usr/local/bin/xray</span><span> </span><span>uuid</span></div></div><div><div><div>2</div></div><div><span>/usr/local/bin/xray</span><span> </span><span>x25519</span></div></div><div><div><div>3</div></div><div><span>openssl</span><span> </span><span>rand</span><span> </span><span>-hex</span><span> </span><span>8</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>你会得到几类信息：</p>

<table><thead><tr><th>参数</th><th>用途</th></tr></thead><tbody><tr><td>UUID</td><td>服务端和客户端都要填</td></tr><tr><td>PrivateKey</td><td><strong>只放服务端</strong></td></tr><tr><td>Password / 旧版显示的 PublicKey</td><td>客户端使用；Mihomo 字段仍叫 <code>public-key</code></td></tr><tr><td>Short ID</td><td>服务端 <code>shortIds</code> 与客户端 <code>short-id</code> 对应</td></tr></tbody></table><p>建议立即存进密码管理器，不要靠聊天记录保存。</p><hr /></section><section><h2>10. REALITY 目标域名不要照抄，必须先测试<a href="#10-reality-目标域名不要照抄必须先测试"><span>#</span></a></h2><p>REALITY 不是“随便填一个大网站域名”。</p><p>官方文档中，<code>target</code> 是服务端必填项，<code>serverNames</code> 通常应与目标返回证书可接受的 SNI 保持一致。</p><p>先测试候选：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>/usr/local/bin/xray</span><span> </span><span>tls</span><span> </span><span>ping</span><span> </span><span>www.bing.com</span></div></div><div><div><div>2</div></div><div>
</div></div><div><div><div>3</div></div><div><span>curl</span><span> </span><span>-I</span><span> </span><span>--http2</span><span> </span><span>\</span></div></div><div><div><div>4</div></div><div><span>  </span><span>--connect-timeout</span><span> </span><span>10</span><span> </span><span>\</span></div></div><div><div><div>5</div></div><div><span>  </span><span>--max-time</span><span> </span><span>20</span><span> </span><span>\</span></div></div><div><div><div>6</div></div><div><span>  </span><span>https://www.bing.com/</span></div></div><div><div><div>7</div></div><div>
</div></div><div><div><div>8</div></div><div><span>openssl</span><span> </span><span>s_client</span><span> </span><span>\</span></div></div><div><div><div>9</div></div><div><span>  </span><span>-connect</span><span> </span><span>www.bing.com:443</span><span> </span><span>\</span></div></div><div><div><div>10</div></div><div><span>  </span><span>-servername</span><span> </span><span>www.bing.com</span><span> </span><span>\</span></div></div><div><div><div>11</div></div><div><span>  </span><span>-tls1_3</span><span> </span><span>\</span></div></div><div><div><div>12</div></div><div><span>  </span><span>-alpn</span><span> </span><span>h2</span><span> </span><span>\</span></div></div><div><div><div>13</div></div><div><span><span>  </span></span><span>&lt;</span><span>/dev/null</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>本文实际排障过程中，某个最初候选在客户端 REALITY 握手阶段表现不稳定，换成经过 VPS 实测正常的 <code>www.bing.com</code> 后恢复。因此：</p><blockquote><p><strong>不要迷信“网上大家都用的 SNI”。你的 VPS 能稳定握手才是标准。</strong></p></blockquote><p>如果你选择其他域名：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>服务端 target      → 域名:443</span></div></div><div><div><div>2</div></div><div><span>服务端 serverNames → 域名</span></div></div><div><div><div>3</div></div><div><span>客户端 servername  → 同一个域名</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section><section><h2>11. Xray 服务端配置模板<a href="#11-xray-服务端配置模板"><span>#</span></a></h2><p>编辑：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>nano</span><span> </span><span>/usr/local/etc/xray/config.json</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>可使用下面的公开占位模板：</p><div><div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>{</span></div></div><div><div><div>2</div></div><div><span>  </span><span>"log"</span><span>: {</span></div></div><div><div><div>3</div></div><div><span>    </span><span>"loglevel"</span><span>: </span><span>"warning"</span></div></div><div><div><div>4</div></div><div><span><span>  </span></span><span>},</span></div></div><div><div><div>5</div></div><div>
</div></div><div><div><div>6</div></div><div><span>  </span><span>"inbounds"</span><span>: [</span></div></div><div><div><div>7</div></div><div><span><span>    </span></span><span>{</span></div></div><div><div><div>8</div></div><div><span>      </span><span>"listen"</span><span>: </span><span>"0.0.0.0"</span><span>,</span></div></div><div><div><div>9</div></div><div><span>      </span><span>"port"</span><span>: </span><span>443</span><span>,</span></div></div><div><div><div>10</div></div><div><span>      </span><span>"protocol"</span><span>: </span><span>"vless"</span><span>,</span></div></div><div><div><div>11</div></div><div>
</div></div><div><div><div>12</div></div><div><span>      </span><span>"settings"</span><span>: {</span></div></div><div><div><div>13</div></div><div><span>        </span><span>"clients"</span><span>: [</span></div></div><div><div><div>14</div></div><div><span><span>          </span></span><span>{</span></div></div><div><div><div>15</div></div><div><span>            </span><span>"id"</span><span>: </span><span>"REPLACE_UUID"</span><span>,</span></div></div><div><div><div>16</div></div><div><span>            </span><span>"flow"</span><span>: </span><span>"xtls-rprx-vision"</span></div></div><div><div><div>17</div></div><div><span><span>          </span></span><span>}</span></div></div><div><div><div>18</div></div><div><span><span>        </span></span><span>],</span></div></div><div><div><div>19</div></div><div><span>        </span><span>"decryption"</span><span>: </span><span>"none"</span></div></div><div><div><div>20</div></div><div><span><span>      </span></span><span>},</span></div></div><div><div><div>21</div></div><div>
</div></div><div><div><div>22</div></div><div><span>      </span><span>"streamSettings"</span><span>: {</span></div></div><div><div><div>23</div></div><div><span>        </span><span>"network"</span><span>: </span><span>"raw"</span><span>,</span></div></div><div><div><div>24</div></div><div><span>        </span><span>"security"</span><span>: </span><span>"reality"</span><span>,</span></div></div><div><div><div>25</div></div><div>
</div></div><div><div><div>26</div></div><div><span>        </span><span>"realitySettings"</span><span>: {</span></div></div><div><div><div>27</div></div><div><span>          </span><span>"show"</span><span>: </span><span>false</span><span>,</span></div></div><div><div><div>28</div></div><div><span>          </span><span>"target"</span><span>: </span><span>"www.bing.com:443"</span><span>,</span></div></div><div><div><div>29</div></div><div><span>          </span><span>"xver"</span><span>: </span><span>0</span><span>,</span></div></div><div><div><div>30</div></div><div>
</div></div><div><div><div>31</div></div><div><span>          </span><span>"serverNames"</span><span>: [</span></div></div><div><div><div>32</div></div><div><span>            </span><span>"www.bing.com"</span></div></div><div><div><div>33</div></div><div><span><span>          </span></span><span>],</span></div></div><div><div><div>34</div></div><div>
</div></div><div><div><div>35</div></div><div><span>          </span><span>"privateKey"</span><span>: </span><span>"REPLACE_PRIVATE_KEY"</span><span>,</span></div></div><div><div><div>36</div></div><div>
</div></div><div><div><div>37</div></div><div><span>          </span><span>"shortIds"</span><span>: [</span></div></div><div><div><div>38</div></div><div><span>            </span><span>"REPLACE_SHORT_ID"</span></div></div><div><div><div>39</div></div><div><span><span>          </span></span><span>]</span></div></div><div><div><div>40</div></div><div><span><span>        </span></span><span>}</span></div></div><div><div><div>41</div></div><div><span><span>      </span></span><span>}</span></div></div><div><div><div>42</div></div><div><span><span>    </span></span><span>}</span></div></div><div><div><div>43</div></div><div><span><span>  </span></span><span>],</span></div></div><div><div><div>44</div></div><div>
</div></div><div><div><div>45</div></div><div><span>  </span><span>"outbounds"</span><span>: [</span></div></div><div><div><div>46</div></div><div><span><span>    </span></span><span>{</span></div></div><div><div><div>47</div></div><div><span>      </span><span>"protocol"</span><span>: </span><span>"freedom"</span><span>,</span></div></div><div><div><div>48</div></div><div><span>      </span><span>"tag"</span><span>: </span><span>"direct"</span></div></div><div><div><div>49</div></div><div><span><span>    </span></span><span>},</span></div></div><div><div><div>50</div></div><div><span><span>    </span></span><span>{</span></div></div><div><div><div>51</div></div><div><span>      </span><span>"protocol"</span><span>: </span><span>"blackhole"</span><span>,</span></div></div><div><div><div>52</div></div><div><span>      </span><span>"tag"</span><span>: </span><span>"block"</span></div></div><div><div><div>53</div></div><div><span><span>    </span></span><span>}</span></div></div><div><div><div>54</div></div><div><span><span>  </span></span><span>]</span></div></div><div><div><div>55</div></div><div><span>}</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div><p>检查配置：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>/usr/local/bin/xray</span><span> </span><span>run</span><span> </span><span>\</span></div></div><div><div><div>2</div></div><div><span>  </span><span>-test</span><span> </span><span>\</span></div></div><div><div><div>3</div></div><div><span>  </span><span>-config</span><span> </span><span>/usr/local/etc/xray/config.json</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>没有错误后：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>systemctl</span><span> </span><span>enable</span><span> </span><span>xray</span></div></div><div><div><div>2</div></div><div><span>systemctl</span><span> </span><span>restart</span><span> </span><span>xray</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span>systemctl</span><span> </span><span>status</span><span> </span><span>xray</span><span> </span><span>--no-pager</span></div></div><div><div><div>5</div></div><div><span>ss</span><span> </span><span>-lntp</span><span> | </span><span>grep</span><span> </span><span>':443'</span></div></div><div><div><div>6</div></div><div><span>journalctl</span><span> </span><span>-u</span><span> </span><span>xray</span><span> </span><span>-n</span><span> </span><span>50</span><span> </span><span>--no-pager</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>Windows 可以先只验证 TCP 端口：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>Test-NetConnection</span><span><span> REPLACE_VPS_IP </span><span>-</span><span>Port </span></span><span>443</span></div></div></code></pre><div><div></div><div></div></div></figure></div><blockquote><p>TCP 443 能连上只代表“端口通”，不能证明 UUID、REALITY 公钥、Short ID、SNI 都正确。</p></blockquote><hr /></section></section>
<section><h1>第三部分：FlClash 添加 VPS 节点<a href="#第三部分flclash-添加-vps-节点"><span>#</span></a></h1><section><h2>12. 为什么使用 FlClash<a href="#12-为什么使用-flclash"><span>#</span></a></h2><p>FlClash 是基于 Clash.Meta / Mihomo 的多平台客户端，可以在 Windows、Android 等平台使用。</p><p>本文不要求你把原机场订阅扔掉，而是：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>原机场订阅</span></div></div><div><div><div>2</div></div><div><span><span>   </span></span><span>+</span></div></div><div><div><div>3</div></div><div><span>自己注入一条 VLESS REALITY 节点</span></div></div><div><div><div>4</div></div><div><span><span>   </span></span><span>+</span></div></div><div><div><div>5</div></div><div><span>覆写脚本做 AI 分流</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>这样机场更新节点时，不需要手工重新拼一份完整 YAML。</p><hr /></section><section><h2>13. Mihomo / FlClash 的 VLESS REALITY 节点模板<a href="#13-mihomo--flclash-的-vless-reality-节点模板"><span>#</span></a></h2><p>下面这段不是完整配置，而是覆写脚本里要注入的一个节点对象：</p><div><div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>const</span><span> </span><span>VPS_NODE_NAME</span><span> </span><span>=</span><span> </span><span>"AI-VPS"</span><span>;</span></div></div><div><div><div>2</div></div><div>
</div></div><div><div><div>3</div></div><div><span>const</span><span> </span><span>aiVpsProxy</span><span> </span><span>=</span><span> {</span></div></div><div><div><div>4</div></div><div><span>  </span><span>name</span><span>:</span><span> </span><span>VPS_NODE_NAME</span><span>,</span></div></div><div><div><div>5</div></div><div>
</div></div><div><div><div>6</div></div><div><span>  </span><span>type</span><span>:</span><span> </span><span>"vless"</span><span>,</span></div></div><div><div><div>7</div></div><div>
</div></div><div><div><div>8</div></div><div><span>  </span><span>server</span><span>:</span><span> </span><span>"REPLACE_VPS_IP"</span><span>,</span></div></div><div><div><div>9</div></div><div><span>  </span><span>port</span><span>:</span><span> </span><span>443</span><span>,</span></div></div><div><div><div>10</div></div><div>
</div></div><div><div><div>11</div></div><div><span>  </span><span>uuid</span><span>:</span><span> </span><span>"REPLACE_UUID"</span><span>,</span></div></div><div><div><div>12</div></div><div>
</div></div><div><div><div>13</div></div><div><span>  </span><span>network</span><span>:</span><span> </span><span>"tcp"</span><span>,</span></div></div><div><div><div>14</div></div><div><span>  </span><span>tls</span><span>:</span><span> </span><span>true</span><span>,</span></div></div><div><div><div>15</div></div><div><span>  </span><span>udp</span><span>:</span><span> </span><span>true</span><span>,</span></div></div><div><div><div>16</div></div><div>
</div></div><div><div><div>17</div></div><div><span>  </span><span>"packet-encoding"</span><span>:</span><span> </span><span>"xudp"</span><span>,</span></div></div><div><div><div>18</div></div><div><span>  </span><span>flow</span><span>:</span><span> </span><span>"xtls-rprx-vision"</span><span>,</span></div></div><div><div><div>19</div></div><div>
</div></div><div><div><div>20</div></div><div><span>  </span><span>servername</span><span>:</span><span> </span><span>"www.bing.com"</span><span>,</span></div></div><div><div><div>21</div></div><div><span>  </span><span>"client-fingerprint"</span><span>:</span><span> </span><span>"chrome"</span><span>,</span></div></div><div><div><div>22</div></div><div>
</div></div><div><div><div>23</div></div><div><span>  </span><span>"reality-opts"</span><span>:</span><span> {</span></div></div><div><div><div>24</div></div><div><span>    </span><span>"public-key"</span><span>:</span><span> </span><span>"REPLACE_CLIENT_PUBLIC_KEY"</span><span>,</span></div></div><div><div><div>25</div></div><div><span>    </span><span>"short-id"</span><span>:</span><span> </span><span>"REPLACE_SHORT_ID"</span></div></div><div><div><div>26</div></div><div><span><span>  </span></span><span>},</span></div></div><div><div><div>27</div></div><div>
</div></div><div><div><div>28</div></div><div><span>  </span><span>smux</span><span>:</span><span> {</span></div></div><div><div><div>29</div></div><div><span>    </span><span>enabled</span><span>:</span><span> </span><span>false</span></div></div><div><div><div>30</div></div><div><span><span>  </span></span><span>}</span></div></div><div><div><div>31</div></div><div><span>};</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div><p>注意：</p><ul>
<li>Xray 新版 <code>x25519</code> 可能把客户端公钥显示成 <code>Password</code>；</li>
<li>Mihomo 客户端字段仍然叫 <code>public-key</code>；</li>
<li>这里<strong>永远不会出现</strong>服务端 <code>PrivateKey</code>。</li>
</ul><hr /></section></section>
<section><h1>第四部分：AI 动态规则集，而不是手工写几十个域名<a href="#第四部分ai-动态规则集而不是手工写几十个域名"><span>#</span></a></h1><section><h2>14. 为什么不用纯手工域名<a href="#14-为什么不用纯手工域名"><span>#</span></a></h2><p>AI 服务会使用：</p><ul>
<li>主站；</li>
<li>API；</li>
<li>CDN；</li>
<li>登录认证；</li>
<li>上传下载；</li>
<li>遥测；</li>
<li>语音 / WebRTC；</li>
<li>云厂商依赖。</li>
</ul><p>例如一个 ChatGPT App 请求不一定全是 <code>openai.com</code>，可能还会出现 Sentry、Datadog、LiveKit 等。</p><p>如果看到一个域名就手工补一个：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>漏一个 → 加一个</span></div></div><div><div><div>2</div></div><div><span>再漏一个 → 再加一个</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>维护成本会越来越高。</p><p>更好的办法是使用社区持续维护的规则数据，再加少量本地兜底。</p><hr /></section><section><h2>15. 使用 MetaCubeX <code>category-ai-!cn</code><a href="#15-使用-metacubex-category-ai-cn"><span>#</span></a></h2><p>本文选择：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>MetaCubeX/meta-rules-dat</span></div></div><div><div><div>2</div></div><div><span>geo/geosite/category-ai-!cn.mrs</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>这个分类不仅包含：</p><ul>
<li>OpenAI / ChatGPT；</li>
<li>Anthropic / Claude；</li>
<li>Google DeepMind / Gemini；</li>
<li>xAI / Grok；</li>
</ul><p>还会包含部分：</p><ul>
<li>Cursor；</li>
<li>GitHub Copilot；</li>
<li>Perplexity；</li>
<li>OpenRouter；</li>
<li>JetBrains AI；</li>
<li>Windsurf；</li>
<li>Hugging Face；</li>
<li>Poe；</li>
<li>Mistral；</li>
<li>Meta AI；</li>
<li>其他海外 AI 服务。</li>
</ul><p>如果你的目标就是“<strong>海外 AI 统一走这台固定 VPS</strong>”，这比只维护四家域名更省心。</p><p>如果你只想让 ChatGPT / Claude / Gemini / Grok 四家走 VPS，则应改成四个更窄的独立规则集，而不是直接使用整个 <code>category-ai-!cn</code>。</p><hr /></section></section>
<section><h1>第五部分：Android App 包名兜底<a href="#第五部分android-app-包名兜底"><span>#</span></a></h1><section><h2>16. 为什么域名规则还不够<a href="#16-为什么域名规则还不够"><span>#</span></a></h2><p>Android 上 ChatGPT App 可能访问：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>OpenAI 核心域名</span></div></div><div><div><div>2</div></div><div><span>Sentry</span></div></div><div><div><div>3</div></div><div><span>Datadog</span></div></div><div><div><div>4</div></div><div><span>NTP</span></div></div><div><div><div>5</div></div><div><span>其他共享基础设施</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>像 <code>sentry.io</code>、<code>gstatic.com</code> 这种是共享服务，<strong>不能粗暴地把整个根域都塞进 AI 出口</strong>，否则其他 App 也会被误分流。</p><p>Mihomo 在 Android 上可以通过 <code>PROCESS-NAME</code> 匹配应用包名，因此可以直接做 App 级兜底。</p><p>截至本文整理时，四个官方 Android App 包名为：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>PROCESS-NAME,com.openai.chatgpt,AI专线</span></div></div><div><div><div>2</div></div><div><span>PROCESS-NAME,com.anthropic.claude,AI专线</span></div></div><div><div><div>3</div></div><div><span>PROCESS-NAME,com.google.android.apps.bard,AI专线</span></div></div><div><div><div>4</div></div><div><span>PROCESS-NAME,ai.x.grok,AI专线</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>这样：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>ChatGPT App 发出的辅助请求</span></div></div><div><div><div>2</div></div><div><span><span>       </span></span><span>↓</span></div></div><div><div><div>3</div></div><div><span>仍然跟随 AI 专线</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>而普通浏览器访问共享 CDN 时，不会因此被全部拖进 AI VPS。</p><hr /></section></section>
<section><h1>第六部分：一份适合公开分享的 FlClash 覆写脚本<a href="#第六部分一份适合公开分享的-flclash-覆写脚本"><span>#</span></a></h1><section><h2>17. 完整通用版<a href="#17-完整通用版"><span>#</span></a></h2><div><div><div></div><div>Important</div></div><div><p>这份脚本已经去掉了个人机场节点名、个人订阅域名、真实 IP 和密钥。</p><p>使用前至少修改：</p><ul>
<li><code>MAIN_GROUP_NAME</code></li>
<li><code>REPLACE_VPS_IP</code></li>
<li><code>REPLACE_UUID</code></li>
<li><code>REPLACE_CLIENT_PUBLIC_KEY</code></li>
<li><code>REPLACE_SHORT_ID</code></li>
</ul></div></div><div><div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>function</span><span> </span><span>main</span><span><span>(</span><span>config</span><span>) {</span></span></div></div><div><div><div>2</div></div><div><span>  </span><span>// ============================================================</span></div></div><div><div><div>3</div></div><div><span>  </span><span>// 0. 按自己的机场修改</span></div></div><div><div><div>4</div></div><div><span>  </span><span>// ============================================================</span></div></div><div><div><div>5</div></div><div><span>  </span><span>const</span><span> </span><span>MAIN_GROUP_NAME</span><span> </span><span>=</span><span> </span><span>"🚀 节点选择"</span><span>;</span></div></div><div><div><div>6</div></div><div>
</div></div><div><div><div>7</div></div><div><span>  </span><span>const</span><span> </span><span>AI_GROUP_NAME</span><span> </span><span>=</span><span> </span><span>"AI专线"</span><span>;</span></div></div><div><div><div>8</div></div><div><span>  </span><span>const</span><span> </span><span>VPS_NODE_NAME</span><span> </span><span>=</span><span> </span><span>"AI-VPS"</span><span>;</span></div></div><div><div><div>9</div></div><div>
</div></div><div><div><div>10</div></div><div><span>  </span><span>const</span><span> </span><span>VPS_IP</span><span> </span><span>=</span><span> </span><span>"REPLACE_VPS_IP"</span><span>;</span></div></div><div><div><div>11</div></div><div>
</div></div><div><div><div>12</div></div><div><span>  </span><span>// ============================================================</span></div></div><div><div><div>13</div></div><div><span>  </span><span>// 1. 自建 VPS 节点</span></div></div><div><div><div>14</div></div><div><span>  </span><span>// ============================================================</span></div></div><div><div><div>15</div></div><div><span>  </span><span>const</span><span> </span><span>aiVpsProxy</span><span> </span><span>=</span><span> {</span></div></div><div><div><div>16</div></div><div><span>    </span><span>name</span><span>:</span><span> </span><span>VPS_NODE_NAME</span><span>,</span></div></div><div><div><div>17</div></div><div>
</div></div><div><div><div>18</div></div><div><span>    </span><span>type</span><span>:</span><span> </span><span>"vless"</span><span>,</span></div></div><div><div><div>19</div></div><div><span>    </span><span>server</span><span>:</span><span> </span><span>VPS_IP</span><span>,</span></div></div><div><div><div>20</div></div><div><span>    </span><span>port</span><span>:</span><span> </span><span>443</span><span>,</span></div></div><div><div><div>21</div></div><div>
</div></div><div><div><div>22</div></div><div><span>    </span><span>uuid</span><span>:</span><span> </span><span>"REPLACE_UUID"</span><span>,</span></div></div><div><div><div>23</div></div><div>
</div></div><div><div><div>24</div></div><div><span>    </span><span>network</span><span>:</span><span> </span><span>"tcp"</span><span>,</span></div></div><div><div><div>25</div></div><div><span>    </span><span>tls</span><span>:</span><span> </span><span>true</span><span>,</span></div></div><div><div><div>26</div></div><div><span>    </span><span>udp</span><span>:</span><span> </span><span>true</span><span>,</span></div></div><div><div><div>27</div></div><div>
</div></div><div><div><div>28</div></div><div><span>    </span><span>"packet-encoding"</span><span>:</span><span> </span><span>"xudp"</span><span>,</span></div></div><div><div><div>29</div></div><div><span>    </span><span>flow</span><span>:</span><span> </span><span>"xtls-rprx-vision"</span><span>,</span></div></div><div><div><div>30</div></div><div>
</div></div><div><div><div>31</div></div><div><span>    </span><span>servername</span><span>:</span><span> </span><span>"www.bing.com"</span><span>,</span></div></div><div><div><div>32</div></div><div><span>    </span><span>"client-fingerprint"</span><span>:</span><span> </span><span>"chrome"</span><span>,</span></div></div><div><div><div>33</div></div><div>
</div></div><div><div><div>34</div></div><div><span>    </span><span>"reality-opts"</span><span>:</span><span> {</span></div></div><div><div><div>35</div></div><div><span>      </span><span>"public-key"</span><span>:</span><span> </span><span>"REPLACE_CLIENT_PUBLIC_KEY"</span><span>,</span></div></div><div><div><div>36</div></div><div><span>      </span><span>"short-id"</span><span>:</span><span> </span><span>"REPLACE_SHORT_ID"</span></div></div><div><div><div>37</div></div><div><span><span>    </span></span><span>},</span></div></div><div><div><div>38</div></div><div>
</div></div><div><div><div>39</div></div><div><span>    </span><span>smux</span><span>:</span><span> {</span></div></div><div><div><div>40</div></div><div><span>      </span><span>enabled</span><span>:</span><span> </span><span>false</span></div></div><div><div><div>41</div></div><div><span><span>    </span></span><span>}</span></div></div><div><div><div>42</div></div><div><span><span>  </span></span><span>};</span></div></div><div><div><div>43</div></div><div>
</div></div><div><div><div>44</div></div><div><span>  </span><span>// ============================================================</span></div></div><div><div><div>45</div></div><div><span>  </span><span>// 2. 注入节点，避免重复</span></div></div><div><div><div>46</div></div><div><span>  </span><span>// ============================================================</span></div></div><div><div><div>47</div></div><div><span><span>  </span></span><span>config</span><span>.</span><span>proxies</span><span> </span><span>=</span><span><span> </span><span>Array</span><span>.</span></span><span>isArray</span><span><span>(</span><span>config</span><span>.</span></span><span>proxies</span><span>)</span></div></div><div><div><div>48</div></div><div><span>    </span><span>?</span><span><span> </span><span>config</span><span>.</span></span><span>proxies</span></div></div><div><div><div>49</div></div><div><span>    </span><span>:</span><span> [];</span></div></div><div><div><div>50</div></div><div>
</div></div><div><div><div>51</div></div><div><span><span>  </span></span><span>config</span><span>.</span><span>proxies</span><span> </span><span>=</span><span><span> </span><span>config</span><span>.</span></span><span>proxies</span><span>.</span><span>filter</span><span>(</span></div></div><div><div><div>52</div></div><div><span><span>    </span></span><span>(</span><span>proxy</span><span>) </span><span>=&gt;</span><span><span> </span><span>proxy</span><span> </span></span><span>&amp;&amp;</span><span><span> </span><span>proxy</span><span>.</span></span><span>name</span><span> </span><span>!==</span><span> </span><span>VPS_NODE_NAME</span></div></div><div><div><div>53</div></div><div><span><span>  </span></span><span>);</span></div></div><div><div><div>54</div></div><div>
</div></div><div><div><div>55</div></div><div><span><span>  </span></span><span>config</span><span>.</span><span>proxies</span><span>.</span><span>push</span><span><span>(</span><span>aiVpsProxy</span><span>);</span></span></div></div><div><div><div>56</div></div><div>
</div></div><div><div><div>57</div></div><div><span>  </span><span>// ============================================================</span></div></div><div><div><div>58</div></div><div><span>  </span><span>// 3. AI 动态规则集</span></div></div><div><div><div>59</div></div><div><span>  </span><span>// ============================================================</span></div></div><div><div><div>60</div></div><div><span><span>  </span></span><span>config</span><span>[</span><span>"rule-providers"</span><span>] </span><span>=</span></div></div><div><div><div>61</div></div><div><span><span>    </span></span><span>config</span><span>[</span><span>"rule-providers"</span><span>] </span><span>||</span><span> {};</span></div></div><div><div><div>62</div></div><div>
</div></div><div><div><div>63</div></div><div><span><span>  </span></span><span>config</span><span>[</span><span>"rule-providers"</span><span>][</span><span>"AI-Global"</span><span>] </span><span>=</span><span> {</span></div></div><div><div><div>64</div></div><div><span>    </span><span>type</span><span>:</span><span> </span><span>"http"</span><span>,</span></div></div><div><div><div>65</div></div><div><span>    </span><span>behavior</span><span>:</span><span> </span><span>"domain"</span><span>,</span></div></div><div><div><div>66</div></div><div><span>    </span><span>format</span><span>:</span><span> </span><span>"mrs"</span><span>,</span></div></div><div><div><div>67</div></div><div>
</div></div><div><div><div>68</div></div><div><span>    </span><span>url</span><span>:</span></div></div><div><div><div>69</div></div><div><span>      </span><span>"https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/meta/geo/geosite/category-ai-!cn.mrs"</span><span>,</span></div></div><div><div><div>70</div></div><div>
</div></div><div><div><div>71</div></div><div><span>    </span><span>path</span><span>:</span></div></div><div><div><div>72</div></div><div><span>      </span><span>"./ruleset/ai-global.mrs"</span><span>,</span></div></div><div><div><div>73</div></div><div>
</div></div><div><div><div>74</div></div><div><span>    </span><span>interval</span><span>:</span><span> </span><span>86400</span><span>,</span></div></div><div><div><div>75</div></div><div>
</div></div><div><div><div>76</div></div><div><span>    </span><span>// 规则集下载也通过自建 VPS</span></div></div><div><div><div>77</div></div><div><span>    </span><span>proxy</span><span>:</span><span> </span><span>VPS_NODE_NAME</span></div></div><div><div><div>78</div></div><div><span><span>  </span></span><span>};</span></div></div><div><div><div>79</div></div><div>
</div></div><div><div><div>80</div></div><div><span>  </span><span>// ============================================================</span></div></div><div><div><div>81</div></div><div><span>  </span><span>// 4. AI 策略组</span></div></div><div><div><div>82</div></div><div><span>  </span><span>// ============================================================</span></div></div><div><div><div>83</div></div><div><span><span>  </span></span><span>config</span><span>[</span><span>"proxy-groups"</span><span>] </span><span>=</span></div></div><div><div><div>84</div></div><div><span><span>    </span></span><span>Array</span><span>.</span><span>isArray</span><span><span>(</span><span>config</span><span>[</span></span><span>"proxy-groups"</span><span>])</span></div></div><div><div><div>85</div></div><div><span>      </span><span>?</span><span><span> </span><span>config</span><span>[</span></span><span>"proxy-groups"</span><span>]</span></div></div><div><div><div>86</div></div><div><span>      </span><span>:</span><span> [];</span></div></div><div><div><div>87</div></div><div>
</div></div><div><div><div>88</div></div><div><span>  </span><span>const</span><span> </span><span>groups</span><span> </span><span>=</span><span><span> </span><span>config</span><span>[</span></span><span>"proxy-groups"</span><span>];</span></div></div><div><div><div>89</div></div><div>
</div></div><div><div><div>90</div></div><div><span>  </span><span>const</span><span> </span><span>aiGroup</span><span> </span><span>=</span><span> {</span></div></div><div><div><div>91</div></div><div><span>    </span><span>name</span><span>:</span><span> </span><span>AI_GROUP_NAME</span><span>,</span></div></div><div><div><div>92</div></div><div><span>    </span><span>type</span><span>:</span><span> </span><span>"select"</span><span>,</span></div></div><div><div><div>93</div></div><div>
</div></div><div><div><div>94</div></div><div><span>    </span><span>proxies</span><span>:</span><span> [</span></div></div><div><div><div>95</div></div><div><span>      </span><span>VPS_NODE_NAME</span><span>,</span></div></div><div><div><div>96</div></div><div><span>      </span><span>MAIN_GROUP_NAME</span><span>,</span></div></div><div><div><div>97</div></div><div><span>      </span><span>"DIRECT"</span></div></div><div><div><div>98</div></div><div><span><span>    </span></span><span>]</span></div></div><div><div><div>99</div></div><div><span><span>  </span></span><span>};</span></div></div><div><div><div>100</div></div><div>
</div></div><div><div><div>101</div></div><div><span>  </span><span>const</span><span> </span><span>aiGroupIndex</span><span> </span><span>=</span><span><span> </span><span>groups</span><span>.</span></span><span>findIndex</span><span>(</span></div></div><div><div><div>102</div></div><div><span><span>    </span></span><span>(</span><span>group</span><span>) </span><span>=&gt;</span><span><span> </span><span>group</span><span> </span></span><span>&amp;&amp;</span><span><span> </span><span>group</span><span>.</span></span><span>name</span><span> </span><span>===</span><span> </span><span>AI_GROUP_NAME</span></div></div><div><div><div>103</div></div><div><span><span>  </span></span><span>);</span></div></div><div><div><div>104</div></div><div>
</div></div><div><div><div>105</div></div><div><span>  </span><span>if</span><span><span> (</span><span>aiGroupIndex</span><span> </span></span><span>&gt;=</span><span> </span><span>0</span><span>) {</span></div></div><div><div><div>106</div></div><div><span><span>    </span></span><span>groups</span><span>[</span><span>aiGroupIndex</span><span>] </span><span>=</span><span><span> </span><span>aiGroup</span><span>;</span></span></div></div><div><div><div>107</div></div><div><span><span>  </span></span><span>} </span><span>else</span><span> {</span></div></div><div><div><div>108</div></div><div><span><span>    </span></span><span>groups</span><span>.</span><span>unshift</span><span><span>(</span><span>aiGroup</span><span>);</span></span></div></div><div><div><div>109</div></div><div><span><span>  </span></span><span>}</span></div></div><div><div><div>110</div></div><div>
</div></div><div><div><div>111</div></div><div><span>  </span><span>// ============================================================</span></div></div><div><div><div>112</div></div><div><span>  </span><span>// 5. 自建 VPS 也加入机场主选择组，作为手动应急出口</span></div></div><div><div><div>113</div></div><div><span>  </span><span>//</span></div></div><div><div><div>114</div></div><div><span>  </span><span>// 注意：这里只放进手动 select 组；</span></div></div><div><div><div>115</div></div><div><span>  </span><span>// 不要把 VPS 放进 url-test 自动测速组。</span></div></div><div><div><div>116</div></div><div><span>  </span><span>// ============================================================</span></div></div><div><div><div>117</div></div><div><span>  </span><span>const</span><span> </span><span>mainGroup</span><span> </span><span>=</span><span><span> </span><span>groups</span><span>.</span></span><span>find</span><span>(</span></div></div><div><div><div>118</div></div><div><span><span>    </span></span><span>(</span><span>group</span><span>) </span><span>=&gt;</span><span><span> </span><span>group</span><span> </span></span><span>&amp;&amp;</span><span><span> </span><span>group</span><span>.</span></span><span>name</span><span> </span><span>===</span><span> </span><span>MAIN_GROUP_NAME</span></div></div><div><div><div>119</div></div><div><span><span>  </span></span><span>);</span></div></div><div><div><div>120</div></div><div>
</div></div><div><div><div>121</div></div><div><span>  </span><span>if</span><span> (</span></div></div><div><div><div>122</div></div><div><span><span>    </span></span><span>mainGroup</span><span> </span><span>&amp;&amp;</span></div></div><div><div><div>123</div></div><div><span><span>    </span></span><span>Array</span><span>.</span><span>isArray</span><span><span>(</span><span>mainGroup</span><span>.</span></span><span>proxies</span><span>)</span></div></div><div><div><div>124</div></div><div><span><span>  </span></span><span>) {</span></div></div><div><div><div>125</div></div><div><span><span>    </span></span><span>mainGroup</span><span>.</span><span>proxies</span><span> </span><span>=</span></div></div><div><div><div>126</div></div><div><span><span>      </span></span><span>mainGroup</span><span>.</span><span>proxies</span><span>.</span><span>filter</span><span>(</span></div></div><div><div><div>127</div></div><div><span><span>        </span></span><span>(</span><span>name</span><span>) </span><span>=&gt;</span><span><span> </span><span>name</span><span> </span></span><span>!==</span><span> </span><span>VPS_NODE_NAME</span></div></div><div><div><div>128</div></div><div><span><span>      </span></span><span>);</span></div></div><div><div><div>129</div></div><div>
</div></div><div><div><div>130</div></div><div><span><span>    </span></span><span>mainGroup</span><span>.</span><span>proxies</span><span>.</span><span>splice</span><span>(</span></div></div><div><div><div>131</div></div><div><span><span>      </span></span><span>Math</span><span>.</span><span>min</span><span>(</span><span>1</span><span><span>, </span><span>mainGroup</span><span>.</span></span><span>proxies</span><span>.</span><span>length</span><span>),</span></div></div><div><div><div>132</div></div><div><span>      </span><span>0</span><span>,</span></div></div><div><div><div>133</div></div><div><span>      </span><span>VPS_NODE_NAME</span></div></div><div><div><div>134</div></div><div><span><span>    </span></span><span>);</span></div></div><div><div><div>135</div></div><div><span><span>  </span></span><span>}</span></div></div><div><div><div>136</div></div><div>
</div></div><div><div><div>137</div></div><div><span>  </span><span>// ============================================================</span></div></div><div><div><div>138</div></div><div><span>  </span><span>// 6. Android 四大 AI App 包名兜底</span></div></div><div><div><div>139</div></div><div><span>  </span><span>// ============================================================</span></div></div><div><div><div>140</div></div><div><span>  </span><span>const</span><span> </span><span>androidAiRules</span><span> </span><span>=</span><span> [</span></div></div><div><div><div>141</div></div><div><span>    </span><span>"PROCESS-NAME,com.openai.chatgpt,AI专线"</span><span>,</span></div></div><div><div><div>142</div></div><div><span>    </span><span>"PROCESS-NAME,com.anthropic.claude,AI专线"</span><span>,</span></div></div><div><div><div>143</div></div><div><span>    </span><span>"PROCESS-NAME,com.google.android.apps.bard,AI专线"</span><span>,</span></div></div><div><div><div>144</div></div><div><span>    </span><span>"PROCESS-NAME,ai.x.grok,AI专线"</span></div></div><div><div><div>145</div></div><div><span><span>  </span></span><span>];</span></div></div><div><div><div>146</div></div><div>
</div></div><div><div><div>147</div></div><div><span>  </span><span>// ============================================================</span></div></div><div><div><div>148</div></div><div><span>  </span><span>// 7. 公共 AI Rule-Set</span></div></div><div><div><div>149</div></div><div><span>  </span><span>// ============================================================</span></div></div><div><div><div>150</div></div><div><span>  </span><span>const</span><span> </span><span>aiRuleSetRules</span><span> </span><span>=</span><span> [</span></div></div><div><div><div>151</div></div><div><span>    </span><span>"RULE-SET,AI-Global,AI专线"</span></div></div><div><div><div>152</div></div><div><span><span>  </span></span><span>];</span></div></div><div><div><div>153</div></div><div>
</div></div><div><div><div>154</div></div><div><span>  </span><span>// ============================================================</span></div></div><div><div><div>155</div></div><div><span>  </span><span>// 8. 最小手工兜底</span></div></div><div><div><div>156</div></div><div><span>  </span><span>// ============================================================</span></div></div><div><div><div>157</div></div><div><span>  </span><span>const</span><span> </span><span>manualAiRules</span><span> </span><span>=</span><span> [</span></div></div><div><div><div>158</div></div><div><span>    </span><span>// OpenAI</span></div></div><div><div><div>159</div></div><div><span>    </span><span>"DOMAIN-SUFFIX,openai.com,AI专线"</span><span>,</span></div></div><div><div><div>160</div></div><div><span>    </span><span>"DOMAIN-SUFFIX,chatgpt.com,AI专线"</span><span>,</span></div></div><div><div><div>161</div></div><div><span>    </span><span>"DOMAIN-SUFFIX,oaistatic.com,AI专线"</span><span>,</span></div></div><div><div><div>162</div></div><div><span>    </span><span>"DOMAIN-SUFFIX,oaiusercontent.com,AI专线"</span><span>,</span></div></div><div><div><div>163</div></div><div>
</div></div><div><div><div>164</div></div><div><span>    </span><span>// Claude</span></div></div><div><div><div>165</div></div><div><span>    </span><span>"DOMAIN-SUFFIX,anthropic.com,AI专线"</span><span>,</span></div></div><div><div><div>166</div></div><div><span>    </span><span>"DOMAIN-SUFFIX,claude.ai,AI专线"</span><span>,</span></div></div><div><div><div>167</div></div><div><span>    </span><span>"DOMAIN-SUFFIX,claude.com,AI专线"</span><span>,</span></div></div><div><div><div>168</div></div><div>
</div></div><div><div><div>169</div></div><div><span>    </span><span>// Gemini</span></div></div><div><div><div>170</div></div><div><span>    </span><span>"DOMAIN,gemini.google.com,AI专线"</span><span>,</span></div></div><div><div><div>171</div></div><div><span>    </span><span>"DOMAIN,aistudio.google.com,AI专线"</span><span>,</span></div></div><div><div><div>172</div></div><div><span>    </span><span>"DOMAIN-SUFFIX,gemini.google,AI专线"</span><span>,</span></div></div><div><div><div>173</div></div><div><span>    </span><span>"DOMAIN,generativelanguage.googleapis.com,AI专线"</span><span>,</span></div></div><div><div><div>174</div></div><div>
</div></div><div><div><div>175</div></div><div><span>    </span><span>// Grok / xAI</span></div></div><div><div><div>176</div></div><div><span>    </span><span>"DOMAIN-SUFFIX,grok.com,AI专线"</span><span>,</span></div></div><div><div><div>177</div></div><div><span>    </span><span>"DOMAIN-SUFFIX,x.ai,AI专线"</span><span>,</span></div></div><div><div><div>178</div></div><div><span>    </span><span>"DOMAIN,grok.x.com,AI专线"</span><span>,</span></div></div><div><div><div>179</div></div><div>
</div></div><div><div><div>180</div></div><div><span>    </span><span>// 用于测试出口</span></div></div><div><div><div>181</div></div><div><span>    </span><span>"DOMAIN,api.ipify.org,AI专线"</span></div></div><div><div><div>182</div></div><div><span><span>  </span></span><span>];</span></div></div><div><div><div>183</div></div><div>
</div></div><div><div><div>184</div></div><div><span>  </span><span>// ============================================================</span></div></div><div><div><div>185</div></div><div><span>  </span><span>// 9. 防止代理回环</span></div></div><div><div><div>186</div></div><div><span>  </span><span>// ============================================================</span></div></div><div><div><div>187</div></div><div><span>  </span><span>const</span><span> </span><span>safetyRules</span><span> </span><span>=</span><span> [</span></div></div><div><div><div>188</div></div><div><span>    </span><span>`IP-CIDR,</span><span>${</span><span>VPS_IP</span><span>}</span><span>/32,DIRECT,no-resolve`</span></div></div><div><div><div>189</div></div><div><span><span>  </span></span><span>];</span></div></div><div><div><div>190</div></div><div>
</div></div><div><div><div>191</div></div><div><span>  </span><span>// ============================================================</span></div></div><div><div><div>192</div></div><div><span>  </span><span>// 10. 规则优先级</span></div></div><div><div><div>193</div></div><div><span>  </span><span>//</span></div></div><div><div><div>194</div></div><div><span>  </span><span>// Android App</span></div></div><div><div><div>195</div></div><div><span>  </span><span>// ↓</span></div></div><div><div><div>196</div></div><div><span>  </span><span>// AI Rule-Set</span></div></div><div><div><div>197</div></div><div><span>  </span><span>// ↓</span></div></div><div><div><div>198</div></div><div><span>  </span><span>// 手工兜底</span></div></div><div><div><div>199</div></div><div><span>  </span><span>// ↓</span></div></div><div><div><div>200</div></div><div><span>  </span><span>// 防回环</span></div></div><div><div><div>201</div></div><div><span>  </span><span>// ↓</span></div></div><div><div><div>202</div></div><div><span>  </span><span>// 机场原规则</span></div></div><div><div><div>203</div></div><div><span>  </span><span>// ============================================================</span></div></div><div><div><div>204</div></div><div><span>  </span><span>const</span><span> </span><span>existingRules</span><span> </span><span>=</span></div></div><div><div><div>205</div></div><div><span><span>    </span></span><span>Array</span><span>.</span><span>isArray</span><span><span>(</span><span>config</span><span>.</span></span><span>rules</span><span>)</span></div></div><div><div><div>206</div></div><div><span>      </span><span>?</span><span><span> </span><span>config</span><span>.</span></span><span>rules</span></div></div><div><div><div>207</div></div><div><span>      </span><span>:</span><span> [];</span></div></div><div><div><div>208</div></div><div>
</div></div><div><div><div>209</div></div><div><span><span>  </span></span><span>config</span><span>.</span><span>rules</span><span> </span><span>=</span><span> [</span></div></div><div><div><div>210</div></div><div><span><span>    </span></span><span>...</span><span><span>androidAiRules</span><span>,</span></span></div></div><div><div><div>211</div></div><div><span><span>    </span></span><span>...</span><span><span>aiRuleSetRules</span><span>,</span></span></div></div><div><div><div>212</div></div><div><span><span>    </span></span><span>...</span><span><span>manualAiRules</span><span>,</span></span></div></div><div><div><div>213</div></div><div><span><span>    </span></span><span>...</span><span><span>safetyRules</span><span>,</span></span></div></div><div><div><div>214</div></div><div><span><span>    </span></span><span>...</span><span>existingRules</span></div></div><div><div><div>215</div></div><div><span><span>  </span></span><span>];</span></div></div><div><div><div>216</div></div><div>
</div></div><div><div><div>217</div></div><div><span>  </span><span>// ============================================================</span></div></div><div><div><div>218</div></div><div><span>  </span><span>// 11. AI 定向 DNS</span></div></div><div><div><div>219</div></div><div><span>  </span><span>//</span></div></div><div><div><div>220</div></div><div><span>  </span><span>// 不推翻机场原 DNS，只增加 AI 域名策略。</span></div></div><div><div><div>221</div></div><div><span>  </span><span>// DNS 查询本身通过 AI-VPS；</span></div></div><div><div><div>222</div></div><div><span>  </span><span>// disable-ipv6=true 只丢弃该 DNS 服务器返回的 AAAA。</span></div></div><div><div><div>223</div></div><div><span>  </span><span>// ============================================================</span></div></div><div><div><div>224</div></div><div><span><span>  </span></span><span>config</span><span>.</span><span>dns</span><span> </span><span>=</span><span><span> </span><span>config</span><span>.</span></span><span>dns</span><span> </span><span>||</span><span> {};</span></div></div><div><div><div>225</div></div><div>
</div></div><div><div><div>226</div></div><div><span><span>  </span></span><span>config</span><span>.</span><span>dns</span><span>[</span><span>"nameserver-policy"</span><span>] </span><span>=</span></div></div><div><div><div>227</div></div><div><span><span>    </span></span><span>config</span><span>.</span><span>dns</span><span>[</span><span>"nameserver-policy"</span><span>] </span><span>||</span><span> {};</span></div></div><div><div><div>228</div></div><div>
</div></div><div><div><div>229</div></div><div><span><span>  </span></span><span>config</span><span>.</span><span>dns</span><span>[</span><span>"nameserver-policy"</span><span>][</span><span>"rule-set:AI-Global"</span><span>] </span><span>=</span><span> [</span></div></div><div><div><div>230</div></div><div><span>    </span><span>"https://1.1.1.1/dns-query#AI-VPS&amp;disable-ipv6=true"</span><span>,</span></div></div><div><div><div>231</div></div><div><span>    </span><span>"https://1.0.0.1/dns-query#AI-VPS&amp;disable-ipv6=true"</span></div></div><div><div><div>232</div></div><div><span><span>  </span></span><span>];</span></div></div><div><div><div>233</div></div><div>
</div></div><div><div><div>234</div></div><div><span>  </span><span>return</span><span><span> </span><span>config</span><span>;</span></span></div></div><div><div><div>235</div></div><div><span>}</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div><hr /></section><section><h2>18. 为什么 AI 规则必须放在 Google / GitHub 等大类规则前<a href="#18-为什么-ai-规则必须放在-google--github-等大类规则前"><span>#</span></a></h2><p>Mihomo 规则是：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>从上往下</span></div></div><div><div><div>2</div></div><div><span>第一条命中就停止</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>例如 Gemini 使用不少 Google 基础设施。</p><p>如果顺序是：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Google 大类 → 机场</span></div></div><div><div><div>2</div></div><div><span>Gemini → AI VPS</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>某些 Gemini 请求可能在还没轮到 Gemini 规则时，就已经被 Google 大类规则抢走了。</p><p>因此应该是：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Android AI App</span></div></div><div><div><div>2</div></div><div><span>↓</span></div></div><div><div><div>3</div></div><div><span>AI Rule-Set</span></div></div><div><div><div>4</div></div><div><span>↓</span></div></div><div><div><div>5</div></div><div><span>AI 手工兜底</span></div></div><div><div><div>6</div></div><div><span>↓</span></div></div><div><div><div>7</div></div><div><span>Google / GitHub / YouTube</span></div></div><div><div><div>8</div></div><div><span>↓</span></div></div><div><div><div>9</div></div><div><span>机场其他规则</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section></section>
<section><h1>第七部分：DNS 分流<a href="#第七部分dns-分流"><span>#</span></a></h1><section><h2>19. 为什么只给 AI 增加 DNS Policy，而不是重写整个机场 DNS<a href="#19-为什么只给-ai-增加-dns-policy而不是重写整个机场-dns"><span>#</span></a></h2><p>DNS 的职责是：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>域名 → 找到目标 IP</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>代理规则的职责是：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>这个连接 → 从哪个出口走</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>两者不是同一个东西。</p><p>本文的策略是：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>AI 域名</span></div></div><div><div><div>2</div></div><div><span><span>  </span></span><span>↓</span></div></div><div><div><div>3</div></div><div><span>Cloudflare DoH</span></div></div><div><div><div>4</div></div><div><span><span>  </span></span><span>↓</span></div></div><div><div><div>5</div></div><div><span>DNS 请求本身通过 AI-VPS</span></div></div><div><div><div>6</div></div><div>
</div></div><div><div><div>7</div></div><div><span>其他域名</span></div></div><div><div><div>8</div></div><div><span><span>  </span></span><span>↓</span></div></div><div><div><div>9</div></div><div><span>继续使用机场原 DNS</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>这样不会为了 AI 分流，把原本已经稳定的整套机场 DNS 全部改掉。</p><p>Mihomo 支持：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>nameserver-policy</span><span>:</span></div></div><div><div><div>2</div></div><div><span>  </span><span>"rule-set:AI-Global"</span><span>:</span></div></div><div><div><div>3</div></div><div><span><span>    </span></span><span>- </span><span>"https://1.1.1.1/dns-query#AI-VPS&amp;disable-ipv6=true"</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>其中：</p><ul>
<li><code>#AI-VPS</code>：指定 DoH 连接通过该代理；</li>
<li><code>disable-ipv6=true</code>：丢弃 AAAA 返回；</li>
<li><code>rule-set:AI-Global</code>：只作用于这组 AI 域名。</li>
</ul><div><div><div></div><div>Note</div></div><div><p>这不是“保证不触发 AI 风控”的魔法配置。
主要价值是减少解析路径混乱、DNS 污染和不同出口之间不必要的不一致。</p></div></div><hr /></section></section>
<section><h1>第八部分：为什么 <code>gstatic.com</code> 不应该整域强制走 AI VPS<a href="#第八部分为什么-gstaticcom-不应该整域强制走-ai-vps"><span>#</span></a></h1><p>实际观察连接日志时，经常会看到：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>t0.gstatic.com</span></div></div><div><div><div>2</div></div><div><span>t1.gstatic.com</span></div></div><div><div><div>3</div></div><div><span>t2.gstatic.com</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>走了普通机场。</p><p>这<strong>不一定是漏流量</strong>。</p><p><code>gstatic.com</code> 是 Google 大量产品共用的静态资源/CDN 域。如果写：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>DOMAIN-SUFFIX,gstatic.com,AI专线</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>那么 Google Search、Maps、Fonts、登录页甚至一些第三方网页引用的资源，也可能被拖进 AI VPS。</p><p>更合理的做法是：</p><ul>
<li>Gemini 明确的 AI 域名 → AI Rule-Set；</li>
<li>Android Gemini App → 包名兜底；</li>
<li>通用 <code>t0/t1/t2.gstatic.com</code> → 保持普通 Google 路径。</li>
</ul><p>判断“漏没漏”的标准不是“看到 Google 域名走机场”，而是看：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>gemini.google.com</span></div></div><div><div><div>2</div></div><div><span>generativelanguage.googleapis.com</span></div></div><div><div><div>3</div></div><div><span>gemini.gstatic.com</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>这类明确 AI 请求有没有走错。</p><hr /></section>
<section><h1>第九部分：如何验证<a href="#第九部分如何验证"><span>#</span></a></h1><section><h2>20. 验证 VPS 节点本身<a href="#20-验证-vps-节点本身"><span>#</span></a></h2><p>Windows PowerShell：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>curl.exe</span><span><span> </span><span>-</span><span>x http:</span><span>//</span></span><span>127.0</span><span>.</span><span>0.1</span><span>:REPLACE_MIXED_PORT `</span></div></div><div><div><div>2</div></div><div><span><span>  </span></span><span>https:</span><span>//</span><span>api.ipify.org `</span></div></div><div><div><div>3</div></div><div><span><span>  </span></span><span>--</span><span>max</span><span>-</span><span>time </span><span>20</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>如果 <code>api.ipify.org</code> 被规则固定到 <code>AI专线</code>，返回值应该是你的 VPS 出口 IP。</p><hr /></section><section><h2>21. 验证动态 AI Rule-Set 是否真的加载<a href="#21-验证动态-ai-rule-set-是否真的加载"><span>#</span></a></h2><p>不要只看“预览配置里有 <code>AI-Global</code>”。</p><p>找一个<strong>没有写在手工兜底里、但属于公共 AI 规则集</strong>的网站，例如 Cursor：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>curl.exe</span><span><span> </span><span>-</span><span>I `</span></span></div></div><div><div><div>2</div></div><div><span><span>  </span></span><span>-</span><span>x http:</span><span>//</span><span>127.0</span><span>.</span><span>0.1</span><span>:REPLACE_MIXED_PORT `</span></div></div><div><div><div>3</div></div><div><span><span>  </span></span><span>https:</span><span>//</span><span>cursor.com</span><span> `</span></div></div><div><div><div>4</div></div><div><span><span>  </span></span><span>--</span><span>max</span><span>-</span><span>time </span><span>20</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>然后打开 FlClash：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>请求 / Connections</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>搜索：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>cursor.com</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>如果链路显示类似：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>cursor.com</span></div></div><div><div><div>2</div></div><div><span>→ AI专线</span></div></div><div><div><div>3</div></div><div><span>→ AI-VPS</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>就能说明：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>AI-Global Rule-Set</span></div></div><div><div><div>2</div></div><div><span>已经被实际命中</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>比“文件好像下载了”更有意义。</p><hr /></section><section><h2>22. Android 验证 App 包名兜底<a href="#22-android-验证-app-包名兜底"><span>#</span></a></h2><p>打开 ChatGPT App，发送一条消息后查看 FlClash 请求。</p><p>正常情况下，即使看到：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>sentry.io</span></div></div><div><div><div>2</div></div><div><span>Datadog</span></div></div><div><div><div>3</div></div><div><span>NTP</span></div></div><div><div><div>4</div></div><div><span>其他辅助请求</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>只要进程/包名显示：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>com.openai.chatgpt</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>它也应该命中：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>AI专线 → AI-VPS</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>同理可以验证：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>com.anthropic.claude</span></div></div><div><div><div>2</div></div><div><span>com.google.android.apps.bard</span></div></div><div><div><div>3</div></div><div><span>ai.x.grok</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section></section>
<section><h1>第十部分：机场与自建 VPS 怎么配合<a href="#第十部分机场与自建-vps-怎么配合"><span>#</span></a></h1><section><h2>23. 不要把自建 VPS 放进自动测速组<a href="#23-不要把自建-vps-放进自动测速组"><span>#</span></a></h2><p>推荐：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>机场自动选择</span></div></div><div><div><div>2</div></div><div><span>├─ 机场节点 A</span></div></div><div><div><div>3</div></div><div><span>├─ 机场节点 B</span></div></div><div><div><div>4</div></div><div><span>└─ ...</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>而：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>AI-VPS</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>不要加入 <code>url-test</code>。</p><p>否则自动测速可能因为某次抖动，把你的固定 AI 出口切掉。</p><hr /></section><section><h2>24. 但可以把 VPS 放进机场主选择组当应急出口<a href="#24-但可以把-vps-放进机场主选择组当应急出口"><span>#</span></a></h2><p>推荐结构：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>🚀 节点选择</span></div></div><div><div><div>2</div></div><div><span>├─ 自动选择</span></div></div><div><div><div>3</div></div><div><span>├─ AI-VPS       ← 手动应急</span></div></div><div><div><div>4</div></div><div><span>├─ 节点 A</span></div></div><div><div><div>5</div></div><div><span>├─ 节点 B</span></div></div><div><div><div>6</div></div><div><span>└─ ...</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>正常：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>普通外网 → 机场</span></div></div><div><div><div>2</div></div><div><span>AI → AI-VPS</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>机场整体故障时：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>手动把主组切到 AI-VPS</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>普通代理流量也能临时从 VPS 出去。</p><hr /></section><section><h2>25. 普通网站走 VPS 会不会“弄脏 IP”<a href="#25-普通网站走-vps-会不会弄脏-ip"><span>#</span></a></h2><p>普通浏览：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Google</span></div></div><div><div><div>2</div></div><div><span>GitHub</span></div></div><div><div><div>3</div></div><div><span>论坛</span></div></div><div><div><div>4</div></div><div><span>正常网页</span></div></div><div><div><div>5</div></div><div><span>少量下载</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>不会因为经过 VPS 就自动让 IP “变脏”。</p><p>真正应该避免的是：</p><ul>
<li>公开代理；</li>
<li>大量陌生人共享；</li>
<li>批量注册；</li>
<li>垃圾邮件；</li>
<li>爬虫/扫描；</li>
<li>BT/P2P；</li>
<li>攻击流量；</li>
<li>大量异常自动化；</li>
<li>长期大带宽下载/视频把 AI 流量挤满。</li>
</ul><p>所以比较合理的定位是：</p><blockquote><p><strong>AI 专用出口 + 全局应急出口</strong></p></blockquote><p>而不是“这台 VPS 只能访问 AI”。</p><hr /></section></section>
<section><h1>第十一部分：延迟怎么看<a href="#第十一部分延迟怎么看"><span>#</span></a></h1><section><h2>26. 偶尔 800 ms 不代表节点一定坏了<a href="#26-偶尔-800-ms-不代表节点一定坏了"><span>#</span></a></h2><p>如果大多数时间：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>约 200 ms 左右</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>偶尔某次测速：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>500 / 800 ms</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>随后又恢复，通常只是短时抖动。</p><p>客户端显示的“延迟”往往不只是 ICMP Ping，还可能包含：</p><ul>
<li>TCP 建连；</li>
<li>TLS / REALITY 握手；</li>
<li>测试 URL；</li>
<li>当时的国际线路拥塞；</li>
<li>本地 Wi-Fi / 蜂窝抖动。</li>
</ul><p>对 AI 长连接来说，更值得关注：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>持续高延迟</span></div></div><div><div><div>2</div></div><div><span>频繁 Timeout</span></div></div><div><div><div>3</div></div><div><span>丢包</span></div></div><div><div><div>4</div></div><div><span>连接重置</span></div></div><div><div><div>5</div></div><div><span>长回答中断</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>而不是单次延迟数字。</p><hr /></section></section>
<section><h1>第十二部分：常见错误<a href="#第十二部分常见错误"><span>#</span></a></h1><section><h2>27. REALITY 节点测试失败<a href="#27-reality-节点测试失败"><span>#</span></a></h2><p>先按层排查：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>1. VPS TCP 443 是否可达</span></div></div><div><div><div>2</div></div><div><span>2. Xray 是否监听 443</span></div></div><div><div><div>3</div></div><div><span>3. UUID 是否一致</span></div></div><div><div><div>4</div></div><div><span>4. PrivateKey / public-key 是否混淆</span></div></div><div><div><div>5</div></div><div><span>5. short-id 是否一致</span></div></div><div><div><div>6</div></div><div><span>6. serverName 是否与服务端 serverNames 对应</span></div></div><div><div><div>7</div></div><div><span>7. REALITY target 从 VPS 是否真的稳定</span></div></div><div><div><div>8</div></div><div><span>8. 客户端版本是否支持当前字段</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>查看 Xray：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>systemctl</span><span> </span><span>status</span><span> </span><span>xray</span><span> </span><span>--no-pager</span></div></div><div><div><div>2</div></div><div><span>journalctl</span><span> </span><span>-u</span><span> </span><span>xray</span><span> </span><span>-n</span><span> </span><span>100</span><span> </span><span>--no-pager</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>不要一遇到失败就：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>重装系统</span></div></div><div><div><div>2</div></div><div><span>关闭 TLS 校验</span></div></div><div><div><div>3</div></div><div><span>乱换十几个协议</span></div></div><div><div><div>4</div></div><div><span>同时开 Mux / WARP / CDN / 多级代理</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>一次只改一个变量。</p><hr /></section><section><h2>28. AI 有些请求仍走机场<a href="#28-ai-有些请求仍走机场"><span>#</span></a></h2><p>先判断它到底属于：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>AI 核心请求</span></div></div><div><div><div>2</div></div><div><span>还是共享基础服务</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>例如：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>gstatic.com</span></div></div><div><div><div>2</div></div><div><span>sentry.io</span></div></div><div><div><div>3</div></div><div><span>pool.ntp.org</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>都可能被很多非 AI App 使用。</p><p>Android 优先使用：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>PROCESS-NAME</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>做 App 级兜底，不要为了一个 App 把整个公共域名全部强制代理。</p><hr /></section><section><h2>29. 配置更新后突然不工作<a href="#29-配置更新后突然不工作"><span>#</span></a></h2><p>检查：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>FlClash 最终预览配置</span></div></div><div><div><div>2</div></div><div><span>AI-Global provider</span></div></div><div><div><div>3</div></div><div><span>AI专线策略组选中项</span></div></div><div><div><div>4</div></div><div><span>机场订阅是否改了主策略组名称</span></div></div><div><div><div>5</div></div><div><span>Mihomo / FlClash 是否升级</span></div></div><div><div><div>6</div></div><div><span>公共规则集是否可下载</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>覆写脚本依赖 <code>MAIN_GROUP_NAME</code>。如果机场把：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>🚀 节点选择</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>改了名字，你也要同步改脚本变量。</p><hr /></section></section>
<section><h1>第十三部分：本文当前还没有做的内容<a href="#第十三部分本文当前还没有做的内容"><span>#</span></a></h1><p>这份教程只整理<strong>已经跑通的部分</strong>。</p><p>下面两块将在后续继续：</p><ul>
<li> SSH 密钥登录 + 普通 sudo 用户</li>
<li> 验证成功后再考虑关闭 root/password 远程登录</li>
<li> Komari Server 私有面板</li>
<li> Komari Agent</li>
<li> 国内三网延迟曲线</li>
<li> 最终重启后自动恢复验收</li>
<li> 配置备份与恢复演练</li>
</ul><div><div><div></div><div>Warning</div></div><div><p>SSH 密钥没有验证成功之前，<strong>不要直接关闭 PasswordAuthentication 或 PermitRootLogin</strong>，否则可能把自己锁在服务器外面。</p></div></div><hr /></section>
<section><h1>第十四部分：参考资料<a href="#第十四部分参考资料"><span>#</span></a></h1><section><h2>30. 官方资料<a href="#30-官方资料"><span>#</span></a></h2><section><h3>Xray / REALITY<a href="#xray--reality"><span>#</span></a></h3><ul>
<li>
<p>Xray 官方安装器<br />
<a href="https://github.com/XTLS/Xray-install" target="_blank">https://github.com/XTLS/Xray-install</a></p>
</li>
<li>
<p>Xray Core Releases<br />
<a href="https://github.com/XTLS/Xray-core/releases" target="_blank">https://github.com/XTLS/Xray-core/releases</a></p>
</li>
<li>
<p>Project X：REALITY 配置说明<br />
<a href="https://xtls.github.io/en/config/transports/reality.html" target="_blank">https://xtls.github.io/en/config/transports/reality.html</a></p>
</li>
<li>
<p>XTLS/REALITY 项目<br />
<a href="https://github.com/XTLS/REALITY" target="_blank">https://github.com/XTLS/REALITY</a></p>
</li>
</ul></section><section><h3>Mihomo<a href="#mihomo"><span>#</span></a></h3><ul>
<li>
<p>Mihomo VLESS 配置<br />
<a href="https://wiki.metacubex.one/en/config/proxies/vless/" target="_blank">https://wiki.metacubex.one/en/config/proxies/vless/</a></p>
</li>
<li>
<p>Mihomo Rule Providers<br />
<a href="https://wiki.metacubex.one/en/config/rule-providers/" target="_blank">https://wiki.metacubex.one/en/config/rule-providers/</a></p>
</li>
<li>
<p>Mihomo DNS<br />
<a href="https://wiki.metacubex.one/en/config/dns/" target="_blank">https://wiki.metacubex.one/en/config/dns/</a></p>
</li>
<li>
<p>Mihomo 项目<br />
<a href="https://github.com/MetaCubeX/mihomo" target="_blank">https://github.com/MetaCubeX/mihomo</a></p>
</li>
</ul></section><section><h3>FlClash<a href="#flclash"><span>#</span></a></h3><ul>
<li>FlClash<br />
<a href="https://github.com/chen08209/FlClash" target="_blank">https://github.com/chen08209/FlClash</a></li>
</ul><hr /></section></section><section><h2>31. AI 规则数据<a href="#31-ai-规则数据"><span>#</span></a></h2><ul>
<li>
<p>MetaCubeX/meta-rules-dat<br />
<a href="https://github.com/MetaCubeX/meta-rules-dat" target="_blank">https://github.com/MetaCubeX/meta-rules-dat</a></p>
</li>
<li>
<p><code>category-ai-!cn.mrs</code> 所在分支<br />
<a href="https://github.com/MetaCubeX/meta-rules-dat/tree/meta/geo/geosite" target="_blank">https://github.com/MetaCubeX/meta-rules-dat/tree/meta/geo/geosite</a></p>
</li>
<li>
<p>v2fly/domain-list-community<br />
<a href="https://github.com/v2fly/domain-list-community" target="_blank">https://github.com/v2fly/domain-list-community</a></p>
</li>
<li>
<p>v2fly OpenAI 数据<br />
<a href="https://github.com/v2fly/domain-list-community/blob/master/data/openai" target="_blank">https://github.com/v2fly/domain-list-community/blob/master/data/openai</a></p>
</li>
<li>
<p>v2fly Anthropic 数据<br />
<a href="https://github.com/v2fly/domain-list-community/blob/master/data/anthropic" target="_blank">https://github.com/v2fly/domain-list-community/blob/master/data/anthropic</a></p>
</li>
<li>
<p>v2fly Google DeepMind / Gemini 数据<br />
<a href="https://github.com/v2fly/domain-list-community/blob/master/data/google-deepmind" target="_blank">https://github.com/v2fly/domain-list-community/blob/master/data/google-deepmind</a></p>
</li>
<li>
<p>v2fly xAI / Grok 数据<br />
<a href="https://github.com/v2fly/domain-list-community/blob/master/data/xai" target="_blank">https://github.com/v2fly/domain-list-community/blob/master/data/xai</a></p>
</li>
</ul><hr /></section><section><h2>32. 可作为补充思路的社区项目<a href="#32-可作为补充思路的社区项目"><span>#</span></a></h2><div><div><div></div><div>Caution</div></div><div><p>社区模板适合参考思路，不建议不检查内容就整份复制。</p></div></div><ul>
<li>
<p>blackmatrix7/ios_rule_script<br />
<a href="https://github.com/blackmatrix7/ios_rule_script" target="_blank">https://github.com/blackmatrix7/ios_rule_script</a></p>
</li>
<li>
<p>Accademia/Additional_Rule_For_Clash<br />
<a href="https://github.com/Accademia/Additional_Rule_For_Clash" target="_blank">https://github.com/Accademia/Additional_Rule_For_Clash</a></p>
</li>
<li>
<p>住宅/AI 分流配置示例：Phlegonlabs/clash-verge-setting<br />
<a href="https://github.com/Phlegonlabs/clash-verge-setting" target="_blank">https://github.com/Phlegonlabs/clash-verge-setting</a></p>
</li>
</ul><hr /></section><section><h2>33. Android 官方 App 包名来源<a href="#33-android-官方-app-包名来源"><span>#</span></a></h2><ul>
<li>
<p>ChatGPT<br />
<a href="https://play.google.com/store/apps/details?id=com.openai.chatgpt" target="_blank">https://play.google.com/store/apps/details?id=com.openai.chatgpt</a></p>
</li>
<li>
<p>Claude<br />
<a href="https://play.google.com/store/apps/details?id=com.anthropic.claude" target="_blank">https://play.google.com/store/apps/details?id=com.anthropic.claude</a></p>
</li>
<li>
<p>Google Gemini<br />
<a href="https://play.google.com/store/apps/details?id=com.google.android.apps.bard" target="_blank">https://play.google.com/store/apps/details?id=com.google.android.apps.bard</a></p>
</li>
<li>
<p>Grok<br />
<a href="https://play.google.com/store/apps/details?id=ai.x.grok" target="_blank">https://play.google.com/store/apps/details?id=ai.x.grok</a></p>
</li>
</ul><hr /></section></section>
<section><h1>结语<a href="#结语"><span>#</span></a></h1><p>最终目标不是堆尽可能多的“网络优化参数”，而是保持结构简单：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>VPS：</span></div></div><div><div><div>2</div></div><div><span>Debian</span></div></div><div><div><div>3</div></div><div><span>└─ Xray</span></div></div><div><div><div>4</div></div><div><span><span>   </span></span><span>└─ VLESS + REALITY + Vision</span></div></div><div><div><div>5</div></div><div>
</div></div><div><div><div>6</div></div><div><span>客户端：</span></div></div><div><div><div>7</div></div><div><span>FlClash / Mihomo</span></div></div><div><div><div>8</div></div><div><span>├─ Android AI App 包名 → AI 专线</span></div></div><div><div><div>9</div></div><div><span>├─ category-ai-!cn → AI 专线</span></div></div><div><div><div>10</div></div><div><span>├─ AI 专线 → 自建 VPS</span></div></div><div><div><div>11</div></div><div><span>├─ 普通国外流量 → 原机场</span></div></div><div><div><div>12</div></div><div><span>└─ 国内 / 内网 → DIRECT</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>出现问题时，也按层定位：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>VPS 网络</span></div></div><div><div><div>2</div></div><div><span>→ Xray</span></div></div><div><div><div>3</div></div><div><span>→ REALITY</span></div></div><div><div><div>4</div></div><div><span>→ FlClash 节点</span></div></div><div><div><div>5</div></div><div><span>→ Rule-Set</span></div></div><div><div><div>6</div></div><div><span>→ DNS</span></div></div><div><div><div>7</div></div><div><span>→ 单个 App</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>不要同时修改五六项参数。<strong>一次只改变一个变量，再验证结果。</strong></p><hr /><div><div><div></div><div>发布前最后自查</div></div><div><p>搜索整篇文档，确保没有残留：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>真实 VPS IP</span></div></div><div><div><div>2</div></div><div><span>真实 SSH 端口</span></div></div><div><div><div>3</div></div><div><span>UUID</span></div></div><div><div><div>4</div></div><div><span>PrivateKey</span></div></div><div><div><div>5</div></div><div><span>public-key</span></div></div><div><div><div>6</div></div><div><span>short-id</span></div></div><div><div><div>7</div></div><div><span>VLESS 分享链接</span></div></div><div><div><div>8</div></div><div><span>机场订阅地址</span></div></div><div><div><div>9</div></div><div><span>API Key / Cookie / Token</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>截图也要检查右上角账户名、浏览器书签、订阅 URL、节点 IP、二维码、终端历史命令。</p></div></div></section>]]></content>
    </entry>
    <entry>
      <id>https://yyq-firefly.pages.dev/posts/50-tutorials/windows/claude-code-hook-%E9%80%9A%E7%9F%A5%E4%B8%8E%E6%8F%90%E7%A4%BA%E9%9F%B3%E9%85%8D%E7%BD%AE/</id>
      <title type="text">Claude Code Hook 通知与提示音配置</title>
      <published>2026-08-04T00:00:00.000Z</published>
      <updated>2026-08-04T00:00:00.000Z</updated>
      <author><name>YYQ</name></author>
      <link rel="alternate" href="https://yyq-firefly.pages.dev/posts/50-tutorials/windows/claude-code-hook-%E9%80%9A%E7%9F%A5%E4%B8%8E%E6%8F%90%E7%A4%BA%E9%9F%B3%E9%85%8D%E7%BD%AE/"/>
      <summary type="text"></summary>
      <content type="html"><![CDATA[<section><h1>Claude Code Hook 通知与提示音配置<a href="#claude-code-hook-通知与提示音配置"><span>#</span></a></h1><p>在 Windows 上，Claude Code 可以通过原生 Hook 在需要权限确认、完成一轮回答或执行失败时显示系统托盘通知，并播放提示音。本次实测的最终方案不依赖第三方通知工具，也不需要更换已有 Hook 配置；只需把 <code>notify.ps1</code> 的播放实现改为同步加载并播放 Windows 自带的 WAV 文件。</p><section><h2>最终结论<a href="#最终结论"><span>#</span></a></h2><p>保留原有的 <code>%USERPROFILE%\.claude\settings.json</code> Hook 配置，只替换 <code>%USERPROFILE%\.claude\hooks\notify.ps1</code>：</p><ul>
<li>使用 <code>System.Windows.Forms.NotifyIcon</code> 显示托盘气泡通知。</li>
<li>使用 <code>System.Media.SoundPlayer</code> 播放 <code>%WINDIR%\Media</code> 下的 WAV 文件。</li>
<li>播放前显式调用 <code>Load()</code>，再调用 <code>PlaySync()</code>，避免异步播放时脚本过早退出。</li>
<li><code>Alarm02.wav</code> 或 <code>Alarm03.wav</code> 不存在时，回退到 <code>Alarm01.wav</code>。</li>
<li>声音播放失败时写入脚本目录下的 <code>notify-error.log</code>，不再使用空的 <code>catch</code> 隐藏异常。</li>
</ul></section><section><h2>事件与声音映射<a href="#事件与声音映射"><span>#</span></a></h2>

<table><thead><tr><th>Claude Code 事件</th><th>Hook 参数</th><th>默认声音</th><th>用途</th></tr></thead><tbody><tr><td><code>Notification</code>，匹配 <code>permission_prompt</code></td><td><code>permission</code></td><td><code>Alarm01.wav</code></td><td>等待用户批准工具操作</td></tr><tr><td><code>Stop</code></td><td><code>done</code></td><td><code>Alarm03.wav</code></td><td>主 Agent 完成本轮响应</td></tr><tr><td><code>StopFailure</code></td><td><code>error</code></td><td><code>Alarm02.wav</code></td><td>本轮因 API 或其他错误结束</td></tr></tbody></table><p><code>Stop</code> 表示本轮响应结束，不等同于长期任务的所有工作都已完成；用户主动中断时也不会触发 <code>Stop</code>。<code>StopFailure</code> 用于 API 错误等异常结束场景。</p><p>如果当前操作已经被允许、处于自动批准模式，或本身不需要权限，<code>permission_prompt</code> 不会触发；这不是 Hook 失效，完成通知仍可正常触发。</p></section><section><h2>可直接使用的 <code>notify.ps1</code><a href="#可直接使用的-notifyps1"><span>#</span></a></h2><p>文件位置：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>%USERPROFILE%\.claude\hooks\notify.ps1</span></div></div></code></pre><div><div></div><div></div></div></figure></div><div><div><div><figure><figcaption><span></span><span>Terminal window</span><span>展开</span><span>收起</span></figcaption><pre><code><div><div><div>1</div></div><div><span>param</span><span>(</span></div></div><div><div><div>2</div></div><div><span><span>    </span></span><span>[</span><span>ValidateSet</span><span>(</span><span>"permission"</span><span>, </span><span>"done"</span><span>, </span><span>"error"</span><span>)]</span></div></div><div><div><div>3</div></div><div><span><span>    </span></span><span>[</span><span>string</span><span>]</span><span>$EventType</span><span><span> </span><span>=</span><span> </span></span><span>"done"</span></div></div><div><div><div>4</div></div><div><span>)</span></div></div><div><div><div>5</div></div><div>
</div></div><div><div><div>6</div></div><div><span>$ErrorActionPreference</span><span><span> </span><span>=</span><span> </span></span><span>"Stop"</span></div></div><div><div><div>7</div></div><div>
</div></div><div><div><div>8</div></div><div><span>Add-Type</span><span><span> </span><span>-</span><span>AssemblyName System.Windows.Forms</span></span></div></div><div><div><div>9</div></div><div><span>Add-Type</span><span><span> </span><span>-</span><span>AssemblyName System.Drawing</span></span></div></div><div><div><div>10</div></div><div>
</div></div><div><div><div>11</div></div><div><span>switch</span><span> (</span><span>$EventType</span><span>) {</span></div></div><div><div><div>12</div></div><div><span>    </span><span>"permission"</span><span> {</span></div></div><div><div><div>13</div></div><div><span>        </span><span>$title</span><span><span> </span><span>=</span><span> </span></span><span>"Claude Code 需要确认"</span></div></div><div><div><div>14</div></div><div><span>        </span><span>$message</span><span><span> </span><span>=</span><span> </span></span><span>"Claude Code 正在等待你批准操作。"</span></div></div><div><div><div>15</div></div><div><span>        </span><span>$tipIcon</span><span><span> </span><span>=</span><span> [</span></span><span>System.Windows.Forms.ToolTipIcon</span><span>]::Warning</span></div></div><div><div><div>16</div></div><div><span>        </span><span>$trayIcon</span><span><span> </span><span>=</span><span> [</span></span><span>System.Drawing.SystemIcons</span><span>]::Warning</span></div></div><div><div><div>17</div></div><div><span>        </span><span>$soundPath</span><span><span> </span><span>=</span><span> </span></span><span><span>"</span><span>$</span></span><span>env:WINDIR</span><span>\Media\Alarm01.wav"</span></div></div><div><div><div>18</div></div><div><span><span>    </span></span><span>}</span></div></div><div><div><div>19</div></div><div>
</div></div><div><div><div>20</div></div><div><span>    </span><span>"error"</span><span> {</span></div></div><div><div><div>21</div></div><div><span>        </span><span>$title</span><span><span> </span><span>=</span><span> </span></span><span>"Claude Code 执行失败"</span></div></div><div><div><div>22</div></div><div><span>        </span><span>$message</span><span><span> </span><span>=</span><span> </span></span><span>"本轮响应因错误而结束。"</span></div></div><div><div><div>23</div></div><div><span>        </span><span>$tipIcon</span><span><span> </span><span>=</span><span> [</span></span><span>System.Windows.Forms.ToolTipIcon</span><span>]::Error</span></div></div><div><div><div>24</div></div><div><span>        </span><span>$trayIcon</span><span><span> </span><span>=</span><span> [</span></span><span>System.Drawing.SystemIcons</span><span>]::Error</span></div></div><div><div><div>25</div></div><div><span>        </span><span>$soundPath</span><span><span> </span><span>=</span><span> </span></span><span><span>"</span><span>$</span></span><span>env:WINDIR</span><span>\Media\Alarm02.wav"</span></div></div><div><div><div>26</div></div><div><span><span>    </span></span><span>}</span></div></div><div><div><div>27</div></div><div>
</div></div><div><div><div>28</div></div><div><span>    </span><span>default</span><span> {</span></div></div><div><div><div>29</div></div><div><span>        </span><span>$title</span><span><span> </span><span>=</span><span> </span></span><span>"Claude Code 已完成"</span></div></div><div><div><div>30</div></div><div><span>        </span><span>$message</span><span><span> </span><span>=</span><span> </span></span><span>"本轮回答已经完成，可以回来查看了。"</span></div></div><div><div><div>31</div></div><div><span>        </span><span>$tipIcon</span><span><span> </span><span>=</span><span> [</span></span><span>System.Windows.Forms.ToolTipIcon</span><span>]::Info</span></div></div><div><div><div>32</div></div><div><span>        </span><span>$trayIcon</span><span><span> </span><span>=</span><span> [</span></span><span>System.Drawing.SystemIcons</span><span>]::Information</span></div></div><div><div><div>33</div></div><div><span>        </span><span>$soundPath</span><span><span> </span><span>=</span><span> </span></span><span><span>"</span><span>$</span></span><span>env:WINDIR</span><span>\Media\Alarm03.wav"</span></div></div><div><div><div>34</div></div><div><span><span>    </span></span><span>}</span></div></div><div><div><div>35</div></div><div><span>}</span></div></div><div><div><div>36</div></div><div>
</div></div><div><div><div>37</div></div><div><span># 某些 Windows 安装没有 Alarm02.wav 或 Alarm03.wav，统一回退到 Alarm01.wav。</span></div></div><div><div><div>38</div></div><div><span>if</span><span><span> (</span><span>-not</span><span> (</span></span><span>Test-Path</span><span><span> </span><span>-</span><span>LiteralPath </span></span><span>$soundPath</span><span>)) {</span></div></div><div><div><div>39</div></div><div><span>    </span><span>$soundPath</span><span><span> </span><span>=</span><span> </span></span><span><span>"</span><span>$</span></span><span>env:WINDIR</span><span>\Media\Alarm01.wav"</span></div></div><div><div><div>40</div></div><div><span>}</span></div></div><div><div><div>41</div></div><div>
</div></div><div><div><div>42</div></div><div><span>$notification</span><span><span> </span><span>=</span><span> </span></span><span>$null</span></div></div><div><div><div>43</div></div><div>
</div></div><div><div><div>44</div></div><div><span>try</span><span> {</span></div></div><div><div><div>45</div></div><div><span>    </span><span>$notification</span><span><span> </span><span>=</span><span> </span></span><span>New-Object</span><span> System.Windows.Forms.NotifyIcon</span></div></div><div><div><div>46</div></div><div><span>    </span><span>$notification.Icon</span><span><span> </span><span>=</span><span> </span></span><span>$trayIcon</span></div></div><div><div><div>47</div></div><div><span>    </span><span>$notification.BalloonTipIcon</span><span><span> </span><span>=</span><span> </span></span><span>$tipIcon</span></div></div><div><div><div>48</div></div><div><span>    </span><span>$notification.BalloonTipTitle</span><span><span> </span><span>=</span><span> </span></span><span>$title</span></div></div><div><div><div>49</div></div><div><span>    </span><span>$notification.BalloonTipText</span><span><span> </span><span>=</span><span> </span></span><span>$message</span></div></div><div><div><div>50</div></div><div><span>    </span><span>$notification.Visible</span><span><span> </span><span>=</span><span> </span></span><span>$true</span></div></div><div><div><div>51</div></div><div>
</div></div><div><div><div>52</div></div><div><span>    </span><span>$notification.ShowBalloonTip</span><span>(</span><span>6000</span><span>)</span></div></div><div><div><div>53</div></div><div>
</div></div><div><div><div>54</div></div><div><span>    </span><span>$player</span><span><span> </span><span>=</span><span> </span></span><span>New-Object</span><span> System.Media.SoundPlayer </span><span>$soundPath</span></div></div><div><div><div>55</div></div><div><span>    </span><span>$player.Load</span><span>()</span></div></div><div><div><div>56</div></div><div><span>    </span><span>$player.PlaySync</span><span>()</span></div></div><div><div><div>57</div></div><div>
</div></div><div><div><div>58</div></div><div><span>    </span><span># 保持进程短暂存活，确保气泡通知有时间显示。</span></div></div><div><div><div>59</div></div><div><span>    </span><span>Start-Sleep</span><span><span> </span><span>-</span><span>Seconds </span></span><span>5</span></div></div><div><div><div>60</div></div><div><span>}</span></div></div><div><div><div>61</div></div><div><span>catch</span><span> {</span></div></div><div><div><div>62</div></div><div><span>    </span><span>$logPath</span><span><span> </span><span>=</span><span> </span></span><span>Join-Path</span><span> $PSScriptRoot </span><span>"notify-error.log"</span></div></div><div><div><div>63</div></div><div>
</div></div><div><div><div>64</div></div><div><span>    </span><span>"</span><span>$(</span><span>Get-Date</span><span> </span><span>-</span><span>Format </span><span>'yyyy-MM-dd HH:mm:ss'</span><span>)</span><span>`r`n</span><span>$(</span><span>$_ </span><span>|</span><span> </span><span>Out-String</span><span>)</span><span>"</span><span> |</span></div></div><div><div><div>65</div></div><div><span>        </span><span>Add-Content</span><span><span> </span><span>-</span><span>Path </span></span><span>$logPath</span><span><span> </span><span>-</span><span>Encoding UTF8</span></span></div></div><div><div><div>66</div></div><div><span>}</span></div></div><div><div><div>67</div></div><div><span>finally</span><span> {</span></div></div><div><div><div>68</div></div><div><span>    </span><span>if</span><span> (</span><span>$null</span><span><span> </span><span>-ne</span><span> </span></span><span>$notification</span><span>) {</span></div></div><div><div><div>69</div></div><div><span>        </span><span>$notification.Dispose</span><span>()</span></div></div><div><div><div>70</div></div><div><span><span>    </span></span><span>}</span></div></div><div><div><div>71</div></div><div><span>}</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div></section><section><h2>Hook 配置<a href="#hook-配置"><span>#</span></a></h2><section><h3>已经有可用 Hook 时<a href="#已经有可用-hook-时"><span>#</span></a></h3><p>不需要修改 <code>settings.json</code>。只要现有命令已经调用 <code>notify.ps1</code>，并把三种事件分别传入 <code>permission</code>、<code>done</code>、<code>error</code> 即可。保留：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>"shell"</span><span>: </span><span>"powershell"</span><span>,</span></div></div><div><div><div>2</div></div><div><span>"async"</span><span>: </span><span>true</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>其中 <code>async: true</code> 可以避免通知脚本等待声音播放时阻塞 Claude Code。</p><p>在 Windows 上，<code>shell: "powershell"</code> 由 Claude Code 负责选择 PowerShell 运行时，并在 PowerShell 7 不可用时回退到 Windows PowerShell 5.1。除非兼容性测试证明有必要，否则不需要在每个 Hook 命令中硬编码 <code>powershell.exe</code> 的完整路径。</p></section><section><h3>从零配置时的最小示例<a href="#从零配置时的最小示例"><span>#</span></a></h3><p>如果尚未配置 Hook，可将下面内容合并进 <code>%USERPROFILE%\.claude\settings.json</code> 的顶层 <code>hooks</code> 对象。已有 <code>env</code>、插件或其他配置时，只添加对应事件，不要覆盖整个文件。</p><div><div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>{</span></div></div><div><div><div>2</div></div><div><span>  </span><span>"hooks"</span><span>: {</span></div></div><div><div><div>3</div></div><div><span>    </span><span>"Notification"</span><span>: [</span></div></div><div><div><div>4</div></div><div><span><span>      </span></span><span>{</span></div></div><div><div><div>5</div></div><div><span>        </span><span>"matcher"</span><span>: </span><span>"permission_prompt"</span><span>,</span></div></div><div><div><div>6</div></div><div><span>        </span><span>"hooks"</span><span>: [</span></div></div><div><div><div>7</div></div><div><span><span>          </span></span><span>{</span></div></div><div><div><div>8</div></div><div><span>            </span><span>"type"</span><span>: </span><span>"command"</span><span>,</span></div></div><div><div><div>9</div></div><div><span>            </span><span>"shell"</span><span>: </span><span>"powershell"</span><span>,</span></div></div><div><div><div>10</div></div><div><span>            </span><span>"command"</span><span>: </span><span>"&amp; </span><span>\"</span><span>$env:USERPROFILE/.claude/hooks/notify.ps1</span><span>\"</span><span> -EventType permission"</span><span>,</span></div></div><div><div><div>11</div></div><div><span>            </span><span>"async"</span><span>: </span><span>true</span></div></div><div><div><div>12</div></div><div><span><span>          </span></span><span>}</span></div></div><div><div><div>13</div></div><div><span><span>        </span></span><span>]</span></div></div><div><div><div>14</div></div><div><span><span>      </span></span><span>}</span></div></div><div><div><div>15</div></div><div><span><span>    </span></span><span>],</span></div></div><div><div><div>16</div></div><div><span>    </span><span>"Stop"</span><span>: [</span></div></div><div><div><div>17</div></div><div><span><span>      </span></span><span>{</span></div></div><div><div><div>18</div></div><div><span>        </span><span>"hooks"</span><span>: [</span></div></div><div><div><div>19</div></div><div><span><span>          </span></span><span>{</span></div></div><div><div><div>20</div></div><div><span>            </span><span>"type"</span><span>: </span><span>"command"</span><span>,</span></div></div><div><div><div>21</div></div><div><span>            </span><span>"shell"</span><span>: </span><span>"powershell"</span><span>,</span></div></div><div><div><div>22</div></div><div><span>            </span><span>"command"</span><span>: </span><span>"&amp; </span><span>\"</span><span>$env:USERPROFILE/.claude/hooks/notify.ps1</span><span>\"</span><span> -EventType done"</span><span>,</span></div></div><div><div><div>23</div></div><div><span>            </span><span>"async"</span><span>: </span><span>true</span></div></div><div><div><div>24</div></div><div><span><span>          </span></span><span>}</span></div></div><div><div><div>25</div></div><div><span><span>        </span></span><span>]</span></div></div><div><div><div>26</div></div><div><span><span>      </span></span><span>}</span></div></div><div><div><div>27</div></div><div><span><span>    </span></span><span>],</span></div></div><div><div><div>28</div></div><div><span>    </span><span>"StopFailure"</span><span>: [</span></div></div><div><div><div>29</div></div><div><span><span>      </span></span><span>{</span></div></div><div><div><div>30</div></div><div><span>        </span><span>"hooks"</span><span>: [</span></div></div><div><div><div>31</div></div><div><span><span>          </span></span><span>{</span></div></div><div><div><div>32</div></div><div><span>            </span><span>"type"</span><span>: </span><span>"command"</span><span>,</span></div></div><div><div><div>33</div></div><div><span>            </span><span>"shell"</span><span>: </span><span>"powershell"</span><span>,</span></div></div><div><div><div>34</div></div><div><span>            </span><span>"command"</span><span>: </span><span>"&amp; </span><span>\"</span><span>$env:USERPROFILE/.claude/hooks/notify.ps1</span><span>\"</span><span> -EventType error"</span><span>,</span></div></div><div><div><div>35</div></div><div><span>            </span><span>"async"</span><span>: </span><span>true</span></div></div><div><div><div>36</div></div><div><span><span>          </span></span><span>}</span></div></div><div><div><div>37</div></div><div><span><span>        </span></span><span>]</span></div></div><div><div><div>38</div></div><div><span><span>      </span></span><span>}</span></div></div><div><div><div>39</div></div><div><span><span>    </span></span><span>]</span></div></div><div><div><div>40</div></div><div><span><span>  </span></span><span>}</span></div></div><div><div><div>41</div></div><div><span>}</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div></section></section><section><h2>安装与验证<a href="#安装与验证"><span>#</span></a></h2><p>先备份当前可用脚本，再覆盖内容：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>Copy-Item</span><span> `</span></div></div><div><div><div>2</div></div><div><span>  </span><span><span>"</span><span>$</span></span><span>env:USERPROFILE</span><span>\.claude\hooks\notify.ps1"</span><span> `</span></div></div><div><div><div>3</div></div><div><span>  </span><span><span>"</span><span>$</span></span><span>env:USERPROFILE</span><span>\.claude\hooks\notify-working.ps1"</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>依次手动测试三种事件：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>&amp; </span><span><span>"</span><span>$</span></span><span>env:USERPROFILE</span><span>\.claude\hooks\notify.ps1"</span><span><span> </span><span>-</span><span>EventType permission</span></span></div></div><div><div><div>2</div></div><div><span>&amp; </span><span><span>"</span><span>$</span></span><span>env:USERPROFILE</span><span>\.claude\hooks\notify.ps1"</span><span><span> </span><span>-</span><span>EventType done</span></span></div></div><div><div><div>3</div></div><div><span>&amp; </span><span><span>"</span><span>$</span></span><span>env:USERPROFILE</span><span>\.claude\hooks\notify.ps1"</span><span><span> </span><span>-</span><span>EventType error</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>检查 WAV 文件是否存在：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>Test-Path</span><span> </span><span><span>"</span><span>$</span></span><span>env:WINDIR</span><span>\Media\Alarm01.wav"</span></div></div><div><div><div>2</div></div><div><span>Get-ChildItem</span><span> </span><span><span>"</span><span>$</span></span><span>env:WINDIR</span><span>\Media"</span><span><span> </span><span>-</span><span>Filter </span></span><span>"*.wav"</span><span> |</span></div></div><div><div><div>3</div></div><div><span>    </span><span>Select-Object</span><span><span> </span><span>-</span><span>ExpandProperty FullName</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>检查 <code>settings.json</code> 是否仍是合法 JSON：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>Get-Content</span><span> </span><span><span>"</span><span>$</span></span><span>env:USERPROFILE</span><span>\.claude\settings.json"</span><span><span> </span><span>-</span><span>Raw |</span></span></div></div><div><div><div>2</div></div><div><span>    </span><span>ConvertFrom-Json</span><span> |</span></div></div><div><div><div>3</div></div><div><span>    </span><span>Out-Null</span></div></div><div><div><div>4</div></div><div>
</div></div><div><div><div>5</div></div><div><span>Write-Host</span><span> </span><span>"settings.json 格式正确"</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>完全退出并重新启动 Claude Code，然后运行 <code>/hooks</code> 检查 <code>Notification</code>、<code>Stop</code> 和 <code>StopFailure</code> 是否已注册。</p></section><section><h2>无声音时的排查顺序<a href="#无声音时的排查顺序"><span>#</span></a></h2><ol>
<li>
<p>先用默认播放器确认 Windows 音频输出设备、主音量和 WAV 文件本身正常。</p>
</li>
<li>
<p>再单独测试同步播放：</p>
<div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>$player</span><span><span> </span><span>=</span><span> </span></span><span>New-Object</span><span> System.Media.SoundPlayer </span><span><span>"</span><span>$</span></span><span>env:WINDIR</span><span>\Media\Alarm01.wav"</span></div></div><div><div><div>2</div></div><div><span>$player.Load</span><span>()</span></div></div><div><div><div>3</div></div><div><span>$player.PlaySync</span><span>()</span></div></div></code></pre><div><div></div><div></div></div></figure></div>
</li>
<li>
<p>如果当前 PowerShell 版本测试仍无声，可只用 Windows PowerShell 5.1 做兼容性验证，不必先修改 Hook：</p>
<div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>&amp; </span><span><span>"</span><span>$</span></span><span>env:WINDIR</span><span>\System32\WindowsPowerShell\v1.0\powershell.exe"</span><span> `</span></div></div><div><div><div>2</div></div><div><span><span>  </span></span><span>-</span><span>NoProfile `</span></div></div><div><div><div>3</div></div><div><span><span>  </span></span><span>-</span><span>Command </span><span>'$p = New-Object System.Media.SoundPlayer "$env:WINDIR\Media\Alarm01.wav"; $p.Load(); $p.PlaySync()'</span></div></div></code></pre><div><div></div><div></div></div></figure></div>
</li>
<li>
<p>若直接播放成功但 Hook 无声，查看脚本目录下的 <code>notify-error.log</code>，并确认 Claude Code 使用的 Hook 命令确实指向当前 <code>notify.ps1</code>。</p>
</li>
<li>
<p>检查 Windows 音量混合器中的系统声音、PowerShell 或终端应用是否被单独静音，或输出到了错误设备。</p>
</li>
</ol><p>如果提示禁止运行脚本，只对当前用户启用本地脚本即可：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>Set-ExecutionPolicy</span><span> `</span></div></div><div><div><div>2</div></div><div><span><span>  </span></span><span>-</span><span>Scope CurrentUser `</span></div></div><div><div><div>3</div></div><div><span><span>  </span></span><span>-</span><span>ExecutionPolicy RemoteSigned</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>不需要为了运行这个本地脚本而使用 <code>ExecutionPolicy Bypass</code>。</p></section><section><h2>本次排障中不需要保留的方案<a href="#本次排障中不需要保留的方案"><span>#</span></a></h2><ul>
<li>不需要安装 Code-Notify 或其他第三方通知模块。</li>
<li>不需要把 WAV 文件关联到默认播放器作为 Hook 的播放机制。</li>
<li>不需要使用 Windows Media Player COM 组件或 <code>winmm.dll</code> 的替代实现。</li>
<li>不要为了绕过安全软件而信任远程下载后立即执行的 PowerShell 安装脚本。</li>
</ul><p>本方案依赖 Windows 自带的 Forms、Drawing 和 <code>SoundPlayer</code>，不产生网络请求，也不需要提交本机的 <code>.claude</code> 配置、日志或声音文件。</p></section><section><h2>参考<a href="#参考"><span>#</span></a></h2><ul>
<li><a href="https://code.claude.com/docs/en/hooks" target="_blank">Claude Code Hooks 官方文档</a></li>
</ul></section></section>]]></content>
    </entry>
    <entry>
      <id>https://yyq-firefly.pages.dev/posts/50-tutorials/windows/github-%E6%8F%90%E4%BA%A4%E9%82%AE%E7%AE%B1%E9%9A%90%E7%A7%81%E4%B8%8E-git-%E5%A4%9A%E8%BA%AB%E4%BB%BD%E9%85%8D%E7%BD%AE/</id>
      <title type="text">GitHub 提交邮箱隐私与 Git 多身份配置</title>
      <published>2026-07-27T00:00:00.000Z</published>
      <updated>2026-09-11T00:00:00.000Z</updated>
      <author><name>YYQ</name></author>
      <link rel="alternate" href="https://yyq-firefly.pages.dev/posts/50-tutorials/windows/github-%E6%8F%90%E4%BA%A4%E9%82%AE%E7%AE%B1%E9%9A%90%E7%A7%81%E4%B8%8E-git-%E5%A4%9A%E8%BA%AB%E4%BB%BD%E9%85%8D%E7%BD%AE/"/>
      <summary type="text"></summary>
      <content type="html"><![CDATA[<section><h1>GitHub 提交邮箱隐私与 Git 多身份配置<a href="#github-提交邮箱隐私与-git-多身份配置"><span>#</span></a></h1><section><h2>目标<a href="#目标"><span>#</span></a></h2><p>实现以下效果：</p><ul>
<li>GitHub 提交记录不公开真实邮箱。</li>
<li>默认使用 GitHub 身份提交。</li>
<li>公司项目目录自动切换为公司身份。</li>
<li>避免每次进入仓库后手动修改 <code>user.name</code> 和 <code>user.email</code>。</li>
<li>阻止命令行推送意外暴露真实邮箱。</li>
</ul><blockquote><p>本文全部使用占位符，不包含真实姓名、邮箱、用户名或本机目录。</p></blockquote><hr /></section><section><h2>一、GitHub 需要开启的两个邮箱隐私设置<a href="#一github-需要开启的两个邮箱隐私设置"><span>#</span></a></h2><p>进入：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>GitHub 头像 → Settings → Emails</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>开启以下两个选项。</p><section><h3>1. Keep my email addresses private<a href="#1-keep-my-email-addresses-private"><span>#</span></a></h3><p>作用：</p><ul>
<li>隐藏 GitHub 网页端提交使用的真实邮箱。</li>
<li>使用 GitHub 提供的 <code>noreply</code> 邮箱。</li>
<li>降低真实邮箱出现在公开提交记录中的风险。</li>
</ul><p>GitHub 提供的匿名邮箱通常类似：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>&lt;ACCOUNT_ID&gt;+&lt;GITHUB_USERNAME&gt;@users.noreply.github.com</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>请从 GitHub 的 <strong>Settings → Emails</strong> 页面复制自己的实际地址，不要手动猜测。</p></section><section><h3>2. Block command line pushes that expose my email<a href="#2-block-command-line-pushes-that-expose-my-email"><span>#</span></a></h3><p>作用：</p><ul>
<li>当命令行提交使用了受保护的真实邮箱时阻止推送。</li>
<li>防止新电脑、旧仓库或错误配置意外暴露邮箱。</li>
<li>作为 Git 本地配置之外的第二层保护。</li>
</ul><blockquote><p>这两个设置属于 GitHub 账户的邮箱隐私设置，不是仓库的 Secret scanning 或 Push protection。</p></blockquote><hr /></section></section><section><h2>二、与仓库安全扫描功能的区别<a href="#二与仓库安全扫描功能的区别"><span>#</span></a></h2><section><h3>邮箱隐私设置<a href="#邮箱隐私设置"><span>#</span></a></h3><p>位置：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>GitHub Settings → Emails</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>主要保护：</p><ul>
<li>Commit 作者邮箱</li>
<li>GitHub 账户真实邮箱</li>
<li>命令行推送时的邮箱隐私</li>
</ul></section><section><h3>Secret scanning<a href="#secret-scanning"><span>#</span></a></h3><p>主要扫描：</p><ul>
<li>API Key</li>
<li>Access Token</li>
<li>云服务密钥</li>
<li>数据库凭证</li>
<li>私钥及其他敏感凭证</li>
</ul></section><section><h3>Push protection<a href="#push-protection"><span>#</span></a></h3><p>主要作用：</p><ul>
<li>在敏感凭证进入仓库前阻止推送。</li>
<li>保护的是代码中的密钥，不是 Commit 作者邮箱。</li>
</ul><hr /></section></section><section><h2>三、设置默认 GitHub 提交身份<a href="#三设置默认-github-提交身份"><span>#</span></a></h2><p>默认身份用于：</p><ul>
<li>个人项目</li>
<li>开源项目</li>
<li>知识库</li>
<li>非公司目录下的其他 Git 仓库</li>
</ul><p>执行：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span><span>git config </span><span>--</span><span>global user.name </span></span><span>"&lt;GITHUB_USERNAME&gt;"</span></div></div><div><div><div>2</div></div><div><span><span>git config </span><span>--</span><span>global user.email </span></span><span>"&lt;GITHUB_NOREPLY_EMAIL&gt;"</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>示例占位形式：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span><span>git config </span><span>--</span><span>global user.name </span></span><span>"&lt;GITHUB_USERNAME&gt;"</span></div></div><div><div><div>2</div></div><div><span><span>git config </span><span>--</span><span>global user.email </span></span><span>"&lt;ACCOUNT_ID&gt;+&lt;GITHUB_USERNAME&gt;@users.noreply.github.com"</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>检查：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span><span>git config </span><span>--</span><span>global user.name</span></span></div></div><div><div><div>2</div></div><div><span><span>git config </span><span>--</span><span>global user.email</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section><section><h2>四、创建公司专用 Git 配置<a href="#四创建公司专用-git-配置"><span>#</span></a></h2><p>在用户主目录创建：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>~/.gitconfig-company</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>Windows PowerShell 可使用：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>notepad </span><span>$HOME</span><span><span>\.gitconfig</span><span>-</span><span>company</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>内容：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>[user]</span></div></div><div><div><div>2</div></div><div><span><span>    </span></span><span>name = &lt;COMPANY_GIT_NAME&gt;</span></div></div><div><div><div>3</div></div><div><span><span>    </span></span><span>email = &lt;COMPANY_GIT_EMAIL&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>该文件只保存公司提交身份。</p><hr /></section><section><h2>五、按目录自动切换身份<a href="#五按目录自动切换身份"><span>#</span></a></h2><p>打开全局 Git 配置：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span><span>git config </span><span>--</span><span>global </span><span>--</span><span>edit</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>添加：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>[user]</span></div></div><div><div><div>2</div></div><div><span><span>    </span></span><span>name = &lt;GITHUB_USERNAME&gt;</span></div></div><div><div><div>3</div></div><div><span><span>    </span></span><span>email = &lt;GITHUB_NOREPLY_EMAIL&gt;</span></div></div><div><div><div>4</div></div><div>
</div></div><div><div><div>5</div></div><div><span>[includeIf "gitdir/i:&lt;COMPANY_GIT_ROOT&gt;/"]</span></div></div><div><div><div>6</div></div><div><span><span>    </span></span><span>path = ~/.gitconfig-company</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>Windows 路径示例使用占位符：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>[includeIf "gitdir/i:D:/&lt;COMPANY_PROJECTS&gt;/"]</span></div></div><div><div><div>2</div></div><div><span><span>    </span></span><span>path = ~/.gitconfig-company</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>配置逻辑：</p><ul>
<li>默认使用 GitHub 身份。</li>
<li>仓库位于公司项目根目录下时，自动加载公司身份。</li>
<li><code>gitdir/i</code> 表示路径匹配时忽略大小写。</li>
<li>路径结尾建议保留 <code>/</code>。</li>
<li>Git 配置中建议使用 <code>/</code>，不要使用 Windows 反斜杠 <code>\</code>。</li>
</ul><hr /></section><section><h2>六、推荐目录结构<a href="#六推荐目录结构"><span>#</span></a></h2><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>D:/Git/Company/</span></div></div><div><div><div>2</div></div><div><span>D:/Git/Personal/</span></div></div><div><div><div>3</div></div><div><span>D:/Git/OpenSource/</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>对应配置：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>[user]</span></div></div><div><div><div>2</div></div><div><span><span>    </span></span><span>name = &lt;GITHUB_USERNAME&gt;</span></div></div><div><div><div>3</div></div><div><span><span>    </span></span><span>email = &lt;GITHUB_NOREPLY_EMAIL&gt;</span></div></div><div><div><div>4</div></div><div>
</div></div><div><div><div>5</div></div><div><span>[includeIf "gitdir/i:D:/Git/Company/"]</span></div></div><div><div><div>6</div></div><div><span><span>    </span></span><span>path = ~/.gitconfig-company</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>最终效果：</p>

<table><thead><tr><th>仓库位置</th><th>自动使用的身份</th></tr></thead><tbody><tr><td><code>D:/Git/Company/</code></td><td>公司姓名与公司邮箱</td></tr><tr><td><code>D:/Git/Personal/</code></td><td>GitHub 用户名与 noreply 邮箱</td></tr><tr><td><code>D:/Git/OpenSource/</code></td><td>GitHub 用户名与 noreply 邮箱</td></tr></tbody></table><hr /></section><section><h2>七、检查当前仓库使用的身份<a href="#七检查当前仓库使用的身份"><span>#</span></a></h2><p>进入任意 Git 仓库后执行：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span><span>git config </span><span>--</span><span>get user.name</span></span></div></div><div><div><div>2</div></div><div><span><span>git config </span><span>--</span><span>get user.email</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>查看配置来源：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span><span>git config </span><span>--</span></span><span>show-origin</span><span><span> </span><span>--</span><span>get user.name</span></span></div></div><div><div><div>2</div></div><div><span><span>git config </span><span>--</span></span><span>show-origin</span><span><span> </span><span>--</span><span>get user.email</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>一次查看身份配置及来源：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span><span>git config </span><span>--</span></span><span>show-origin</span><span><span> </span><span>--</span></span><span>get-regexp</span><span> </span><span>"^user\.(name|email)$"</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>查看 Git 实际准备使用的作者与提交者身份：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>git </span><span>var</span><span> GIT_AUTHOR_IDENT</span></div></div><div><div><div>2</div></div><div><span>git </span><span>var</span><span> GIT_COMMITTER_IDENT</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section><section><h2>八、仓库级配置可能覆盖自动配置<a href="#八仓库级配置可能覆盖自动配置"><span>#</span></a></h2><p>Git 配置通常按照以下优先级生效：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>系统级配置</span></div></div><div><div><div>2</div></div><div><span>&lt; 全局配置</span></div></div><div><div><div>3</div></div><div><span>&lt; includeIf 加载的配置</span></div></div><div><div><div>4</div></div><div><span>&lt; 当前仓库本地配置</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>检查当前仓库是否存在本地身份配置：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span><span>git config </span><span>--</span><span>local </span><span>--</span><span>get user.name</span></span></div></div><div><div><div>2</div></div><div><span><span>git config </span><span>--</span><span>local </span><span>--</span><span>get user.email</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>如需删除本地覆盖：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span><span>git config </span><span>--</span><span>local </span><span>--</span><span>unset user.name</span></span></div></div><div><div><div>2</div></div><div><span><span>git config </span><span>--</span><span>local </span><span>--</span><span>unset user.email</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>删除后重新检查：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span><span>git config </span><span>--</span><span>get user.name</span></span></div></div><div><div><div>2</div></div><div><span><span>git config </span><span>--</span><span>get user.email</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section><section><h2>九、检查最近提交使用的邮箱<a href="#九检查最近提交使用的邮箱"><span>#</span></a></h2><p>查看最近一次提交：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>git log </span><span>-1</span><span><span> </span><span>--</span><span>format</span><span>=</span></span><span>"作者：%an &lt;%ae&gt;%n提交者：%cn &lt;%ce&gt;"</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>查看最近 10 次提交：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>git log </span><span>-10</span><span><span> </span><span>--</span><span>format</span><span>=</span></span><span>"%h | %an &lt;%ae&gt; | %s"</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>PowerShell 中查看历史中出现过的全部邮箱：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span><span>git log </span><span>--</span><span>format</span><span>=</span></span><span>"%ae"</span><span> | </span><span>Sort-Object</span><span><span> </span><span>-</span><span>Unique</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section><section><h2>十、错误邮箱尚未推送时的处理<a href="#十错误邮箱尚未推送时的处理"><span>#</span></a></h2><p>如果已经 Commit，但尚未 Push：</p><ol>
<li>先确认当前身份配置正确：</li>
</ol><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>git config user.name</span></div></div><div><div><div>2</div></div><div><span>git config user.email</span></div></div></code></pre><div><div></div><div></div></div></figure></div><ol>
<li>重写最后一次提交的作者信息：</li>
</ol><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span><span>git commit </span><span>--</span><span>amend </span><span>--</span></span><span>reset-author</span><span><span> </span><span>--</span><span>no</span><span>-</span><span>edit</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div><ol>
<li>再次检查：</li>
</ol><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>git log </span><span>-1</span><span><span> </span><span>--</span><span>format</span><span>=</span></span><span>"作者：%an &lt;%ae&gt;%n提交者：%cn &lt;%ce&gt;"</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section><section><h2>十一、错误邮箱已经推送时的说明<a href="#十一错误邮箱已经推送时的说明"><span>#</span></a></h2><p>修改 Git 配置只影响之后创建的 Commit。</p><p>已经推送的提交：</p><ul>
<li>不会自动改成新邮箱。</li>
<li>旧邮箱仍可能保留在 Git 历史中。</li>
<li>修改历史通常需要重写 Commit 并强制推送。</li>
<li>多人协作仓库不建议随意重写历史。</li>
</ul><p>个人仓库确实需要清理时，可使用：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>git filter-repo</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>在操作前应先备份仓库。</p><hr /></section><section><h2>十二、GitHub 如何关联提交到账号<a href="#十二github-如何关联提交到账号"><span>#</span></a></h2><p>GitHub 通常根据 Commit 邮箱判断提交属于哪个账号。</p><p>要让提交正确关联到 GitHub 账号，邮箱应满足以下任一条件：</p><ol>
<li>使用 GitHub 账户中已验证的邮箱。</li>
<li>使用 GitHub 提供的 <code>noreply</code> 邮箱。</li>
</ol><p>隐私优先时推荐：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>&lt;ACCOUNT_ID&gt;+&lt;GITHUB_USERNAME&gt;@users.noreply.github.com</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section><section><h2>十三、可选：PowerShell 身份检查函数<a href="#十三可选powershell-身份检查函数"><span>#</span></a></h2><p>将下面内容加入 PowerShell 配置文件：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>function</span><span> </span><span>git-whoami</span><span> {</span></div></div><div><div><div>2</div></div><div><span>    </span><span>Write-Host</span><span> </span><span>"仓库目录："</span><span> (</span><span>Get-Location</span><span>)</span></div></div><div><div><div>3</div></div><div><span>    </span><span>Write-Host</span><span> </span><span>"Git 用户名："</span><span> (git config user.name)</span></div></div><div><div><div>4</div></div><div><span>    </span><span>Write-Host</span><span> </span><span>"Git 邮箱："</span><span> (git config user.email)</span></div></div><div><div><div>5</div></div><div><span>    </span><span>Write-Host</span><span> </span><span>""</span></div></div><div><div><div>6</div></div><div><span>    </span><span>Write-Host</span><span> </span><span>"配置来源："</span></div></div><div><div><div>7</div></div><div><span><span>    </span></span><span>git config </span><span>--</span><span>show-origin</span><span><span> </span><span>--</span></span><span>get-regexp</span><span> </span><span>"^user\.(name|email)$"</span></div></div><div><div><div>8</div></div><div><span>}</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>进入仓库后执行：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span><span>git</span><span>-</span><span>whoami</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>即可查看当前提交身份。</p><hr /></section><section><h2>十四、配置检查清单<a href="#十四配置检查清单"><span>#</span></a></h2><ul>
<li> 已开启 <code>Keep my email addresses private</code></li>
<li> 已开启 <code>Block command line pushes that expose my email</code></li>
<li> 已从 GitHub 页面复制正确的 <code>noreply</code> 邮箱</li>
<li> 已设置默认 GitHub 用户名</li>
<li> 已设置默认 GitHub <code>noreply</code> 邮箱</li>
<li> 已创建 <code>~/.gitconfig-company</code></li>
<li> 已添加按目录匹配的 <code>includeIf</code></li>
<li> 公司目录路径末尾保留 <code>/</code></li>
<li> 已在个人仓库检查身份</li>
<li> 已在公司仓库检查身份</li>
<li> 已检查仓库级配置是否覆盖全局配置</li>
<li> 已检查最近一次 Commit 的作者邮箱</li>
</ul><hr /></section><section><h2>核心配置模板<a href="#核心配置模板"><span>#</span></a></h2><p>全局配置：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>[user]</span></div></div><div><div><div>2</div></div><div><span><span>    </span></span><span>name = &lt;GITHUB_USERNAME&gt;</span></div></div><div><div><div>3</div></div><div><span><span>    </span></span><span>email = &lt;GITHUB_NOREPLY_EMAIL&gt;</span></div></div><div><div><div>4</div></div><div>
</div></div><div><div><div>5</div></div><div><span>[includeIf "gitdir/i:&lt;COMPANY_GIT_ROOT&gt;/"]</span></div></div><div><div><div>6</div></div><div><span><span>    </span></span><span>path = ~/.gitconfig-company</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>公司身份配置：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>[user]</span></div></div><div><div><div>2</div></div><div><span><span>    </span></span><span>name = &lt;COMPANY_GIT_NAME&gt;</span></div></div><div><div><div>3</div></div><div><span><span>    </span></span><span>email = &lt;COMPANY_GIT_EMAIL&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>最终策略：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>默认目录：GitHub 用户名 + GitHub noreply 邮箱</span></div></div><div><div><div>2</div></div><div><span>公司目录：公司提交姓名 + 公司邮箱</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section></section>]]></content>
    </entry>
    <entry>
      <id>https://yyq-firefly.pages.dev/posts/50-tutorials/%E7%BD%91%E7%BB%9C%E4%B8%8E%E5%9F%9F%E5%90%8D/%E4%B8%BA-linuxdo-%E6%8C%87%E5%AE%9A%E5%9B%BA%E5%AE%9A-dns-%E4%B8%8E%E7%9B%B4%E8%BF%9E%E8%A7%84%E5%88%99/</id>
      <title type="text">为 Linux.do 指定固定 DNS 与直连规则</title>
      <published>2026-07-22T00:00:00.000Z</published>
      <updated>2026-09-11T00:00:00.000Z</updated>
      <author><name>YYQ</name></author>
      <link rel="alternate" href="https://yyq-firefly.pages.dev/posts/50-tutorials/%E7%BD%91%E7%BB%9C%E4%B8%8E%E5%9F%9F%E5%90%8D/%E4%B8%BA-linuxdo-%E6%8C%87%E5%AE%9A%E5%9B%BA%E5%AE%9A-dns-%E4%B8%8E%E7%9B%B4%E8%BF%9E%E8%A7%84%E5%88%99/"/>
      <summary type="text"></summary>
      <content type="html"><![CDATA[<section><h1>为 Linux.do 指定固定 DNS 与直连规则<a href="#为-linuxdo-指定固定-dns-与直连规则"><span>#</span></a></h1><section><h2>目标<a href="#目标"><span>#</span></a></h2><p>让访问 <code>linux.do</code> 时：</p><ol>
<li>固定使用指定的 DoH DNS 解析；</li>
<li>网站流量使用 <code>DIRECT</code> 直连；</li>
<li>机场节点失效时，只要 Clash/Mihomo 内核仍在运行，Linux.do 仍可尝试正常访问；</li>
<li>分别适配 Clash Verge Rev 和 FlClash；</li>
<li>能够通过“请求/连接”页面验证规则是否真正命中。</li>
</ol><div><div><div></div><div>Important</div></div><div><p>DNS 只负责把域名解析为 IP，并不能保证网站一定能够直连。</p><p>这套方案只能处理：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>机场节点失效</span></div></div><div><div><div>2</div></div><div><span>+</span></div></div><div><div><div>3</div></div><div><span>Clash/Mihomo 内核仍在运行</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>如果代理客户端完全退出、内核停止，客户端内部的 DNS 和规则都会失效。</p></div></div><hr /></section><section><h2>一、整体原理<a href="#一整体原理"><span>#</span></a></h2><p>访问链路：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>浏览器或应用</span></div></div><div><div><div>2</div></div><div><span><span>  </span></span><span>↓</span></div></div><div><div><div>3</div></div><div><span>Clash Verge Rev / FlClash</span></div></div><div><div><div>4</div></div><div><span><span>  </span></span><span>↓</span></div></div><div><div><div>5</div></div><div><span>Mihomo 匹配 linux.do</span></div></div><div><div><div>6</div></div><div><span><span>  </span></span><span>├─ DNS：指定 DoH</span></div></div><div><div><div>7</div></div><div><span><span>  </span></span><span>└─ 出站：DIRECT</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>需要同时配置两部分：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>nameserver-policy</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>负责指定 DNS。</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>DOMAIN-SUFFIX,linux.do,DIRECT</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>负责指定网站流量直连。</p><p>只配置 DNS、不配置 <code>DIRECT</code>，可能出现：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>域名使用了指定 DNS</span></div></div><div><div><div>2</div></div><div><span>但网站流量仍然走代理节点</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>只配置 <code>DIRECT</code>、不配置 DNS，可能出现：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>网站已直连</span></div></div><div><div><div>2</div></div><div><span>但仍使用默认 DNS，解析结果可能不理想</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section><section><h2>二、核心配置含义<a href="#二核心配置含义"><span>#</span></a></h2><section><h3>1. 域名匹配<a href="#1-域名匹配"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>"+.linux.do"</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>匹配：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>linux.do</span></div></div><div><div><div>2</div></div><div><span>www.linux.do</span></div></div><div><div><div>3</div></div><div><span>api.linux.do</span></div></div><div><div><div>4</div></div><div><span>其他多级子域名</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>2. 直连规则<a href="#2-直连规则"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>DOMAIN-SUFFIX,linux.do,DIRECT</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>表示：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>linux.do 及其所有子域名</span></div></div><div><div><div>2</div></div><div><span>→ 使用 DIRECT</span></div></div><div><div><div>3</div></div><div><span>→ 不经过机场代理节点</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>3. DNS 地址后的 <code>#DIRECT</code><a href="#3-dns-地址后的-direct"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>https://你的DNS地址/dns-query#DIRECT</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>表示连接这个 DoH 服务器本身时也使用直连，不依赖代理节点。</p><div><div><div></div><div>Warning</div></div><div><p>前提是该 DoH 地址从当前网络可以直接访问。</p><p>如果该 DNS 本身必须通过代理才能访问，就不要添加 <code>#DIRECT</code>，或者更换为可直连的 DNS。</p></div></div><hr /></section></section><section><h2>三、Clash Verge Rev 配置<a href="#三clash-verge-rev-配置"><span>#</span></a></h2><section><h3>1. 找到 Merge 配置<a href="#1-找到-merge-配置"><span>#</span></a></h3><p>新版 Clash Verge Rev 中，Merge 配置显示为：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>全局扩展覆写配置</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>路径：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Clash Verge Rev</span></div></div><div><div><div>2</div></div><div><span>→ 订阅</span></div></div><div><div><div>3</div></div><div><span>→ 全局扩展覆写配置</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>右上角通常会显示：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Merge</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>不要直接编辑机场订阅原文件，否则订阅更新后可能覆盖修改。</p><hr /></section><section><h3>2. Linux.do 固定 DNS + 直连<a href="#2-linuxdo-固定-dns--直连"><span>#</span></a></h3><p>编辑“全局扩展覆写配置”：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span># Clash Verge Rev：Linux.do 固定 DNS + 直连</span></div></div><div><div><div>2</div></div><div>
</div></div><div><div><div>3</div></div><div><span>profile</span><span>:</span></div></div><div><div><div>4</div></div><div><span>  </span><span>store-selected</span><span>: </span><span>true</span></div></div><div><div><div>5</div></div><div>
</div></div><div><div><div>6</div></div><div><span>prepend-rules</span><span>:</span></div></div><div><div><div>7</div></div><div><span><span>  </span></span><span>- </span><span>DOMAIN-SUFFIX,linux.do,DIRECT</span></div></div><div><div><div>8</div></div><div>
</div></div><div><div><div>9</div></div><div><span>dns</span><span>:</span></div></div><div><div><div>10</div></div><div><span>  </span><span>enable</span><span>: </span><span>true</span></div></div><div><div><div>11</div></div><div><span>  </span><span>nameserver-policy</span><span>:</span></div></div><div><div><div>12</div></div><div><span>    </span><span>"+.linux.do"</span><span>:</span></div></div><div><div><div>13</div></div><div><span><span>      </span></span><span>- </span><span>"https://你的DNS地址/dns-query#DIRECT"</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>将：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>https://你的DNS地址/dns-query</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>替换为真实的 DoH 地址。</p><p>示例：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>profile</span><span>:</span></div></div><div><div><div>2</div></div><div><span>  </span><span>store-selected</span><span>: </span><span>true</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span>prepend-rules</span><span>:</span></div></div><div><div><div>5</div></div><div><span><span>  </span></span><span>- </span><span>DOMAIN-SUFFIX,linux.do,DIRECT</span></div></div><div><div><div>6</div></div><div>
</div></div><div><div><div>7</div></div><div><span>dns</span><span>:</span></div></div><div><div><div>8</div></div><div><span>  </span><span>enable</span><span>: </span><span>true</span></div></div><div><div><div>9</div></div><div><span>  </span><span>nameserver-policy</span><span>:</span></div></div><div><div><div>10</div></div><div><span>    </span><span>"+.linux.do"</span><span>:</span></div></div><div><div><div>11</div></div><div><span><span>      </span></span><span>- </span><span>"https://cloudflare-dns.com/dns-query#DIRECT"</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section><section><h3>3. 配置多个 DNS<a href="#3-配置多个-dns"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>profile</span><span>:</span></div></div><div><div><div>2</div></div><div><span>  </span><span>store-selected</span><span>: </span><span>true</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span>prepend-rules</span><span>:</span></div></div><div><div><div>5</div></div><div><span><span>  </span></span><span>- </span><span>DOMAIN-SUFFIX,linux.do,DIRECT</span></div></div><div><div><div>6</div></div><div>
</div></div><div><div><div>7</div></div><div><span>dns</span><span>:</span></div></div><div><div><div>8</div></div><div><span>  </span><span>enable</span><span>: </span><span>true</span></div></div><div><div><div>9</div></div><div><span>  </span><span>nameserver-policy</span><span>:</span></div></div><div><div><div>10</div></div><div><span>    </span><span>"+.linux.do"</span><span>:</span></div></div><div><div><div>11</div></div><div><span><span>      </span></span><span>- </span><span>"https://你的专用DNS1/dns-query#DIRECT"</span></div></div><div><div><div>12</div></div><div><span><span>      </span></span><span>- </span><span>"https://你的专用DNS2/dns-query#DIRECT"</span></div></div><div><div><div>13</div></div><div><span><span>      </span></span><span>- </span><span>"https://cloudflare-dns.com/dns-query#DIRECT"</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>建议配置 2～3 个即可。</p><div><div><div></div><div>Note</div></div><div><p>多个 DNS 不应理解为严格的主备顺序。</p><p>更适合把它理解为给 Mihomo 提供多个可用解析器，提高整体可用性。</p></div></div><hr /></section><section><h3>4. 已有 <code>dns:</code> 时的处理<a href="#4-已有-dns-时的处理"><span>#</span></a></h3><p>YAML 中不能重复两个同级 <code>dns:</code>。</p><p>错误：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>dns</span><span>:</span></div></div><div><div><div>2</div></div><div><span>  </span><span>ipv6</span><span>: </span><span>false</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span>dns</span><span>:</span></div></div><div><div><div>5</div></div><div><span>  </span><span>enable</span><span>: </span><span>true</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>正确：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>dns</span><span>:</span></div></div><div><div><div>2</div></div><div><span>  </span><span>ipv6</span><span>: </span><span>false</span></div></div><div><div><div>3</div></div><div><span>  </span><span>enable</span><span>: </span><span>true</span></div></div><div><div><div>4</div></div><div><span>  </span><span>nameserver-policy</span><span>:</span></div></div><div><div><div>5</div></div><div><span>    </span><span>"+.linux.do"</span><span>:</span></div></div><div><div><div>6</div></div><div><span><span>      </span></span><span>- </span><span>"https://你的DNS地址/dns-query#DIRECT"</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section><section><h3>5. 保存和生效<a href="#5-保存和生效"><span>#</span></a></h3><p>保存后：</p><ol>
<li>刷新机场订阅；</li>
<li>必要时重启 Mihomo 内核；</li>
<li>重启浏览器；</li>
<li>打开 Linux.do 测试。</li>
</ol><p>Windows 可以清理 DNS 缓存：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span><span>ipconfig </span><span>/</span><span>flushdns</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section></section><section><h2>四、FlClash 图形界面配置<a href="#四flclash-图形界面配置"><span>#</span></a></h2><p>FlClash 可以不写 YAML，分别配置：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>DNS 覆写</span></div></div><div><div><div>2</div></div><div><span>+</span></div></div><div><div><div>3</div></div><div><span>附加规则</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /><section><h3>1. 打开 DNS 覆写<a href="#1-打开-dns-覆写"><span>#</span></a></h3><p>路径通常为：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>FlClash</span></div></div><div><div><div>2</div></div><div><span>→ 工具</span></div></div><div><div><div>3</div></div><div><span>→ 覆写</span></div></div><div><div><div>4</div></div><div><span>→ 进阶配置</span></div></div><div><div><div>5</div></div><div><span>→ DNS</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>推荐设置：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>覆写 DNS：开启</span></div></div><div><div><div>2</div></div><div><span>状态：开启</span></div></div><div><div><div>3</div></div><div><span>IPv6：关闭</span></div></div><div><div><div>4</div></div><div><span>遵守规则：关闭</span></div></div><div><div><div>5</div></div><div><span>PreferH3：关闭</span></div></div><div><div><div>6</div></div><div><span>DNS 模式：fakeip</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>说明：</p><ul>
<li><strong>覆写 DNS</strong>：用 FlClash 的 DNS 设置覆盖订阅中的 DNS；</li>
<li><strong>状态</strong>：关闭后会退回系统 DNS；</li>
<li><strong>遵守规则</strong>：当前场景建议关闭，避免 DNS 查询跟随代理规则；</li>
<li><strong>PreferH3</strong>：不是必须，可以保持关闭；</li>
<li><strong>fakeip</strong>：可以继续使用，不影响本教程。</li>
</ul><hr /></section><section><h3>2. 配置域名服务器策略<a href="#2-配置域名服务器策略"><span>#</span></a></h3><p>进入：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>DNS</span></div></div><div><div><div>2</div></div><div><span>→ 域名服务器策略</span></div></div><div><div><div>3</div></div><div><span>→ 添加</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>填写：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>键：</span></div></div><div><div><div>2</div></div><div><span>+.linux.do</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span>值：</span></div></div><div><div><div>5</div></div><div><span>https://你的DNS地址/dns-query#DIRECT</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>最终应显示类似：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>+.linux.do</span></div></div><div><div><div>2</div></div><div><span>https://你的DNS地址/dns-query#DIRECT</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>这部分等价于：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>dns</span><span>:</span></div></div><div><div><div>2</div></div><div><span>  </span><span>enable</span><span>: </span><span>true</span></div></div><div><div><div>3</div></div><div><span>  </span><span>nameserver-policy</span><span>:</span></div></div><div><div><div>4</div></div><div><span>    </span><span>"+.linux.do"</span><span>: </span><span>"https://你的DNS地址/dns-query#DIRECT"</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section><section><h3>3. 删除默认示例策略<a href="#3-删除默认示例策略"><span>#</span></a></h3><p>FlClash 的域名服务器策略中可能默认出现：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>www.baidu.com</span></div></div><div><div><div>2</div></div><div><span>114.114.114.114</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span>+.internal.crop.com</span></div></div><div><div><div>5</div></div><div><span>10.0.0.1</span></div></div><div><div><div>6</div></div><div>
</div></div><div><div><div>7</div></div><div><span>geosite:cn</span></div></div><div><div><div>8</div></div><div><span>https://doh.pub/dns-query</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>如果只想让 Linux.do 使用指定 DNS，建议删除这些示例，只保留：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>+.linux.do</span></div></div><div><div><div>2</div></div><div><span>https://你的DNS地址/dns-query#DIRECT</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>其中：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>geosite:cn</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>会影响大量中国大陆域名，而不只是 Linux.do。</p><hr /></section><section><h3>4. 添加 Linux.do 直连规则<a href="#4-添加-linuxdo-直连规则"><span>#</span></a></h3><p>路径：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>FlClash</span></div></div><div><div><div>2</div></div><div><span>→ 工具</span></div></div><div><div><div>3</div></div><div><span>→ 覆写</span></div></div><div><div><div>4</div></div><div><span>→ 进阶配置</span></div></div><div><div><div>5</div></div><div><span>→ 附加规则</span></div></div><div><div><div>6</div></div><div><span>→ 添加</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>填写：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>规则类型：DOMAIN-SUFFIX</span></div></div><div><div><div>2</div></div><div><span>内容：linux.do</span></div></div><div><div><div>3</div></div><div><span>规则目标：DIRECT</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>保存后的卡片应类似：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>DOMAIN_SUFFIX                 DIRECT</span></div></div><div><div><div>2</div></div><div><span>linux.do</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>最终等价于：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>DOMAIN-SUFFIX,linux.do,DIRECT</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section><section><h3>5. 常见填写错误<a href="#5-常见填写错误"><span>#</span></a></h3><p>错误填写：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>规则类型：DOMAIN-SUFFIX</span></div></div><div><div><div>2</div></div><div><span>内容：DOMAIN-SUFFIX</span></div></div><div><div><div>3</div></div><div><span>规则目标：DIRECT</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>这相当于：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>DOMAIN-SUFFIX,DOMAIN-SUFFIX,DIRECT</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>不会匹配 Linux.do。</p><p>正确填写：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>规则类型：DOMAIN-SUFFIX</span></div></div><div><div><div>2</div></div><div><span>内容：linux.do</span></div></div><div><div><div>3</div></div><div><span>规则目标：DIRECT</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section><section><h3>6. 为什么没有“不解析 IP”和“匹配来源 IP”<a href="#6-为什么没有不解析-ip和匹配来源-ip"><span>#</span></a></h3><p>这是正常现象。</p><p><code>DOMAIN-SUFFIX</code> 是域名规则，不需要这些参数。</p><p>FlClash 只会在部分 IP 类规则中显示附加参数，例如：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>GEOIP</span></div></div><div><div><div>2</div></div><div><span>IP-CIDR</span></div></div><div><div><div>3</div></div><div><span>IP-CIDR6</span></div></div><div><div><div>4</div></div><div><span>IP-ASN</span></div></div><div><div><div>5</div></div><div><span>RULE-SET</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>所以对 Linux.do 的域名后缀规则，只需填写：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>DOMAIN-SUFFIX</span></div></div><div><div><div>2</div></div><div><span>linux.do</span></div></div><div><div><div>3</div></div><div><span>DIRECT</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>没有以下选项并不代表配置不完整：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>不解析 IP</span></div></div><div><div><div>2</div></div><div><span>匹配来源 IP</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section><section><h3>7. FlClash 图形界面的多个 DNS 限制<a href="#7-flclash-图形界面的多个-dns-限制"><span>#</span></a></h3><p>FlClash 的“域名服务器策略”图形界面通常是一组：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>键 → 单个值</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>因此一个域名在图形界面里通常只能直接对应一个 DNS 字符串。</p><p>推荐先这样配置：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>+.linux.do</span></div></div><div><div><div>2</div></div><div><span>→ https://你的主要DNS/dns-query#DIRECT</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>如果必须给 Linux.do 配置多个 DNS，可以改用 FlClash 的覆写脚本。</p><hr /></section></section><section><h2>五、FlClash 多 DNS 覆写脚本<a href="#五flclash-多-dns-覆写脚本"><span>#</span></a></h2><p>路径：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>FlClash</span></div></div><div><div><div>2</div></div><div><span>→ 工具</span></div></div><div><div><div>3</div></div><div><span>→ 覆写</span></div></div><div><div><div>4</div></div><div><span>→ 进阶配置</span></div></div><div><div><div>5</div></div><div><span>→ 脚本</span></div></div><div><div><div>6</div></div><div><span>→ 添加</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>脚本：</p><div><div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>const</span><span> </span><span>main</span><span> </span><span>=</span><span><span> (</span><span>config</span><span>) </span></span><span>=&gt;</span><span> {</span></div></div><div><div><div>2</div></div><div><span>  </span><span>if</span><span> (</span><span>!</span><span><span>config</span><span>.</span></span><span>dns</span><span>) {</span></div></div><div><div><div>3</div></div><div><span><span>    </span></span><span>config</span><span>.</span><span>dns</span><span> </span><span>=</span><span> {};</span></div></div><div><div><div>4</div></div><div><span><span>  </span></span><span>}</span></div></div><div><div><div>5</div></div><div>
</div></div><div><div><div>6</div></div><div><span><span>  </span></span><span>config</span><span>.</span><span>dns</span><span>.</span><span>enable</span><span> </span><span>=</span><span> </span><span>true</span><span>;</span></div></div><div><div><div>7</div></div><div><span><span>  </span></span><span>config</span><span>.</span><span>dns</span><span>[</span><span>"respect-rules"</span><span>] </span><span>=</span><span> </span><span>false</span><span>;</span></div></div><div><div><div>8</div></div><div>
</div></div><div><div><div>9</div></div><div><span>  </span><span>if</span><span> (</span><span>!</span><span><span>config</span><span>.</span></span><span>dns</span><span>[</span><span>"nameserver-policy"</span><span>]) {</span></div></div><div><div><div>10</div></div><div><span><span>    </span></span><span>config</span><span>.</span><span>dns</span><span>[</span><span>"nameserver-policy"</span><span>] </span><span>=</span><span> {};</span></div></div><div><div><div>11</div></div><div><span><span>  </span></span><span>}</span></div></div><div><div><div>12</div></div><div>
</div></div><div><div><div>13</div></div><div><span><span>  </span></span><span>config</span><span>.</span><span>dns</span><span>[</span><span>"nameserver-policy"</span><span>][</span><span>"+.linux.do"</span><span>] </span><span>=</span><span> [</span></div></div><div><div><div>14</div></div><div><span>    </span><span>"https://你的专用DNS1/dns-query#DIRECT"</span><span>,</span></div></div><div><div><div>15</div></div><div><span>    </span><span>"https://你的专用DNS2/dns-query#DIRECT"</span></div></div><div><div><div>16</div></div><div><span><span>  </span></span><span>];</span></div></div><div><div><div>17</div></div><div>
</div></div><div><div><div>18</div></div><div><span>  </span><span>if</span><span> (</span><span>!</span><span><span>Array</span><span>.</span></span><span>isArray</span><span><span>(</span><span>config</span><span>.</span></span><span>rules</span><span>)) {</span></div></div><div><div><div>19</div></div><div><span><span>    </span></span><span>config</span><span>.</span><span>rules</span><span> </span><span>=</span><span> [];</span></div></div><div><div><div>20</div></div><div><span><span>  </span></span><span>}</span></div></div><div><div><div>21</div></div><div>
</div></div><div><div><div>22</div></div><div><span><span>  </span></span><span>config</span><span>.</span><span>rules</span><span> </span><span>=</span><span><span> </span><span>config</span><span>.</span></span><span>rules</span><span>.</span><span>filter</span><span>(</span></div></div><div><div><div>23</div></div><div><span><span>    </span></span><span>(</span><span>rule</span><span>) </span><span>=&gt;</span><span><span> </span><span>rule</span><span> </span></span><span>!==</span><span> </span><span>"DOMAIN-SUFFIX,linux.do,DIRECT"</span></div></div><div><div><div>24</div></div><div><span><span>  </span></span><span>);</span></div></div><div><div><div>25</div></div><div>
</div></div><div><div><div>26</div></div><div><span><span>  </span></span><span>config</span><span>.</span><span>rules</span><span>.</span><span>unshift</span><span>(</span><span>"DOMAIN-SUFFIX,linux.do,DIRECT"</span><span>);</span></div></div><div><div><div>27</div></div><div>
</div></div><div><div><div>28</div></div><div><span>  </span><span>return</span><span><span> </span><span>config</span><span>;</span></span></div></div><div><div><div>29</div></div><div><span>};</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div><p>保存后，把当前订阅的覆写模式切换为：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>脚本</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>并选择刚创建的脚本。</p><div><div><div></div><div>Warning</div></div><div><p>使用脚本方案时，建议关闭 FlClash 图形界面的“覆写 DNS”，避免图形 DNS 配置再次覆盖脚本结果。</p></div></div><hr /></section><section><h2>六、浏览器和 ZeroOmega 注意事项<a href="#六浏览器和-zeroomega-注意事项"><span>#</span></a></h2><p>如果 Chrome 使用 ZeroOmega / Proxy SwitchyOmega：</p><p>不要在 ZeroOmega 中直接把 <code>linux.do</code> 设置为浏览器级 <code>DIRECT</code>，否则请求可能绕过 Clash，Mihomo 的 DNS 策略无法参与。</p><p>正确链路：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Chrome</span></div></div><div><div><div>2</div></div><div><span>→ ZeroOmega</span></div></div><div><div><div>3</div></div><div><span>→ Clash Verge Rev 本地代理端口</span></div></div><div><div><div>4</div></div><div><span>→ Clash 内部匹配 linux.do</span></div></div><div><div><div>5</div></div><div><span>→ DNS 使用指定 DoH</span></div></div><div><div><div>6</div></div><div><span>→ 网站连接使用 DIRECT</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>也就是说：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>浏览器把流量交给 Clash</span></div></div><div><div><div>2</div></div><div><span>Clash 再决定 DIRECT</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section><section><h2>七、验证配置是否真正生效<a href="#七验证配置是否真正生效"><span>#</span></a></h2><section><h3>1. 检查请求或连接<a href="#1-检查请求或连接"><span>#</span></a></h3><p>访问：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>https://linux.do</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>在 Clash Verge Rev 或 FlClash 中打开：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>请求</span></div></div><div><div><div>2</div></div><div><span>或</span></div></div><div><div><div>3</div></div><div><span>连接</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>正确结果应包含：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>目标域名：linux.do</span></div></div><div><div><div>2</div></div><div><span>规则：DOMAIN-SUFFIX</span></div></div><div><div><div>3</div></div><div><span>代理链：DIRECT</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>如果显示：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>节点选择</span></div></div><div><div><div>2</div></div><div><span>→ 某个代理节点</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>说明 DNS 可能已经生效，但 <code>DIRECT</code> 规则没有真正命中。</p><hr /></section><section><h3>2. FlClash 显示代理节点时的完整排查<a href="#2-flclash-显示代理节点时的完整排查"><span>#</span></a></h3><section><h4>第一步：检查出站模式<a href="#第一步检查出站模式"><span>#</span></a></h4><p>进入：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>FlClash</span></div></div><div><div><div>2</div></div><div><span>→ 仪表盘</span></div></div><div><div><div>3</div></div><div><span>→ 出站模式</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>必须选择：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>规则</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>不能是：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>全局</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>如果处于“全局”模式，所有请求都会走当前选择的代理节点，附加的域名规则不会按预期生效。</p><hr /></section><section><h4>第二步：检查当前订阅的覆写模式<a href="#第二步检查当前订阅的覆写模式"><span>#</span></a></h4><p>进入：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>FlClash</span></div></div><div><div><div>2</div></div><div><span>→ 配置</span></div></div><div><div><div>3</div></div><div><span>→ 点击当前正在使用的订阅</span></div></div><div><div><div>4</div></div><div><span>→ 覆写</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>确认覆写模式是：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>标准</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>因为通过图形界面添加的“附加规则”属于标准覆写模式。</p><p>如果当前使用的是：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>脚本</span></div></div><div><div><div>2</div></div><div><span>或</span></div></div><div><div><div>3</div></div><div><span>自定义</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>标准模式中的附加规则可能不会进入最终配置。</p><hr /></section><section><h4>第三步：确认当前订阅启用了全局附加规则<a href="#第三步确认当前订阅启用了全局附加规则"><span>#</span></a></h4><p>在当前订阅的标准覆写页面中找到：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>控制全局附加规则</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>确认：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>DOMAIN-SUFFIX,linux.do,DIRECT</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>处于启用状态。</p><p>需要注意：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>工具 → 附加规则</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>中能够看到规则，只代表规则已经创建。</p><p>当前订阅仍有可能单独禁用了这条全局附加规则。</p><hr /></section><section><h4>第四步：使用“预览”检查最终配置<a href="#第四步使用预览检查最终配置"><span>#</span></a></h4><p>进入当前订阅的覆写页面，点击：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>预览</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>搜索：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>linux.do</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>最终配置中必须存在：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>rules</span><span>:</span></div></div><div><div><div>2</div></div><div><span><span>  </span></span><span>- </span><span>DOMAIN-SUFFIX,linux.do,DIRECT</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>并且它必须位于最终兜底规则之前，例如：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>- </span><span>MATCH,节点选择</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>正确顺序：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>rules</span><span>:</span></div></div><div><div><div>2</div></div><div><span><span>  </span></span><span>- </span><span>DOMAIN-SUFFIX,linux.do,DIRECT</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span>  </span><span># 机场其他规则……</span></div></div><div><div><div>5</div></div><div>
</div></div><div><div><div>6</div></div><div><span><span>  </span></span><span>- </span><span>MATCH,节点选择</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>如果 <code>linux.do</code> 规则位于 <code>MATCH</code> 之后，它永远不会命中。</p><p>如果预览中完全找不到该规则，说明当前订阅没有应用这条附加规则。</p><hr /></section><section><h4>第五步：关闭旧连接<a href="#第五步关闭旧连接"><span>#</span></a></h4><p>规则修改不会自动改变已经建立的 TCP 连接。</p><p>建议执行：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>关闭 Chrome</span></div></div><div><div><div>2</div></div><div><span>→ 在 FlClash 的连接页面关闭现有连接</span></div></div><div><div><div>3</div></div><div><span>→ 停止 FlClash</span></div></div><div><div><div>4</div></div><div><span>→ 重新启动 FlClash</span></div></div><div><div><div>5</div></div><div><span>→ 确认出站模式为“规则”</span></div></div><div><div><div>6</div></div><div><span>→ 重新打开 Chrome</span></div></div><div><div><div>7</div></div><div><span>→ 再访问 Linux.do</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>如果不关闭旧连接，界面中可能仍显示之前使用的代理节点。</p><hr /></section></section><section><h3>3. 模拟节点失效<a href="#3-模拟节点失效"><span>#</span></a></h3><p>可以切换到不可用节点，然后重新访问 Linux.do。</p><p>预期：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>代理节点不可用</span></div></div><div><div><div>2</div></div><div><span>+</span></div></div><div><div><div>3</div></div><div><span>Mihomo 内核仍运行</span></div></div><div><div><div>4</div></div><div><span>+</span></div></div><div><div><div>5</div></div><div><span>linux.do 命中 DIRECT</span></div></div><div><div><div>6</div></div><div><span>+</span></div></div><div><div><div>7</div></div><div><span>指定 DoH 可直连</span></div></div><div><div><div>8</div></div><div><span>=</span></div></div><div><div><div>9</div></div><div><span>Linux.do 仍可尝试打开</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section><section><h3>4. 客户端完全退出时<a href="#4-客户端完全退出时"><span>#</span></a></h3><p>如果 Clash Verge Rev 或 FlClash 整体退出：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>nameserver-policy 不再工作</span></div></div><div><div><div>2</div></div><div><span>DIRECT 规则不再工作</span></div></div><div><div><div>3</div></div><div><span>本地代理端口也可能停止监听</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>因此网站可能仍打不开。</p><p>要实现客户端退出后仍可访问，需要换成系统级方案，例如：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Windows 全局 DNS</span></div></div><div><div><div>2</div></div><div><span>hosts 文件</span></div></div><div><div><div>3</div></div><div><span>AdGuard Home</span></div></div><div><div><div>4</div></div><div><span>MosDNS</span></div></div><div><div><div>5</div></div><div><span>dnscrypt-proxy</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section></section><section><h2>八、最终配置速查<a href="#八最终配置速查"><span>#</span></a></h2><section><h3>Clash Verge Rev<a href="#clash-verge-rev"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>profile</span><span>:</span></div></div><div><div><div>2</div></div><div><span>  </span><span>store-selected</span><span>: </span><span>true</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span>prepend-rules</span><span>:</span></div></div><div><div><div>5</div></div><div><span><span>  </span></span><span>- </span><span>DOMAIN-SUFFIX,linux.do,DIRECT</span></div></div><div><div><div>6</div></div><div>
</div></div><div><div><div>7</div></div><div><span>dns</span><span>:</span></div></div><div><div><div>8</div></div><div><span>  </span><span>enable</span><span>: </span><span>true</span></div></div><div><div><div>9</div></div><div><span>  </span><span>nameserver-policy</span><span>:</span></div></div><div><div><div>10</div></div><div><span>    </span><span>"+.linux.do"</span><span>:</span></div></div><div><div><div>11</div></div><div><span><span>      </span></span><span>- </span><span>"https://你的DNS地址/dns-query#DIRECT"</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>FlClash<a href="#flclash"><span>#</span></a></h3><p>DNS：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>覆写 DNS：开启</span></div></div><div><div><div>2</div></div><div><span>状态：开启</span></div></div><div><div><div>3</div></div><div><span>遵守规则：关闭</span></div></div><div><div><div>4</div></div><div>
</div></div><div><div><div>5</div></div><div><span>域名服务器策略：</span></div></div><div><div><div>6</div></div><div><span>+.linux.do</span></div></div><div><div><div>7</div></div><div><span>→ https://你的DNS地址/dns-query#DIRECT</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>附加规则：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>规则类型：DOMAIN-SUFFIX</span></div></div><div><div><div>2</div></div><div><span>内容：linux.do</span></div></div><div><div><div>3</div></div><div><span>规则目标：DIRECT</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>运行条件：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>出站模式：规则</span></div></div><div><div><div>2</div></div><div><span>当前订阅覆写模式：标准</span></div></div><div><div><div>3</div></div><div><span>当前订阅已启用该全局附加规则</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section></section><section><h2>九、故障排查速查表<a href="#九故障排查速查表"><span>#</span></a></h2><section><h3>Linux.do 仍然走代理<a href="#linuxdo-仍然走代理"><span>#</span></a></h3><p>依次检查：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>1. 出站模式是否为“规则”</span></div></div><div><div><div>2</div></div><div><span>2. 当前订阅覆写模式是否为“标准”</span></div></div><div><div><div>3</div></div><div><span>3. 当前订阅是否启用了这条全局附加规则</span></div></div><div><div><div>4</div></div><div><span>4. 预览中是否存在 DOMAIN-SUFFIX,linux.do,DIRECT</span></div></div><div><div><div>5</div></div><div><span>5. 该规则是否位于 MATCH 之前</span></div></div><div><div><div>6</div></div><div><span>6. 是否关闭了修改前建立的旧连接</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section><section><h3>DNS 已配置但网站仍打不开<a href="#dns-已配置但网站仍打不开"><span>#</span></a></h3><p>检查：</p><ul>
<li>DoH 地址是否真实有效；</li>
<li>DoH 地址是否能直连；</li>
<li>是否误加了无法直连的 <code>#DIRECT</code>；</li>
<li>Linux.do 本身是否可以从当前网络直连；</li>
<li>是否存在 TLS、SNI、路由或网络层限制。</li>
</ul><hr /></section><section><h3>FlClash 中没有“不解析 IP”<a href="#flclash-中没有不解析-ip"><span>#</span></a></h3><p>正常。</p><p><code>DOMAIN-SUFFIX</code> 不需要该选项。</p><hr /></section><section><h3>配置保存后没有生效<a href="#配置保存后没有生效"><span>#</span></a></h3><p>尝试：</p><ol>
<li>保存覆写配置；</li>
<li>确认当前订阅应用了覆写；</li>
<li>停止并重新启动客户端；</li>
<li>重启 Mihomo 核心；</li>
<li>清理 DNS 缓存；</li>
<li>关闭旧连接；</li>
<li>重新访问 Linux.do；</li>
<li>在“请求/连接”中查看实际命中的规则。</li>
</ol><hr /></section><section><h3>DNS 策略里有很多默认条目<a href="#dns-策略里有很多默认条目"><span>#</span></a></h3><p>如果只想处理 Linux.do，删除其他示例，只保留：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>+.linux.do</span></div></div><div><div><div>2</div></div><div><span>→ 你的 DoH</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section></section></section>]]></content>
    </entry>
    <entry>
      <id>https://yyq-firefly.pages.dev/posts/30-moc/ai-%E7%BC%96%E7%A8%8B%E5%B7%A5%E5%85%B7%E4%B8%8E%E4%BB%A3%E7%90%86-moc/</id>
      <title type="text">AI 编程工具与代理 MOC</title>
      <published>2026-07-19T00:00:00.000Z</published>
      <updated>2026-09-23T00:00:00.000Z</updated>
      <author><name>YYQ</name></author>
      <link rel="alternate" href="https://yyq-firefly.pages.dev/posts/30-moc/ai-%E7%BC%96%E7%A8%8B%E5%B7%A5%E5%85%B7%E4%B8%8E%E4%BB%A3%E7%90%86-moc/"/>
      <summary type="text"></summary>
      <content type="html"><![CDATA[<section><h1>AI 编程工具与代理 MOC<a href="#ai-编程工具与代理-moc"><span>#</span></a></h1><blockquote><p>主题导航：下列教程均为公开笔记。公司网络细节不进入本页。</p></blockquote><section><h2>主题说明<a href="#主题说明"><span>#</span></a></h2><p>围绕 Windows 上 Codex / Claude 等 AI 工具的软件级代理、DNS 与排障，以及用这些工具做前端 UI 的工作流。</p></section><section><h2>入门<a href="#入门"><span>#</span></a></h2><ul>
<li><a href="/posts/20-Knowledge/Windows/%E7%94%B5%E8%84%91%E5%BF%85%E5%A4%87%E8%BD%AF%E4%BB%B6/">电脑必备软件</a> — 公开：基础工具清单</li>
<li><a href="/posts/50-Tutorials/Windows/Codex%20Windows%20%E5%BE%AE%E8%BD%AF%E5%95%86%E5%BA%97%E5%AE%89%E8%A3%85%E5%8C%85%E6%8F%90%E5%8F%96%E4%B8%8E%E6%89%8B%E5%8A%A8%E6%9B%B4%E6%96%B0/">Codex Windows 微软商店安装包提取与手动更新</a> — 公开：安装与更新</li>
<li><a href="/posts/50-Tutorials/Windows/Codex%20Microsoft%20Store%20%E6%9B%B4%E6%96%B0%E5%8D%A1%E4%BD%8F%E6%8E%92%E6%9F%A5/">Codex Microsoft Store 更新卡住排查</a> — 公开：商店更新队列与 DoSvc 排障</li>
<li><a href="/posts/50-Tutorials/Windows/Codex%20%E4%B8%8E%20Claude%20Code%20%E8%A7%84%E5%88%99%E6%96%87%E4%BB%B6%E7%BB%9F%E4%B8%80/">Codex 与 Claude Code 规则文件统一</a> — 公开：共用一份 <code>AGENTS.md</code></li>
</ul></section><section><h2>配置<a href="#配置"><span>#</span></a></h2><ul>
<li><a href="/posts/50-Tutorials/Windows/Codex%20Claude%20%E8%BD%AF%E4%BB%B6%E7%BA%A7%E4%BB%A3%E7%90%86%E8%AE%BE%E7%BD%AE%E6%95%99%E7%A8%8B/">Codex Claude 软件级代理设置教程</a> — 公开：Proxifier / 启动脚本优先方案</li>
<li><a href="/posts/50-Tutorials/Windows/ChatGPT%20Windows%20%E5%8D%87%E7%BA%A7%E5%90%8E%20Proxifier%20%E7%BD%91%E7%BB%9C%E5%BC%82%E5%B8%B8%E6%8E%92%E6%9F%A5/">ChatGPT Windows 升级后 Proxifier 网络异常排查</a> — 公开：升级后网络与 DNS</li>
<li><a href="/posts/50-Tutorials/%E7%BD%91%E7%BB%9C%E4%B8%8E%E5%9F%9F%E5%90%8D/%E7%BE%8E%E5%9B%BD%20VPS%20%E6%90%AD%E5%BB%BA%20AI%20%E4%B8%93%E7%94%A8%E5%87%BA%E5%8F%A3%20Xray%20REALITY%20%E4%B8%8E%20FlClash%20%E5%88%86%E6%B5%81%E6%95%99%E7%A8%8B/">用一台美国 VPS 搭建 AI 专用出口：Xray REALITY + FlClash + Mihomo 动态 AI 分流</a> — 公开：AI 服务固定 VPS 出口与动态分流</li>
</ul></section><section><h2>问题排查<a href="#问题排查"><span>#</span></a></h2><ul>
<li>公司网络 / VPN / TUN 共存：私有环境笔记（不在此列出文件名），按需在 Vault 内搜索</li>
</ul></section><section><h2>进阶实践<a href="#进阶实践"><span>#</span></a></h2><ul>
<li><a href="/posts/50-Tutorials/AI/AI%E5%89%8D%E7%AB%AFUI%E8%AE%BE%E8%AE%A1_%E4%BB%8E%E9%9B%B6%E8%AE%BE%E8%AE%A1%E6%96%B9%E5%90%91%E5%88%B0%E8%90%BD%E5%9C%B0%E5%B7%A5%E4%BD%9C%E6%B5%81/">AI 前端 UI 设计：从零设计方向到落地工作流</a> — 公开：没有设计方向时，先研究再写 UI</li>
<li><a href="/posts/50-Tutorials/Obsidian/Obsidian%20%E7%A7%81%E4%BA%BA%E7%9F%A5%E8%AF%86%E5%BA%93%E8%87%AA%E5%8A%A8%E5%8F%91%E5%B8%83%20Quartz%20%E4%B8%8E%20Cloudflare%20Pages/">Obsidian 私人知识库自动发布 Quartz 与 Cloudflare Pages</a> — 公开：知识库发布链路</li>
</ul></section><section><h2>相关工具<a href="#相关工具"><span>#</span></a></h2><ul>
<li>Proxifier、本地 HTTP/SOCKS 代理核心、Codex Desktop、Claude Desktop / Code</li>
</ul></section><section><h2>待补充<a href="#待补充"><span>#</span></a></h2><ul>
<li>终端-only 代理脚本模板</li>
<li>多机同步代理规则的注意事项</li>
</ul></section></section>]]></content>
    </entry>
    <entry>
      <id>https://yyq-firefly.pages.dev/posts/50-tutorials/windows/tampermonkey%E5%A4%9A%E7%94%B5%E8%84%91%E5%90%8C%E6%AD%A5%E6%8C%87%E5%8D%97/</id>
      <title type="text">Tampermonkey 多电脑同步指南</title>
      <published>2026-07-19T00:00:00.000Z</published>
      <updated>2026-07-20T00:00:00.000Z</updated>
      <author><name>YYQ</name></author>
      <link rel="alternate" href="https://yyq-firefly.pages.dev/posts/50-tutorials/windows/tampermonkey%E5%A4%9A%E7%94%B5%E8%84%91%E5%90%8C%E6%AD%A5%E6%8C%87%E5%8D%97/"/>
      <summary type="text"></summary>
      <content type="html"><![CDATA[<section><h1>Tampermonkey 多电脑同步指南<a href="#tampermonkey-多电脑同步指南"><span>#</span></a></h1><div><div><div></div><div>结论</div></div><div><p>Tampermonkey 可以通过 OneDrive、Google Drive、WebDAV 等方式在不同电脑之间同步脚本。</p><p>第二台电脑开启同步后，通常不是简单地“云端覆盖本地”，而是进行合并同步；同一脚本发生冲突时，通常以修改时间较新的版本为准。</p><p>第一次同步前，应先在两台电脑分别导出 ZIP 备份。</p></div></div><hr /><section><h2>适用场景<a href="#适用场景"><span>#</span></a></h2><p>适合以下情况：</p><ul>
<li>公司电脑和个人电脑都安装了 Tampermonkey</li>
<li>两台电脑使用不同浏览器，例如 Chrome 和 Edge</li>
<li>希望同步已安装的油猴脚本</li>
<li>希望同步自己修改或编写的脚本</li>
<li>不希望手动逐个导入脚本</li>
</ul><hr /></section><section><h2>推荐同步方案<a href="#推荐同步方案"><span>#</span></a></h2><section><h3>首选：OneDrive<a href="#首选onedrive"><span>#</span></a></h3><p>推荐优先使用 OneDrive，原因如下：</p><ul>
<li>Chrome 和 Edge 之间也可以使用</li>
<li>不依赖两台电脑登录同一个浏览器账号</li>
<li>可以同步自己编写或修改的脚本</li>
<li>比浏览器自带同步更适合大量脚本</li>
<li>已经使用 OneDrive 时，不需要新增其他云盘</li>
</ul><p>推荐顺序：</p><ol>
<li>OneDrive</li>
<li>Google Drive</li>
<li>WebDAV</li>
<li>浏览器同步</li>
</ol><div><div><div></div><div>不推荐优先使用浏览器同步</div></div><div><p>浏览器同步通常依赖 Chrome 或 Edge 自己的账号体系，并可能受到同步容量、脚本来源和跨浏览器兼容性的限制。</p><p>对于自己编写的本地脚本，浏览器同步通常不如 OneDrive 稳定。</p></div></div><hr /></section></section><section><h2>第一台电脑：建立云端基准<a href="#第一台电脑建立云端基准"><span>#</span></a></h2><p>应先选择脚本最完整、配置最正确的一台电脑作为主电脑。</p><section><h3>操作步骤<a href="#操作步骤"><span>#</span></a></h3><ol>
<li>点击浏览器工具栏中的 Tampermonkey 图标。</li>
<li>打开 <strong>管理面板</strong>。</li>
<li>进入 <strong>设置</strong>。</li>
<li>将配置模式切换为 <strong>高级</strong>。</li>
<li>找到 <strong>脚本同步</strong>。</li>
<li>同步类型选择 <strong>OneDrive</strong>。</li>
<li>登录并授权 Microsoft 账号。</li>
<li>开启脚本同步。</li>
<li>手动执行一次同步。</li>
<li>确认同步状态没有报错。</li>
</ol></section><section><h3>开启同步前备份<a href="#开启同步前备份"><span>#</span></a></h3><p>进入：</p><p><code>Tampermonkey 管理面板 → 实用工具 → 导出 ZIP</code></p><p>建议导出：</p><ul>
<li>已安装脚本</li>
<li>脚本源代码</li>
<li>脚本相关设置</li>
<li>脚本存储数据（如果导出界面提供该选项）</li>
</ul><p>备份文件建议命名：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>tampermonkey-main-2026-07-19.zip</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section></section><section><h2>第二台电脑开启同步会发生什么<a href="#第二台电脑开启同步会发生什么"><span>#</span></a></h2><p>第二台电脑开启同步时，通常会将：</p><ul>
<li>云端已有脚本</li>
<li>第二台电脑本地已有脚本</li>
</ul><p>进行合并处理，而不是直接把第二台电脑全部清空。</p><section><h3>情况一：本地存在云端没有的脚本<a href="#情况一本地存在云端没有的脚本"><span>#</span></a></h3><p>通常会：</p><ul>
<li>保留本地脚本</li>
<li>将本地脚本上传到同步空间</li>
<li>出现在其他已同步设备上</li>
</ul><p>但第一次同步前仍然建议备份，以防版本或删除记录产生冲突。</p></section><section><h3>情况二：云端存在、本地不存在<a href="#情况二云端存在本地不存在"><span>#</span></a></h3><p>通常会：</p><ul>
<li>将云端脚本下载到第二台电脑</li>
<li>自动出现在 Tampermonkey 管理面板中</li>
</ul></section><section><h3>情况三：两边存在同一个脚本，代码不同<a href="#情况三两边存在同一个脚本代码不同"><span>#</span></a></h3><p>这是风险最高的情况。</p><p>Tampermonkey 通常会根据脚本标识和修改时间判断版本，修改时间较新的版本可能覆盖较旧版本。</p><p>同一脚本一般通过以下信息识别：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>// @name</span></div></div><div><div><div>2</div></div><div><span>// @namespace</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>也可能结合脚本内部 ID 或同步记录判断。</p><div><div><div></div><div>典型风险</div></div><div><p>第一台电脑上的脚本代码是正确版本，但第二台电脑上的同名脚本修改时间更晚。</p><p>第二台电脑开启同步后，较新的本地版本可能上传到云端，并进一步覆盖第一台电脑上的正确版本。</p></div></div><hr /></section></section><section><h2>第二台电脑的安全操作顺序<a href="#第二台电脑的安全操作顺序"><span>#</span></a></h2><section><h3>1. 先备份第二台电脑<a href="#1-先备份第二台电脑"><span>#</span></a></h3><p>进入：</p><p><code>Tampermonkey 管理面板 → 实用工具 → 导出 ZIP</code></p><p>建议命名：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>tampermonkey-second-pc-before-sync-2026-07-19.zip</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>2. 检查是否存在同名脚本<a href="#2-检查是否存在同名脚本"><span>#</span></a></h3><p>重点检查：</p><ul>
<li><code>@name</code> 相同</li>
<li><code>@namespace</code> 相同</li>
<li>自己手动修改过的脚本</li>
<li>自己编写但没有发布地址的脚本</li>
<li>公司电脑和个人电脑分别修改过的脚本</li>
</ul></section><section><h3>3. 暂停脚本修改<a href="#3-暂停脚本修改"><span>#</span></a></h3><p>第一次同步期间：</p><ul>
<li>不要同时在两台电脑修改同一个脚本</li>
<li>不要同时删除同一个脚本</li>
<li>不要同时执行脚本更新</li>
<li>不要频繁开启和关闭同步</li>
</ul></section><section><h3>4. 第二台电脑开启 OneDrive 同步<a href="#4-第二台电脑开启-onedrive-同步"><span>#</span></a></h3><p>使用和第一台电脑相同的 Microsoft 账号。</p></section><section><h3>5. 同步后立即检查<a href="#5-同步后立即检查"><span>#</span></a></h3><p>重点检查：</p><ul>
<li>脚本数量是否正常</li>
<li>重要脚本是否存在</li>
<li>脚本启用状态是否正确</li>
<li>自定义修改是否保留</li>
<li>是否出现重复脚本</li>
<li>是否有脚本被意外降级</li>
<li>是否有脚本变成旧版本</li>
</ul><hr /></section></section><section><h2>哪些内容通常可以同步<a href="#哪些内容通常可以同步"><span>#</span></a></h2><p>Tampermonkey 的脚本同步通常主要处理：</p><ul>
<li>已安装脚本列表</li>
<li>脚本源代码</li>
<li>脚本新增、修改和删除记录</li>
<li>脚本启用或禁用状态</li>
<li>部分脚本元数据</li>
<li>部分脚本设置</li>
</ul><hr /></section><section><h2>哪些内容不一定同步<a href="#哪些内容不一定同步"><span>#</span></a></h2><p>不要把脚本同步理解成整套浏览器环境同步。</p><p>以下内容通常不会完整同步，或者需要脚本本身支持：</p><ul>
<li>网站登录状态</li>
<li>Cookie</li>
<li>网站 localStorage</li>
<li>IndexedDB</li>
<li>浏览器缓存</li>
<li>浏览器扩展权限</li>
<li>网站弹窗授权</li>
<li>下载目录权限</li>
<li>跨域访问授权</li>
<li>脚本使用的账号密码</li>
<li>API Key</li>
<li>Token</li>
<li>Base URL</li>
<li>黑名单和白名单</li>
<li>脚本自定义界面中的参数</li>
</ul><section><h3><code>GM_setValue</code> 数据<a href="#gm_setvalue-数据"><span>#</span></a></h3><p>很多脚本通过以下 API 保存自己的运行数据：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>GM_setValue</span><span>(</span><span>"key"</span><span><span>, </span><span>value</span><span>);</span></span></div></div><div><div><div>2</div></div><div><span>GM_getValue</span><span>(</span><span>"key"</span><span>);</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>这些数据通常属于当前浏览器中的脚本存储，不应默认认为会随脚本代码一起同步。</p><p>因此可能出现：</p><ul>
<li>脚本代码已经同步成功</li>
<li>第二台电脑也已经安装脚本</li>
<li>但脚本内部配置仍然为空</li>
<li>需要重新填写 API Key、规则或账号</li>
</ul><div><div><div></div><div>判断方法</div></div><div><p>如果脚本提供“导出配置”“导入配置”“云同步”功能，应优先使用脚本自身的配置导出或同步功能。</p><p>Tampermonkey 负责同步脚本，脚本自己的数据最好由脚本自身负责。</p></div></div><hr /></section></section><section><h2>推荐的长期维护方案<a href="#推荐的长期维护方案"><span>#</span></a></h2><section><h3>第一层：Tampermonkey 云同步<a href="#第一层tampermonkey-云同步"><span>#</span></a></h3><p>用途：</p><ul>
<li>自动同步脚本安装状态</li>
<li>日常在多台电脑之间使用</li>
<li>减少重复安装</li>
</ul></section><section><h3>第二层：ZIP 定期备份<a href="#第二层zip-定期备份"><span>#</span></a></h3><p>建议在以下操作前备份：</p><ul>
<li>第一次启用同步</li>
<li>更换同步服务</li>
<li>大量删除脚本</li>
<li>修改多个脚本</li>
<li>重装浏览器</li>
<li>重装系统</li>
<li>更换电脑</li>
</ul><p>建议每月保存一次：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Tampermonkey-Backup/</span></div></div><div><div><div>2</div></div><div><span>├── 2026-07/</span></div></div><div><div><div>3</div></div><div><span>│   ├── home-pc.zip</span></div></div><div><div><div>4</div></div><div><span>│   └── company-pc.zip</span></div></div><div><div><div>5</div></div><div><span>└── 2026-08/</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>第三层：GitHub 私有仓库<a href="#第三层github-私有仓库"><span>#</span></a></h3><p>对于自己编写或深度修改的脚本，建议单独放入 GitHub 私有仓库。</p><p>目录示例：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>tampermonkey-scripts/</span></div></div><div><div><div>2</div></div><div><span>├── README.md</span></div></div><div><div><div>3</div></div><div><span>├── scripts/</span></div></div><div><div><div>4</div></div><div><span>│   ├── github-helper.user.js</span></div></div><div><div><div>5</div></div><div><span>│   ├── forum-enhancer.user.js</span></div></div><div><div><div>6</div></div><div><span>│   └── internal-tools.user.js</span></div></div><div><div><div>7</div></div><div><span>├── docs/</span></div></div><div><div><div>8</div></div><div><span>│   └── configuration.md</span></div></div><div><div><div>9</div></div><div><span>└── backups/</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>这样可以获得：</p><ul>
<li>版本历史</li>
<li>修改对比</li>
<li>回滚能力</li>
<li>多电脑同步</li>
<li>防止云同步误覆盖</li>
</ul><hr /></section></section><section><h2>冲突处理<a href="#冲突处理"><span>#</span></a></h2><p>发现脚本被错误覆盖时：</p><ol>
<li>立即暂停两台电脑的 Tampermonkey 同步。</li>
<li>不要继续修改被覆盖的脚本。</li>
<li>从之前导出的 ZIP 中恢复脚本。</li>
<li>或从 GitHub 私有仓库恢复正确版本。</li>
<li>删除云端错误版本前，再次确认备份存在。</li>
<li>只在一台电脑上修改并保存正确版本。</li>
<li>确认修改时间更新后，再重新开启同步。</li>
<li>等第一台电脑上传完成后，再开启第二台电脑。</li>
</ol><hr /></section><section><h2>最稳妥的首次迁移流程<a href="#最稳妥的首次迁移流程"><span>#</span></a></h2><div><div><div><div><span></span></div><div><span></span></div><div><span></span></div><div><span></span></div><div><span></span></div><div><span></span></div><div><span></span></div><div><span></span></div><div><span><p>否</p></span></div><div><span><p>是</p></span></div><div><span><p>选择脚本最完整的主电脑</p></span></div><div><span><p>主电脑导出 ZIP</p></span></div><div><span><p>主电脑开启 OneDrive 同步</p></span></div><div><span><p>确认云端同步完成</p></span></div><div><span><p>第二台电脑导出 ZIP</p></span></div><div><span><p>检查同名和手动修改脚本</p></span></div><div><span><p>第二台电脑开启同步</p></span></div><div><span><p>检查脚本数量与重要脚本</p></span></div><div><span><p>是否出现冲突</p></span></div><div><span><p>完成首次同步</p></span></div><div><span><p>暂停同步并从 ZIP 或 Git 恢复</p></span></div>
</div><div><div><span></span></div><div><span></span></div><div><span></span></div><div><span></span></div><div><span></span></div><div><span></span></div><div><span></span></div><div><span></span></div><div><span><p>否</p></span></div><div><span><p>是</p></span></div><div><span><p>选择脚本最完整的主电脑</p></span></div><div><span><p>主电脑导出 ZIP</p></span></div><div><span><p>主电脑开启 OneDrive 同步</p></span></div><div><span><p>确认云端同步完成</p></span></div><div><span><p>第二台电脑导出 ZIP</p></span></div><div><span><p>检查同名和手动修改脚本</p></span></div><div><span><p>第二台电脑开启同步</p></span></div><div><span><p>检查脚本数量与重要脚本</p></span></div><div><span><p>是否出现冲突</p></span></div><div><span><p>完成首次同步</p></span></div><div><span><p>暂停同步并从 ZIP 或 Git 恢复</p></span></div>
</div></div></div><hr /></section><section><h2>检查清单<a href="#检查清单"><span>#</span></a></h2><section><h3>首次同步前<a href="#首次同步前"><span>#</span></a></h3><ul>
<li> 已确定哪台电脑是主电脑</li>
<li> 主电脑已经导出 ZIP</li>
<li> 第二台电脑已经导出 ZIP</li>
<li> 已检查两台电脑是否有同名脚本</li>
<li> 已检查是否有自己手动修改的脚本</li>
<li> 已记录重要脚本中的 API Key 和配置</li>
<li> 第一次同步期间不会同时修改脚本</li>
</ul></section><section><h3>同步后<a href="#同步后"><span>#</span></a></h3><ul>
<li> 脚本数量正确</li>
<li> 重要脚本仍然存在</li>
<li> 自定义代码没有被覆盖</li>
<li> 启用状态正确</li>
<li> 没有出现重复脚本</li>
<li> 脚本内部配置仍然可用</li>
<li> API Key 和 Token 没有丢失</li>
<li> 网站权限已经重新授权</li>
</ul><hr /></section></section><section><h2>推荐结论<a href="#推荐结论"><span>#</span></a></h2><p>对于个人电脑和公司电脑同时使用 Tampermonkey 的情况，推荐采用：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>OneDrive 同步脚本</span></div></div><div><div><div>2</div></div><div><span><span>        </span></span><span>+</span></div></div><div><div><div>3</div></div><div><span>Tampermonkey ZIP 定期备份</span></div></div><div><div><div>4</div></div><div><span><span>        </span></span><span>+</span></div></div><div><div><div>5</div></div><div><span>GitHub 私有仓库保存重要源码</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>其中：</p><ul>
<li>OneDrive 解决日常同步</li>
<li>ZIP 解决完整恢复</li>
<li>GitHub 解决版本管理和误覆盖</li>
</ul><div><div><div></div><div>核心原则</div></div><div><p>Tampermonkey 同步不是严格的“主电脑单向覆盖副电脑”。</p><p>第二台电脑上的较新脚本也可能上传到云端，因此第一次同步前必须备份，并尽量避免两台电脑同时修改同一个脚本。</p></div></div><hr /></section><section><h2>相关链接<a href="#相关链接"><span>#</span></a></h2><ul>
<li><a href="https://www.tampermonkey.net/" target="_blank">Tampermonkey 官网</a></li>
<li><a href="https://www.tampermonkey.net/faq.php" target="_blank">Tampermonkey FAQ</a></li>
<li><a href="https://www.tampermonkey.net/changelog.php" target="_blank">Tampermonkey 更新记录</a></li>
</ul></section></section>]]></content>
    </entry>
    <entry>
      <id>https://yyq-firefly.pages.dev/posts/50-tutorials/%E7%BD%91%E7%BB%9C%E4%B8%8E%E5%9F%9F%E5%90%8D/dnshe%E5%85%8D%E8%B4%B9%E5%9F%9F%E5%90%8D%E6%B3%A8%E5%86%8C%E4%B8%8Ecloudflare%E6%89%98%E7%AE%A1%E6%95%99%E7%A8%8B/</id>
      <title type="text">DNSHE 免费域名注册与 Cloudflare 托管教程</title>
      <published>2026-07-19T00:00:00.000Z</published>
      <updated>2026-07-20T00:00:00.000Z</updated>
      <author><name>YYQ</name></author>
      <link rel="alternate" href="https://yyq-firefly.pages.dev/posts/50-tutorials/%E7%BD%91%E7%BB%9C%E4%B8%8E%E5%9F%9F%E5%90%8D/dnshe%E5%85%8D%E8%B4%B9%E5%9F%9F%E5%90%8D%E6%B3%A8%E5%86%8C%E4%B8%8Ecloudflare%E6%89%98%E7%AE%A1%E6%95%99%E7%A8%8B/"/>
      <summary type="text"></summary>
      <content type="html"><![CDATA[<section><h1>DNSHE 免费域名注册与 Cloudflare 托管教程<a href="#dnshe-免费域名注册与-cloudflare-托管教程"><span>#</span></a></h1><div><div><div></div><div>文档说明</div></div><div><p>本文用于记录如何在 DNSHE 注册免费域名，并将域名托管到 Cloudflare。</p><p>推荐用途：</p><ul>
<li>Obsidian + Quartz 知识库</li>
<li>Cloudflare Pages</li>
<li>Oracle VPS</li>
<li>CPA / New API 测试服务</li>
<li>API、Webhook、个人 Demo</li>
</ul><p>不建议用于：</p><ul>
<li>主邮箱域名</li>
<li>银行、支付、密码管理器</li>
<li>重要账号的唯一回调域名</li>
<li>无法迁移的正式商业项目</li>
</ul></div></div><hr /><section><h2>一、先理解这种免费域名是什么<a href="#一先理解这种免费域名是什么"><span>#</span></a></h2><p>DNSHE 提供的并不是你直接向注册局持有的 <code>.com</code>、<code>.net</code> 独立域名，而是类似下面这样的可独立管理子域名：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>yourname.de5.net</span></div></div><div><div><div>2</div></div><div><span>yyq.us.ci</span></div></div><div><div><div>3</div></div><div><span>yyq.cc.cd</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>虽然它们可以作为独立区域加入 Cloudflare，但上级根域仍由 DNSHE 或根域持有人控制。</p><div><div><div></div><div>重要风险</div></div><div><p>这种域名适合测试和个人项目，但不属于可以自由转移注册商的长期数字资产。</p><p>DNSHE、上级根域持有人或服务规则发生变化时，域名可能受到影响。</p></div></div><hr /></section><section><h2>二、后缀选择建议<a href="#二后缀选择建议"><span>#</span></a></h2><p>优先选择已经进入 Public Suffix List、可作为独立区域加入 Cloudflare 的后缀。</p>

<table><thead><tr><th>后缀</th><th>建议程度</th><th>说明</th></tr></thead><tbody><tr><td><code>de5.net</code></td><td>⭐⭐⭐⭐⭐</td><td>当前最推荐，适合技术项目</td></tr><tr><td><code>us.ci</code></td><td>⭐⭐⭐⭐</td><td>较短，适合 API、CI/CD、服务器</td></tr><tr><td><code>cc.cd</code></td><td>⭐⭐⭐</td><td>容易记，但视觉上略重复</td></tr><tr><td><code>ccwu.cc</code></td><td>⭐⭐⭐</td><td>后台可注册时可用</td></tr><tr><td><code>bot.cd</code></td><td>⭐⭐</td><td>不建议默认按本教程接入 Cloudflare</td></tr><tr><td><code>l.cd</code></td><td>⭐⭐</td><td>注册和 Cloudflare 支持情况需单独确认</td></tr></tbody></table><div><div><div></div><div>推荐命名</div></div><div><p>建议注册一个通用名称：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>yourname.de5.net</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>然后通过子域区分服务：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>kb.yourname.de5.net</span></div></div><div><div><div>2</div></div><div><span>cpa.yourname.de5.net</span></div></div><div><div><div>3</div></div><div><span>api.yourname.de5.net</span></div></div><div><div><div>4</div></div><div><span>status.yourname.de5.net</span></div></div></code></pre><div><div></div><div></div></div></figure></div></div></div><hr /></section></section>
<section><h1>第一部分：注册 DNSHE 账号<a href="#第一部分注册-dnshe-账号"><span>#</span></a></h1><section><h2>1. 打开 DNSHE 用户中心<a href="#1-打开-dnshe-用户中心"><span>#</span></a></h2><p>进入 DNSHE 用户中心并选择注册账户。</p><p>注册地址：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>https://my.dnshe.com/register.php?language=chinese</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>建议使用长期稳定的公共邮箱注册，例如：</p><ul>
<li>Gmail</li>
<li>Outlook / Hotmail</li>
<li>QQ 邮箱</li>
<li>网易邮箱</li>
<li>Apple 邮箱</li>
<li>Yahoo 邮箱</li>
<li>EDU 教育邮箱</li>
</ul><div><div><div></div><div>Warning</div></div><div><p>不要使用临时邮箱，也不要使用刚搭建的自有域名邮箱注册。</p><p>一旦域名失效，可能无法接收找回密码邮件。</p></div></div></section><section><h2>2. 填写账号资料<a href="#2-填写账号资料"><span>#</span></a></h2><p>通常需要填写：</p><ul>
<li>邮箱</li>
<li>姓名</li>
<li>国家或地区</li>
<li>手机号码</li>
<li>密码</li>
</ul><p>完成邮箱验证后登录。</p></section><section><h2>3. 开启双重验证<a href="#3-开启双重验证"><span>#</span></a></h2><p>登录后进入账户安全设置，开启 2FA。</p><p>建议使用：</p><ul>
<li>Google Authenticator</li>
<li>Microsoft Authenticator</li>
<li>1Password</li>
<li>Bitwarden</li>
<li>KeePassXC TOTP</li>
</ul><hr /></section></section>
<section><h1>第二部分：注册免费域名<a href="#第二部分注册免费域名"><span>#</span></a></h1><section><h2>1. 进入免费域名页面<a href="#1-进入免费域名页面"><span>#</span></a></h2><p>登录后依次进入：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>免费域名</span></div></div><div><div><div>2</div></div><div><span>→ 新增域名</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>当前免费额度通常可理解为：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>3 个基础免费额度</span></div></div><div><div><div>2</div></div><div><span>+ 2 个邀请解锁额度</span></div></div><div><div><div>3</div></div><div><span>= 最多 5 个免费域名</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>普通使用注册一个即可，不需要为了额度专门邀请。</p></section><section><h2>2. 填写域名前缀<a href="#2-填写域名前缀"><span>#</span></a></h2><p>假设选择：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>de5.net</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>自定义前缀填写：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>yyq</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>最终得到：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>yourname.de5.net</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>正确填写：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>yyq</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>错误填写：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>https://yourname.de5.net</span></div></div><div><div><div>2</div></div><div><span>www.yourname.de5.net</span></div></div><div><div><div>3</div></div><div><span>yourname.de5.net</span></div></div></code></pre><div><div></div><div></div></div></figure></div><div><div><div></div><div>命名建议</div></div><div><p>前缀尽量满足：</p><ul>
<li>简短</li>
<li>容易记</li>
<li>不绑定单一服务</li>
<li>适合长期使用</li>
</ul><p>推荐形式：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>yourname.de5.net</span></div></div><div><div><div>2</div></div><div><span>qyy.de5.net</span></div></div><div><div><div>3</div></div><div><span>yyqkb.de5.net</span></div></div><div><div><div>4</div></div><div><span>myyyq.de5.net</span></div></div></code></pre><div><div></div><div></div></div></figure></div></div></div></section><section><h2>3. 确认域名状态<a href="#3-确认域名状态"><span>#</span></a></h2><p>注册完成后，在域名列表检查：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>域名：yourname.de5.net</span></div></div><div><div><div>2</div></div><div><span>状态：Active</span></div></div><div><div><div>3</div></div><div><span>到期时间：约一年后</span></div></div></code></pre><div><div></div><div></div></div></figure></div><div><div><div></div><div>续期规则</div></div><div><p>新注册免费域名通常默认有效期为一年。</p><p>到期前约 180 天可免费续期，续期次数通常不限。</p><p>最终以 DNSHE 后台显示为准。</p></div></div><hr /></section></section>
<section><h1>第三部分：将域名添加到 Cloudflare<a href="#第三部分将域名添加到-cloudflare"><span>#</span></a></h1><section><h2>1. 登录 Cloudflare<a href="#1-登录-cloudflare"><span>#</span></a></h2><p>进入：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Domains</span></div></div><div><div><div>2</div></div><div><span>→ Onboard a domain</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>中文界面可能显示：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>域</span></div></div><div><div><div>2</div></div><div><span>→ 添加域</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h2>2. 填写完整域名<a href="#2-填写完整域名"><span>#</span></a></h2><p>输入：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>yourname.de5.net</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>正确：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>yourname.de5.net</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>错误：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>de5.net</span></div></div><div><div><div>2</div></div><div><span>https://yourname.de5.net/</span></div></div><div><div><div>3</div></div><div><span>www.yourname.de5.net</span></div></div><div><div><div>4</div></div><div><span>kb.yourname.de5.net</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>这里添加的是你在 DNSHE 注册到的那一级域名。</p></section><section><h2>3. 选择免费套餐<a href="#3-选择免费套餐"><span>#</span></a></h2><p>选择：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Free</span></div></div><div><div><div>2</div></div><div><span>$0</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>继续。</p></section><section><h2>4. 查看 Cloudflare 分配的名称服务器<a href="#4-查看-cloudflare-分配的名称服务器"><span>#</span></a></h2><p>Cloudflare 会分配两条 NS，例如：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>alice.ns.cloudflare.com</span></div></div><div><div><div>2</div></div><div><span>bob.ns.cloudflare.com</span></div></div></code></pre><div><div></div><div></div></div></figure></div><div><div><div></div><div>不要照抄示例</div></div><div><p>每个账号、每个域名分配到的 NS 不一样。</p><p>必须复制 Cloudflare 页面中实际显示的两条名称服务器。</p></div></div><hr /></section></section>
<section><h1>第四部分：在 DNSHE 修改 NS<a href="#第四部分在-dnshe-修改-ns"><span>#</span></a></h1><section><h2>1. 返回 DNSHE 域名管理<a href="#1-返回-dnshe-域名管理"><span>#</span></a></h2><p>进入：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>免费域名</span></div></div><div><div><div>2</div></div><div><span>→ 域名管理</span></div></div><div><div><div>3</div></div><div><span>→ yourname.de5.net</span></div></div><div><div><div>4</div></div><div><span>→ DNS服务器</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>页面名称也可能显示为：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Nameservers</span></div></div><div><div><div>2</div></div><div><span>名称服务器</span></div></div><div><div><div>3</div></div><div><span>自定义 NS</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h2>2. 填入 Cloudflare NS<a href="#2-填入-cloudflare-ns"><span>#</span></a></h2><p>删除原有名称服务器，填写 Cloudflare 分配的两条 NS：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>alice.ns.cloudflare.com</span></div></div><div><div><div>2</div></div><div><span>bob.ns.cloudflare.com</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>填写规则：</p><ul>
<li>每行一条</li>
<li>不带 <code>https://</code></li>
<li>不填写 IP</li>
<li>不要作为普通 NS 解析记录添加</li>
<li>必须修改域名本身的权威名称服务器</li>
</ul><p>错误做法：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>类型：NS</span></div></div><div><div><div>2</div></div><div><span>名称：@</span></div></div><div><div><div>3</div></div><div><span>内容：alice.ns.cloudflare.com</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>正确做法：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>在“DNS服务器 / Nameservers”页面</span></div></div><div><div><div>2</div></div><div><span>直接替换权威 NS</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h2>3. 检查 DNSSEC<a href="#3-检查-dnssec"><span>#</span></a></h2><p>如果从未启用 DNSSEC，可以先跳过。</p><p>如果之前启用过 DNSSEC：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>关闭旧 DNSSEC</span></div></div><div><div><div>2</div></div><div><span>→ 修改 NS</span></div></div><div><div><div>3</div></div><div><span>→ 等 Cloudflare 激活</span></div></div><div><div><div>4</div></div><div><span>→ 再重新配置 DNSSEC</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>初次使用建议先不开 DNSSEC，等解析和 HTTPS 全部正常后再启用。</p></section><section><h2>4. 回到 Cloudflare 检查<a href="#4-回到-cloudflare-检查"><span>#</span></a></h2><p>点击：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Check nameservers now</span></div></div><div><div><div>2</div></div><div><span>立即检查名称服务器</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>等待状态从：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Pending Nameserver Update</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>变成：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Active</span></div></div></code></pre><div><div></div><div></div></div></figure></div><div><div><div></div><div>托管完成标志</div></div><div><p>Cloudflare 中域名状态显示 <code>Active</code> 后，Cloudflare 才正式成为该域名的权威 DNS 服务商。</p></div></div><p>从此以后，下面这些记录都应在 Cloudflare 中管理：</p><ul>
<li>A</li>
<li>AAAA</li>
<li>CNAME</li>
<li>TXT</li>
<li>MX</li>
<li>SRV</li>
<li>CAA</li>
</ul><p>不要再在 DNSHE 的普通 DNS 解析页面维护这些记录。</p><hr /></section></section>
<section><h1>第五部分：常见使用场景<a href="#第五部分常见使用场景"><span>#</span></a></h1><section><h2>场景一：解析到 Oracle VPS<a href="#场景一解析到-oracle-vps"><span>#</span></a></h2><p>假设服务器 IPv4：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>203.0.113.10</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>进入 Cloudflare：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>yourname.de5.net</span></div></div><div><div><div>2</div></div><div><span>→ DNS</span></div></div><div><div><div>3</div></div><div><span>→ Records</span></div></div><div><div><div>4</div></div><div><span>→ Add record</span></div></div></code></pre><div><div></div><div></div></div></figure></div><section><h3>根域指向服务器<a href="#根域指向服务器"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>类型：A</span></div></div><div><div><div>2</div></div><div><span>名称：@</span></div></div><div><div><div>3</div></div><div><span>IPv4：203.0.113.10</span></div></div><div><div><div>4</div></div><div><span>代理状态：Proxied</span></div></div><div><div><div>5</div></div><div><span>TTL：Auto</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>访问：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>https://yourname.de5.net</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>为 CPA 单独建立子域<a href="#为-cpa-单独建立子域"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>类型：A</span></div></div><div><div><div>2</div></div><div><span>名称：cpa</span></div></div><div><div><div>3</div></div><div><span>IPv4：203.0.113.10</span></div></div><div><div><div>4</div></div><div><span>代理状态：Proxied</span></div></div><div><div><div>5</div></div><div><span>TTL：Auto</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>访问：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>https://cpa.yourname.de5.net</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section></section><section><h2>场景二：服务监听 9527 端口<a href="#场景二服务监听-9527-端口"><span>#</span></a></h2><p>Cloudflare 普通代理不支持任意端口。</p><p>常见可代理端口包括：</p><div><div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>HTTP：</span></div></div><div><div><div>2</div></div><div><span>80</span></div></div><div><div><div>3</div></div><div><span>8080</span></div></div><div><div><div>4</div></div><div><span>8880</span></div></div><div><div><div>5</div></div><div><span>2052</span></div></div><div><div><div>6</div></div><div><span>2082</span></div></div><div><div><div>7</div></div><div><span>2086</span></div></div><div><div><div>8</div></div><div><span>2095</span></div></div><div><div><div>9</div></div><div>
</div></div><div><div><div>10</div></div><div><span>HTTPS：</span></div></div><div><div><div>11</div></div><div><span>443</span></div></div><div><div><div>12</div></div><div><span>8443</span></div></div><div><div><div>13</div></div><div><span>2053</span></div></div><div><div><div>14</div></div><div><span>2083</span></div></div><div><div><div>15</div></div><div><span>2087</span></div></div><div><div><div>16</div></div><div><span>2096</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div><p><code>9527</code> 不能直接通过普通橙云代理。</p><section><h3>方法 A：灰云直连<a href="#方法-a灰云直连"><span>#</span></a></h3><p>将代理状态设置为：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>DNS only</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>访问：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>http://cpa.yourname.de5.net:9527</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>缺点：</p><ul>
<li>暴露服务器真实 IP</li>
<li>不经过 Cloudflare HTTP 代理</li>
<li>需要直接开放 9527 端口</li>
</ul></section><section><h3>方法 B：Nginx 反向代理<a href="#方法-bnginx-反向代理"><span>#</span></a></h3><p>推荐让 Nginx 对外监听 80 / 443，再转发到：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>127.0.0.1:9527</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>示例：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>server</span><span> {</span></div></div><div><div><div>2</div></div><div><span>   <span> </span></span><span>listen </span><span>80</span><span>;</span></div></div><div><div><div>3</div></div><div><span>   <span> </span></span><span>server_name </span><span>cpa.yourname.de5.net;</span></div></div><div><div><div>4</div></div><div>
</div></div><div><div><div>5</div></div><div><span>    </span><span>location</span><span> / {</span></div></div><div><div><div>6</div></div><div><span>       <span> </span></span><span>proxy_pass </span><span>http://127.0.0.1:9527;</span></div></div><div><div><div>7</div></div><div><span>       <span> </span></span><span>proxy_set_header </span><span>Host $</span><span>host</span><span>;</span></div></div><div><div><div>8</div></div><div><span>       <span> </span></span><span>proxy_set_header </span><span>X-Real-IP $</span><span>remote_addr</span><span>;</span></div></div><div><div><div>9</div></div><div><span>       <span> </span></span><span>proxy_set_header </span><span>X-Forwarded-For $</span><span>proxy_add_x_forwarded_for</span><span>;</span></div></div><div><div><div>10</div></div><div><span>       <span> </span></span><span>proxy_set_header </span><span>X-Forwarded-Proto $</span><span>scheme</span><span>;</span></div></div><div><div><div>11</div></div><div><span><span>    </span></span><span>}</span></div></div><div><div><div>12</div></div><div><span>}</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>完成 HTTPS 后，在 Cloudflare 中设置：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>SSL/TLS</span></div></div><div><div><div>2</div></div><div><span>→ Overview</span></div></div><div><div><div>3</div></div><div><span>→ Full (strict)</span></div></div></code></pre><div><div></div><div></div></div></figure></div><div><div><div></div><div>Warning</div></div><div><p>不建议长期使用 <code>Flexible</code>。</p><p>推荐源站也配置 HTTPS，并使用 <code>Full (strict)</code>。</p></div></div><hr /></section></section><section><h2>场景三：绑定 Obsidian + Quartz + Cloudflare Pages<a href="#场景三绑定-obsidian--quartz--cloudflare-pages"><span>#</span></a></h2><p>假设 Pages 默认域名：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>my-quartz.pages.dev</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>建议绑定：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>kb.yourname.de5.net</span></div></div></code></pre><div><div></div><div></div></div></figure></div><section><h3>第 1 步：进入 Pages 项目<a href="#第-1-步进入-pages-项目"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Workers &amp; Pages</span></div></div><div><div><div>2</div></div><div><span>→ 你的 Quartz 项目</span></div></div><div><div><div>3</div></div><div><span>→ Custom domains</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>第 2 步：添加自定义域名<a href="#第-2-步添加自定义域名"><span>#</span></a></h3><p>点击：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Set up a domain</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>填写：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>kb.yourname.de5.net</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>继续完成验证。</p><p>Cloudflare 通常会自动创建所需的 DNS 记录。</p><div><div><div></div><div>不要只添加 CNAME</div></div><div><p>不要只在 DNS 页面手动添加：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>kb → my-quartz.pages.dev</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>正确流程是先在 Pages 项目的 <code>Custom domains</code> 中完成绑定。</p><p>否则可能出现 522 或域名未关联的问题。</p></div></div><p>最终访问：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>https://kb.yourname.de5.net</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section></section><section><h2>场景四：多个服务的域名规划<a href="#场景四多个服务的域名规划"><span>#</span></a></h2><p>建议统一规划：</p>

<table><thead><tr><th>域名</th><th>用途</th><th>Cloudflare 模式</th></tr></thead><tbody><tr><td><code>kb.yourname.de5.net</code></td><td>Obsidian + Quartz</td><td>Pages 自动管理</td></tr><tr><td><code>cpa.yourname.de5.net</code></td><td>CPA 面板</td><td>橙云 + Nginx</td></tr><tr><td><code>api.yourname.de5.net</code></td><td>API 服务</td><td>橙云 + HTTPS</td></tr><tr><td><code>ssh.yourname.de5.net</code></td><td>SSH</td><td>灰云或 Tunnel</td></tr><tr><td><code>status.yourname.de5.net</code></td><td>状态页</td><td>橙云</td></tr><tr><td><code>dev.yourname.de5.net</code></td><td>开发测试</td><td>按实际需求</td></tr></tbody></table><hr /></section></section>
<section><h1>第六部分：验证配置<a href="#第六部分验证配置"><span>#</span></a></h1><section><h2>检查 NS<a href="#检查-ns"><span>#</span></a></h2><p>在 Windows PowerShell 中执行：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>Resolve-DnsName</span><span><span> </span><span>-</span><span>Name yourname.de5.net </span><span>-</span><span>Type NS </span><span>-</span><span>Server </span></span><span>1.1</span><span>.</span><span>1.1</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>正常应返回 Cloudflare 分配的两条 NS。</p><p>也可以使用：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span><span>nslookup </span><span>-</span><span>type</span><span>=</span><span>ns yourname.de5.net </span></span><span>1.1</span><span>.</span><span>1.1</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h2>检查根域解析<a href="#检查根域解析"><span>#</span></a></h2><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>Resolve-DnsName</span><span><span> </span><span>-</span><span>Name yourname.de5.net </span><span>-</span><span>Server </span></span><span>1.1</span><span>.</span><span>1.1</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h2>检查子域解析<a href="#检查子域解析"><span>#</span></a></h2><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>Resolve-DnsName</span><span><span> </span><span>-</span><span>Name kb.yourname.de5.net </span><span>-</span><span>Server </span></span><span>1.1</span><span>.</span><span>1.1</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h2>检查 HTTPS<a href="#检查-https"><span>#</span></a></h2><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>curl.exe</span><span><span> </span><span>-</span><span>I https:</span><span>//</span><span>kb.yourname.de5.net</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>正常可能看到：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>HTTP/2 200</span></div></div><div><div><div>2</div></div><div><span>server: cloudflare</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h2>检查公网端口<a href="#检查公网端口"><span>#</span></a></h2><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>Test-NetConnection</span><span><span> 服务器IP </span><span>-</span><span>Port </span></span><span>443</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>例如：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>Test-NetConnection</span><span> </span><span>203.0</span><span>.</span><span>113.10</span><span><span> </span><span>-</span><span>Port </span></span><span>443</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section></section>
<section><h1>第七部分：免费续期<a href="#第七部分免费续期"><span>#</span></a></h1><p>进入 DNSHE 域名列表，在到期前约 180 天检查是否出现：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Free Renewal</span></div></div><div><div><div>2</div></div><div><span>免费续期</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>点击后，到期日期通常会顺延一年。</p><p>建议记录：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>注册日期</span></div></div><div><div><div>2</div></div><div><span>到期日期</span></div></div><div><div><div>3</div></div><div><span>开始可续期日期</span></div></div><div><div><div>4</div></div><div><span>实际续期日期</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>示例：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>注册日期：2026-07-19</span></div></div><div><div><div>2</div></div><div><span>预计到期：2027-07-19</span></div></div><div><div><div>3</div></div><div><span>开始可续期：约 2027-01-20</span></div></div></code></pre><div><div></div><div></div></div></figure></div><div><div><div></div><div>Warning</div></div><div><p>具体日期必须以 DNSHE 后台显示为准。</p><p>不要只依赖记忆，建议设置日历提醒。</p></div></div><hr /></section>
<section><h1>第八部分：常见问题排查<a href="#第八部分常见问题排查"><span>#</span></a></h1><section><h2>1. Cloudflare 一直显示 Pending<a href="#1-cloudflare-一直显示-pending"><span>#</span></a></h2><p>检查：</p><ul>
<li>DNSHE 中是否真正修改了权威 NS</li>
<li>是否误把 NS 添加成普通解析记录</li>
<li>两条 NS 是否拼写正确</li>
<li>是否带了 <code>https://</code></li>
<li>是否遗漏其中一条</li>
<li>DNSSEC 是否仍启用</li>
<li>是否等待足够的 DNS 传播时间</li>
</ul><p>再次执行：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>Resolve-DnsName</span><span><span> </span><span>-</span><span>Name yourname.de5.net </span><span>-</span><span>Type NS </span><span>-</span><span>Server </span></span><span>1.1</span><span>.</span><span>1.1</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>如果返回的仍不是 Cloudflare NS，说明委派尚未生效。</p></section><section><h2>2. 域名解析正常，但网站打不开<a href="#2-域名解析正常但网站打不开"><span>#</span></a></h2><p>检查：</p><ul>
<li>服务器程序是否启动</li>
<li>Nginx / Caddy 是否运行</li>
<li>80 / 443 是否监听</li>
<li>Oracle 安全列表是否开放端口</li>
<li>Ubuntu 防火墙是否开放端口</li>
<li>Cloudflare SSL 模式是否正确</li>
<li>源站证书是否有效</li>
</ul><p>Linux 检查监听端口：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>sudo</span><span> </span><span>ss</span><span> </span><span>-lntp</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>检查 80 和 443：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>sudo</span><span> </span><span>ss</span><span> </span><span>-lntp</span><span> | </span><span>grep</span><span> </span><span>-E</span><span> </span><span>':80|:443'</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h2>3. 出现 522<a href="#3-出现-522"><span>#</span></a></h2><p>522 通常表示 Cloudflare 无法连接源站。</p><p>检查：</p><ul>
<li>源站 IP 是否正确</li>
<li>服务器是否在线</li>
<li>端口是否开放</li>
<li>防火墙是否拦截 Cloudflare</li>
<li>Nginx 是否监听公网</li>
<li>Cloudflare Pages 是否只手动加了 CNAME，而没有在 Pages 中绑定自定义域名</li>
</ul></section><section><h2>4. 出现 SSL 证书错误<a href="#4-出现-ssl-证书错误"><span>#</span></a></h2><p>检查：</p><ul>
<li>Cloudflare SSL 模式</li>
<li>源站证书是否过期</li>
<li>证书域名是否匹配</li>
<li>是否使用了 <code>Full (strict)</code></li>
<li>Nginx 是否加载了正确证书</li>
</ul></section><section><h2>5. 9527 端口打不开<a href="#5-9527-端口打不开"><span>#</span></a></h2><p>检查：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>sudo</span><span> </span><span>ss</span><span> </span><span>-lntp</span><span> | </span><span>grep</span><span> </span><span>9527</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>如果没有输出，说明程序没有监听 9527。</p><p>如果有监听但公网打不开：</p><ul>
<li>Oracle 安全列表未放行</li>
<li>Ubuntu 防火墙未放行</li>
<li>程序只监听 <code>127.0.0.1</code></li>
<li>Cloudflare 橙云不支持 9527</li>
</ul><p>推荐做法：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>外部访问 443</span></div></div><div><div><div>2</div></div><div><span>→ Nginx</span></div></div><div><div><div>3</div></div><div><span>→ 127.0.0.1:9527</span></div></div></code></pre><div><div></div><div></div></div></figure></div><hr /></section></section>
<section><h1>第九部分：安全建议<a href="#第九部分安全建议"><span>#</span></a></h1><div><div><div></div><div>不要滥用免费域名</div></div><div><p>不要用于：</p><ul>
<li>钓鱼</li>
<li>仿冒登录页面</li>
<li>垃圾邮件</li>
<li>未授权反代</li>
<li>绕过第三方服务限制</li>
<li>恶意 API</li>
<li>违法内容</li>
</ul></div></div><p>DNSHE 可以直接删除域名并封禁账号。</p><section><h2>推荐安全配置<a href="#推荐安全配置"><span>#</span></a></h2><ul>
<li>DNSHE 开启 2FA</li>
<li>Cloudflare 开启 2FA</li>
<li>VPS 禁止密码登录 SSH</li>
<li>SSH 使用密钥</li>
<li>不直接暴露管理面板</li>
<li>面板增加强密码</li>
<li>优先使用 HTTPS</li>
<li>使用 Cloudflare Access 保护后台</li>
<li>定期备份 Nginx、Docker、CPA 配置</li>
<li>保留服务器 IP 和 SSH 直连方式</li>
<li>不把免费域名作为唯一入口</li>
</ul><hr /></section></section>
<section><h1>第十部分：最终操作清单<a href="#第十部分最终操作清单"><span>#</span></a></h1><section><h2>DNSHE<a href="#dnshe"><span>#</span></a></h2><ul>
<li> 注册 DNSHE 账号</li>
<li> 验证邮箱</li>
<li> 开启 2FA</li>
<li> 注册 <code>yourname.de5.net</code></li>
<li> 记录到期日期</li>
</ul></section><section><h2>Cloudflare<a href="#cloudflare"><span>#</span></a></h2><ul>
<li> 添加 <code>yourname.de5.net</code></li>
<li> 选择 Free 套餐</li>
<li> 复制两条 Cloudflare NS</li>
<li> 在 DNSHE 修改权威 NS</li>
<li> 等待 Cloudflare 显示 Active</li>
<li> 检查 DNSSEC 状态</li>
</ul></section><section><h2>解析与服务<a href="#解析与服务"><span>#</span></a></h2><ul>
<li> 添加 A / CNAME 记录</li>
<li> 配置 Nginx 或 Caddy</li>
<li> 开放 80 / 443</li>
<li> 配置 HTTPS</li>
<li> Cloudflare 设置 <code>Full (strict)</code></li>
<li> 验证根域和子域</li>
<li> 配置 Quartz 自定义域名</li>
</ul></section><section><h2>后续维护<a href="#后续维护"><span>#</span></a></h2><ul>
<li> 设置续期提醒</li>
<li> 定期登录 DNSHE</li>
<li> 备份服务配置</li>
<li> 保留 IP 直连方式</li>
<li> 定期检查域名状态</li>
</ul><hr /></section></section>
<section><h1>十一、推荐的最终结构<a href="#十一推荐的最终结构"><span>#</span></a></h1><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>DNSHE：</span></div></div><div><div><div>2</div></div><div><span>yourname.de5.net</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span>Cloudflare Zone：</span></div></div><div><div><div>5</div></div><div><span>yourname.de5.net</span></div></div><div><div><div>6</div></div><div>
</div></div><div><div><div>7</div></div><div><span>子域规划：</span></div></div><div><div><div>8</div></div><div><span>kb.yourname.de5.net      → Obsidian + Quartz</span></div></div><div><div><div>9</div></div><div><span>cpa.yourname.de5.net     → CPA 面板</span></div></div><div><div><div>10</div></div><div><span>api.yourname.de5.net     → API</span></div></div><div><div><div>11</div></div><div><span>status.yourname.de5.net  → 状态页</span></div></div><div><div><div>12</div></div><div><span>ssh.yourname.de5.net     → SSH / Tunnel</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>完整流程：</p><div><div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>DNSHE 注册 yourname.de5.net</span></div></div><div><div><div>2</div></div><div><span><span>        </span></span><span>↓</span></div></div><div><div><div>3</div></div><div><span>Cloudflare 添加 yourname.de5.net</span></div></div><div><div><div>4</div></div><div><span><span>        </span></span><span>↓</span></div></div><div><div><div>5</div></div><div><span>复制 Cloudflare 两条 NS</span></div></div><div><div><div>6</div></div><div><span><span>        </span></span><span>↓</span></div></div><div><div><div>7</div></div><div><span>DNSHE 修改权威 NS</span></div></div><div><div><div>8</div></div><div><span><span>        </span></span><span>↓</span></div></div><div><div><div>9</div></div><div><span>Cloudflare 状态变 Active</span></div></div><div><div><div>10</div></div><div><span><span>        </span></span><span>↓</span></div></div><div><div><div>11</div></div><div><span>配置 A / CNAME / Pages</span></div></div><div><div><div>12</div></div><div><span><span>        </span></span><span>↓</span></div></div><div><div><div>13</div></div><div><span>配置 HTTPS</span></div></div><div><div><div>14</div></div><div><span><span>        </span></span><span>↓</span></div></div><div><div><div>15</div></div><div><span>每年免费续期</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div><hr /></section>
<section><h1>十二、参考资料<a href="#十二参考资料"><span>#</span></a></h1><ul>
<li><a href="https://my.dnshe.com/" target="_blank">DNSHE 用户中心</a></li>
<li><a href="https://github.com/dnshe/DNSHE-FreeDomains" target="_blank">DNSHE 免费域名项目</a></li>
<li><a href="https://developers.cloudflare.com/dns/zone-setups/full-setup/" target="_blank">Cloudflare Full Setup</a></li>
<li><a href="https://developers.cloudflare.com/dns/nameservers/update-nameservers/" target="_blank">Cloudflare 修改名称服务器</a></li>
<li><a href="https://developers.cloudflare.com/dns/manage-dns-records/how-to/create-dns-records/" target="_blank">Cloudflare DNS 记录</a></li>
<li><a href="https://developers.cloudflare.com/pages/configuration/custom-domains/" target="_blank">Cloudflare Pages 自定义域名</a></li>
<li><a href="https://developers.cloudflare.com/fundamentals/reference/network-ports/" target="_blank">Cloudflare 支持的代理端口</a></li>
<li><a href="https://publicsuffix.org/" target="_blank">Public Suffix List</a></li>
</ul><hr /><section><h2>关联笔记<a href="#关联笔记"><span>#</span></a></h2><ul>
<li>
<a href="/posts/50-Tutorials/Obsidian/Obsidian%20%E7%A7%81%E4%BA%BA%E7%9F%A5%E8%AF%86%E5%BA%93%E8%87%AA%E5%8A%A8%E5%8F%91%E5%B8%83%20Quartz%20%E4%B8%8E%20Cloudflare%20Pages/"><div><div>Obsidian 私人知识库自动发布 Quartz 与 Cloudflare Pages</div><div><span>2026-06-02</span><span>tutorial</span><span><span>#obsidian</span><span>#quartz</span><span>#cloudflare-pages</span><span>#github-actions</span><span>#自动化</span></span></div></div></a>
</li>
<li>
<a href="/posts/50-Tutorials/Obsidian/Quartz%204%20%E5%8D%87%E7%BA%A7%20Quartz%205%20%E5%A4%8D%E7%9B%98/"><div><div>Quartz 4 升级 Quartz 5 复盘</div><div><span>2026-06-03</span><span>tutorial</span><span><span>#quartz</span><span>#cloudflare-pages</span><span>#github-actions</span><span>#obsidian</span><span>#upgrade</span></span></div></div></a>
</li>
</ul></section></section>]]></content>
    </entry>
    <entry>
      <id>https://yyq-firefly.pages.dev/posts/50-tutorials/windows/chatgpt-windows-%E5%8D%87%E7%BA%A7%E5%90%8E-proxifier-%E7%BD%91%E7%BB%9C%E5%BC%82%E5%B8%B8%E6%8E%92%E6%9F%A5/</id>
      <title type="text">ChatGPT Windows 升级后 Proxifier 网络异常排查</title>
      <published>2026-07-10T00:00:00.000Z</published>
      <updated>2026-08-19T00:00:00.000Z</updated>
      <author><name>YYQ</name></author>
      <link rel="alternate" href="https://yyq-firefly.pages.dev/posts/50-tutorials/windows/chatgpt-windows-%E5%8D%87%E7%BA%A7%E5%90%8E-proxifier-%E7%BD%91%E7%BB%9C%E5%BC%82%E5%B8%B8%E6%8E%92%E6%9F%A5/"/>
      <summary type="text"></summary>
      <content type="html"><![CDATA[<section><h1>ChatGPT Windows 升级后 Proxifier 网络异常排查<a href="#chatgpt-windows-升级后-proxifier-网络异常排查"><span>#</span></a></h1><p>相关笔记：<a href="/posts/50-Tutorials/Windows/Codex%20Claude%20%E8%BD%AF%E4%BB%B6%E7%BA%A7%E4%BB%A3%E7%90%86%E8%AE%BE%E7%BD%AE%E6%95%99%E7%A8%8B/">Codex Claude 软件级代理设置教程</a>、<a href="/posts/50-Tutorials/Windows/Codex%20Windows%20%E5%BE%AE%E8%BD%AF%E5%95%86%E5%BA%97%E5%AE%89%E8%A3%85%E5%8C%85%E6%8F%90%E5%8F%96%E4%B8%8E%E6%89%8B%E5%8A%A8%E6%9B%B4%E6%96%B0/">Codex Windows 微软商店安装包提取与手动更新</a></p><div><div><div></div><div>最终结论</div></div><div><p>本文记录三类容易混淆的问题。第一类是原有“按进程代理 + 选择性代理 DNS”没有完整覆盖新版访问方式；补充裸域名 <code>chatgpt.com</code> 并开启 Proxifier 的“DNS 和 IP 泄漏防护模式”后，启动速度、中文界面和审批模式恢复。第二类是重启后用量页再次失败；网络、账号和接口均验证正常，最终通过备份并移出升级后遗留的 Chromium 临时缓存恢复。第三类是 Codex 任务正文可以附图，但 ChatGPT 侧边栏上传失败；日志把它定位到侧边栏文件接口所经过的 DNS/代理链路，而不是图片格式或权限。第三类完成了配置核对，但未记录修改后的成功复测，因此不能写成已闭环修复。</p></div></div><section><h2>一、故障现象<a href="#一故障现象"><span>#</span></a></h2><p>升级后同时出现以下问题：</p><ul>
<li>ChatGPT 启动明显变慢。</li>
<li>已在设置中选择中文，重启后界面仍显示英文。</li>
<li>左下角的用量摘要和重置信息消失。</li>
<li>“设置 → 用量与计费”显示无法加载用量设置。</li>
<li>审批模式的选项数量变少。</li>
</ul><p>这些现象看似属于启动、语言、计费和权限四个模块。首轮故障来自同一条后端配置链路失败；用量页后来单独复发，则属于客户端缓存问题，不能继续归因于代理配置。</p></section><section><h2>二、先区分界面变化和真实故障<a href="#二先区分界面变化和真实故障"><span>#</span></a></h2><p>新版确实调整了部分界面，但不能一开始就把所有缺失内容都归因于 UI 改版。</p><p>判断顺序如下：</p>

<table><thead><tr><th>现象</th><th>判断方法</th><th>本次结论</th></tr></thead><tbody><tr><td>“用量”页面直接报加载失败</td><td>检查应用日志、网络、登录态接口和缓存</td><td>首轮为网络故障，复发为客户端缓存</td></tr><tr><td>中文设置不生效</td><td>检查账户配置接口是否成功</td><td>网络故障导致回退</td></tr><tr><td>审批模式选项减少</td><td>先恢复功能配置接口，再观察</td><td>网络恢复后选项重新出现</td></tr><tr><td>左下角不再常驻显示 5 小时、7 天用量</td><td>“设置 → 用量”已正常时再判断</td><td>新版界面调整</td></tr></tbody></table><div><div><div></div><div>Note</div></div><div><p>当前官方说明将 Codex 用量入口描述为“用量页面或达到限制时的提示横幅”，不再保证侧边栏始终显示用量卡片。普通额度仍会自动重置；储备重置次数只在符合资格且账户实际拥有重置次数时显示。</p></div></div></section><section><h2>三、证据链<a href="#三证据链"><span>#</span></a></h2><section><h3>1. 应用日志指向同一个网络入口<a href="#1-应用日志指向同一个网络入口"><span>#</span></a></h3><p>日志中连续出现以下类型的错误：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Timed out while fetching post-login Statsig bootstrap</span></div></div><div><div><div>2</div></div><div><span>net::ERR_CONNECTION_CLOSED</span></div></div><div><div><div>3</div></div><div><span>net::ERR_TIMED_OUT</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>失败请求集中在：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>/wham/accounts/check</span></div></div><div><div><div>2</div></div><div><span>/wham/statsig/bootstrap</span></div></div><div><div><div>3</div></div><div><span>/wham/profiles/me</span></div></div><div><div><div>4</div></div><div><span>/wham/usage</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>它们分别影响账户状态、功能开关、用户配置和用量信息，因此可以解释为什么语言、审批模式和用量同时异常。</p></section><section><h3>2. 规则命中不等于 DNS 正确<a href="#2-规则命中不等于-dns-正确"><span>#</span></a></h3><p>Proxifier 连接窗口已经能看到类似记录：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>chatgpt.exe - chatgpt.com:443 open through proxy &lt;本地 SOCKS5 地址&gt;:&lt;端口&gt; SOCKS5</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>这只能证明 <code>chatgpt.exe</code> 的 TCP 连接命中了代理规则。如果连接很快关闭、只发送数据却收不到响应，仍需继续检查域名解析。</p></section><section><h3>3. 本地 DNS 和代理 DNS 的 A/B 对照<a href="#3-本地-dns-和代理-dns-的-ab-对照"><span>#</span></a></h3><p>使用同一个 SOCKS5 代理测试 <code>chatgpt.com:443</code>：</p>

<table><thead><tr><th>方式</th><th>结果</th></tr></thead><tbody><tr><td>本机先解析域名，再把 IP 交给 SOCKS5</td><td>TLS 建立前断开或超时</td></tr><tr><td>由 SOCKS5 代理端解析域名</td><td>TLS 证书验证成功并收到 HTTP 响应</td></tr></tbody></table><p>这说明代理线路本身可用，问题位于本地 DNS 结果或 DNS 到代理的传递过程。</p></section></section><section><h2>四、首轮根因分析<a href="#四首轮根因分析"><span>#</span></a></h2><section><h3>1. 裸域名没有被原列表覆盖<a href="#1-裸域名没有被原列表覆盖"><span>#</span></a></h3><p>旧列表只有：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>*.chatgpt.com</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>新版请求会直接访问裸域名：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>chatgpt.com</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>在 Proxifier 的掩码匹配中，<code>*.chatgpt.com</code> 用于子域名，不能代替单独的 <code>chatgpt.com</code> 条目。因此必须同时配置两行。</p></section><section><h3>2. 新版 DNS 查询可能绕过选择性代理解析<a href="#2-新版-dns-查询可能绕过选择性代理解析"><span>#</span></a></h3><p>配置文件显示“阻止非 A/AAAA DNS 查询”处于关闭状态。结合升级前后和修复前后的对照结果，推断新版 Chromium 网络栈发出的部分 DNS 查询没有被原有选择性代理 DNS 完整处理。</p><p>开启“DNS 和 IP 泄漏防护模式”后，Proxifier 会统一控制以下行为：</p><ul>
<li>通过代理解析主机名。</li>
<li>使用代理 DNS 时阻止非 A/AAAA 查询。</li>
<li>阻止命中代理规则的 UDP 流量，避免 DNS、UDP 或 WebRTC 泄漏。</li>
</ul></section></section><section><h2>五、最终配置（Proxifier 中文界面）<a href="#五最终配置proxifier-中文界面"><span>#</span></a></h2><section><h3>1. 代理服务器<a href="#1-代理服务器"><span>#</span></a></h3><p>进入：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>配置文件 → 代理服务器</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>添加本地代理工具提供的 SOCKS5 入口：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>地址：&lt;本地 SOCKS5 地址&gt;</span></div></div><div><div><div>2</div></div><div><span>端口：&lt;端口&gt;</span></div></div><div><div><div>3</div></div><div><span>协议：SOCKS5</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>不要在公开笔记中填写真实端口、节点地址、订阅地址或认证信息。</p></section><section><h3>2. 代理规则<a href="#2-代理规则"><span>#</span></a></h3><p>进入：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>配置文件 → 代理规则</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>推荐顺序：</p>

<table><thead><tr><th>顺序</th><th>规则</th><th>应用程序</th><th>目标</th><th>动作</th></tr></thead><tbody><tr><td>1</td><td>Localhost</td><td>Any</td><td><code>localhost; 127.0.0.1; ::1</code></td><td>Direct</td></tr><tr><td>2</td><td>Proxy Core</td><td>本地代理核心进程</td><td>Any</td><td>Direct</td></tr><tr><td>3</td><td>AI Tools</td><td><code>ChatGPT.exe; Codex.exe; codex.exe</code></td><td>Any</td><td>SOCKS5</td></tr><tr><td>4</td><td>Default</td><td>Any</td><td>Any</td><td>Direct</td></tr></tbody></table><div><div><div></div><div>Warning</div></div><div><p>不要把代理核心进程放进 AI 工具代理规则，否则可能形成代理循环。也不要为了修复 ChatGPT 而把 Default 改成全局代理。</p></div></div></section><section><h3>3. 名称解析<a href="#3-名称解析"><span>#</span></a></h3><p>进入：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>配置文件 → 名称解析</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>设置：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>关闭：自动检测 DNS 设置</span></div></div><div><div><div>2</div></div><div><span>开启：通过代理解析主机名称</span></div></div><div><div><div>3</div></div><div><span>选择：仅仅解析以下主机名</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>至少加入：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>chatgpt.com</span></div></div><div><div><div>2</div></div><div><span>*.chatgpt.com</span></div></div><div><div><div>3</div></div><div><span>*.openai.com</span></div></div><div><div><div>4</div></div><div><span>*.oaistatic.com</span></div></div><div><div><div>5</div></div><div><span>*.oaistatsig.com</span></div></div><div><div><div>6</div></div><div><span>*.oaiusercontent.com</span></div></div><div><div><div>7</div></div><div><span>*.auth.openai.com</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>其中 <code>chatgpt.com</code> 和 <code>*.chatgpt.com</code> 必须同时保留。</p></section><section><h3>4. DNS 和 IP 泄漏防护模式<a href="#4-dns-和-ip-泄漏防护模式"><span>#</span></a></h3><p>进入：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>配置文件 → 高级 → DNS 和 IP 泄漏防护模式</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>启用后，Proxifier 会弹出确认窗口，提示它将控制代理 DNS、非 A/AAAA 查询和命中规则的 UDP 流量。选择“是”继续。</p><div><div><div></div><div>语音功能注意事项</div></div><div><p>该模式会阻止命中规则的 UDP 流量，可能影响 ChatGPT 语音、WebRTC 或其他依赖 UDP 的功能。本文验证的是 Codex 编程、设置、用量和普通 TCP 443 连接；如果需要语音，应单独测试并按需调整 UDP 规则。</p></div></div></section><section><h3>5. 正确的重启顺序<a href="#5-正确的重启顺序"><span>#</span></a></h3><p>修改完成后：</p><ol>
<li>从系统托盘彻底退出 Proxifier。</li>
<li>重新启动 Proxifier，确认当前配置文件已加载。</li>
<li>完全退出 ChatGPT，避免单实例应用复用旧进程。</li>
<li>重新启动 ChatGPT。</li>
<li>打开“设置 → 用量”，点击“重试”。</li>
</ol><p>只重启 ChatGPT、不重启 Proxifier，可能继续使用旧的 DNS 防护状态。</p></section></section><section><h2>六、用量页复发：二次排查与最终修复<a href="#六用量页复发二次排查与最终修复"><span>#</span></a></h2><section><h3>1. 复发现象<a href="#1-复发现象"><span>#</span></a></h3><p>首轮修复后，启动、中文界面、设置用量和三个审批模式都曾恢复。随后只重启 ChatGPT，用量页再次显示“无法加载使用设置”，但中文界面、审批模式和普通对话仍然正常。</p><p>这说明不能把第二次失败直接套用到第一次的 DNS 结论上。</p></section><section><h3>2. 逐层排除<a href="#2-逐层排除"><span>#</span></a></h3>

<table><thead><tr><th>检查项</th><th>结果</th><th>结论</th></tr></thead><tbody><tr><td>Proxifier 配置文件</td><td>远程 DNS、域名列表、进程规则仍在</td><td>配置没有丢失</td></tr><tr><td>不带登录信息访问 <code>/backend-api/wham/usage</code></td><td>经 SOCKS5 到达服务端并返回 <code>401</code></td><td>DNS、SOCKS5、TLS 和服务端入口可达</td></tr><tr><td>带现有登录态访问同一接口</td><td>返回 <code>HTTP 200</code></td><td>账号权限、令牌和用量服务正常</td></tr><tr><td>ChatGPT 点击“重试”后的连接</td><td><code>chatgpt.exe → Proxifier → 本地 SOCKS5</code></td><td>客户端请求确实命中代理</td></tr><tr><td>Windows DNS 缓存</td><td>清空后仍失败</td><td>单纯刷新 DNS 不能解决复发</td></tr><tr><td>关闭泄漏防护并重启两端</td><td>仍然失败</td><td>UDP/IP 泄漏防护不是复发根因</td></tr><tr><td>Windows“修复”</td><td>完成后仍失败</td><td>安装包级修复不足</td></tr><tr><td>Chromium 临时缓存</td><td>备份移出后恢复</td><td>问题范围定位到客户端临时缓存</td></tr></tbody></table><div><div><div></div><div><code>401</code> 为什么反而说明网络正常</div></div><div><p>未携带登录信息时返回 <code>401</code> 是预期结果，表示请求已完成 DNS、代理、TLS 和 HTTP 往返。若连接层失败，通常只能看到超时、连接关闭或状态码 <code>000</code>。</p></div></div></section><section><h3>3. IPv6 UDP <code>connection blocked</code> 不是根因<a href="#3-ipv6-udp-connection-blocked-不是根因"><span>#</span></a></h3><p>Proxifier 日志中出现：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>chatgpt.exe - [2001:4860:4860::8888]:443 (UDP) (IPv6): connection blocked</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>该地址属于 Google Public DNS。UDP 443 通常来自 Chromium 的 QUIC、HTTP/3 或安全 DNS 探测；开启“DNS 和 IP 泄漏防护模式”后，Proxifier 阻止命中代理规则的 UDP 流量是预期行为。</p><p>本次关闭泄漏防护、让 UDP 绕过后，用量页仍然失败；与此同时 <code>chatgpt.com:443</code> 已经收到服务端数据。因此不要关闭系统 IPv6，也不要为该地址长期添加直连规则。最终配置应重新开启泄漏防护。</p></section><section><h3>4. 不退出登录的缓存修复<a href="#4-不退出登录的缓存修复"><span>#</span></a></h3><p>新版客户端实际使用的 Chromium 用户数据目录为：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>%APPDATA%\Codex\web\Codex</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>为了避免触发重新登录、手机号验证或丢失本地状态，本次没有直接使用 Windows“重置”，而是先完全退出 ChatGPT，再将以下临时缓存移动到时间戳备份目录：</p><div><div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>GraphiteDawnCache</span></div></div><div><div><div>2</div></div><div><span>GrShaderCache</span></div></div><div><div><div>3</div></div><div><span>ShaderCache</span></div></div><div><div><div>4</div></div><div><span>GPUPersistentCache</span></div></div><div><div><div>5</div></div><div><span>Default\Cache</span></div></div><div><div><div>6</div></div><div><span>Default\Code Cache</span></div></div><div><div><div>7</div></div><div><span>Default\GPUCache</span></div></div><div><div><div>8</div></div><div><span>Default\DawnGraphiteCache</span></div></div><div><div><div>9</div></div><div><span>Default\DawnWebGPUCache</span></div></div><div><div><div>10</div></div><div><span>Default\Shared Dictionary\cache</span></div></div><div><div><div>11</div></div><div><span>Default\Partitions\codex-browser-app\Cache</span></div></div><div><div><div>12</div></div><div><span>Default\Partitions\codex-browser-app\Code Cache</span></div></div><div><div><div>13</div></div><div><span>Default\Partitions\codex-browser-app\GPUCache</span></div></div><div><div><div>14</div></div><div><span>Default\Partitions\codex-browser-app\DawnGraphiteCache</span></div></div><div><div><div>15</div></div><div><span>Default\Partitions\codex-browser-app\DawnWebGPUCache</span></div></div><div><div><div>16</div></div><div><span>Default\Partitions\codex-browser-app\Shared Dictionary\cache</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div><p>备份目录使用类似名称：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>%APPDATA%\Codex\web\Codex-cache-backup-YYYYMMDD-HHMMSS</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>以下内容必须保留：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Default\Network</span></div></div><div><div><div>2</div></div><div><span>Default\Local Storage</span></div></div><div><div><div>3</div></div><div><span>Default\Session Storage</span></div></div><div><div><div>4</div></div><div><span>%USERPROFILE%\.codex\auth.json</span></div></div></code></pre><div><div></div><div></div></div></figure></div><div><div><div></div><div>Warning</div></div><div><p>不要直接删除整个 <code>%APPDATA%\Codex\web\Codex</code>，否则可能清掉 Cookie、登录状态和本地浏览器数据。应先移动到备份，并且只处理明确列出的临时缓存目录。</p></div></div><p>本次共成功移动 16 个缓存目录，零跳过、零错误。ChatGPT 自动重建缓存后，用量页立即恢复，且没有重新登录。</p><p>如需回滚，应先退出 ChatGPT，将新生成的同名缓存目录另行改名，再从时间戳备份目录恢复；不要直接覆盖正在使用的新缓存。</p></section></section><section><h2>七、Codex 正文可附图，但侧边栏上传失败<a href="#七codex-正文可附图但侧边栏上传失败"><span>#</span></a></h2><section><h3>1. 先区分两个上传入口<a href="#1-先区分两个上传入口"><span>#</span></a></h3><p>同一张小图片在 Codex 任务正文中可以读取，拖入 ChatGPT 侧边栏后却显示 <code>Upload failed</code>。这两个入口不能只凭界面相似就视为同一条上传链路。</p><p>本次日志显示：</p>

<table><thead><tr><th>入口</th><th>实际行为</th><th>诊断意义</th></tr></thead><tbody><tr><td>Codex 任务正文</td><td>先把本地附件交给任务</td><td>能成功说明文件可读、格式和大小没有明显问题</td></tr><tr><td>ChatGPT 侧边栏</td><td>立即请求文件上传接口</td><td>会直接暴露 DNS、TLS、代理切换和上传域名覆盖问题</td></tr></tbody></table><p>因此，“一个入口成功、另一个入口失败”不等于侧边栏不支持图片，也不能优先归因于文件权限。</p></section><section><h3>2. 证据链与根因范围<a href="#2-证据链与根因范围"><span>#</span></a></h3><p>与失败时间对应的应用日志出现：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>POST /files -&gt; net::ERR_NETWORK_CHANGED</span></div></div><div><div><div>2</div></div><div><span>net::ERR_CERT_COMMON_NAME_INVALID</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>同时观察到以下现象：</p><ul>
<li>OpenAI 相关域名被解析到 <code>127.x.x.x</code> 回环假地址，而不是公网地址。</li>
<li><code>chatgpt.exe</code> 与 <code>codex.exe</code> 都命中了 Proxifier 的 AI 工具规则。</li>
<li>侧边栏相关 HTTPS 连接存在“已发送数据、接收 0 字节”的记录。</li>
<li>IPv6/QUIC、mDNS 和非 A/AAAA 查询存在被阻止的记录。</li>
</ul><p>Proxifier 在“通过代理解析主机名”时会为域名分配 <code>127.x.x.x</code> 假地址；这种地址只有在后续连接继续被 Proxifier 正确接管时才有效。由此可把故障范围收敛为：<strong>侧边栏文件接口经过的 Proxifier 与本地 SOCKS5 代理链路不稳定，或 DNS 假地址与进程接管没有保持一致</strong>。</p><div><div><div></div><div>Note</div></div><div><p>“进程命中代理规则”只证明连接选择了某条规则，不代表 DNS、TLS 和 HTTP 上传已经成功。仍要结合接收字节数、错误码和同一时刻的日志判断。</p></div></div></section><section><h3>3. 不能使用 TUN 时的选择性代理配置<a href="#3-不能使用-tun-时的选择性代理配置"><span>#</span></a></h3><p>在企业网络、安全客户端或 VPN 不允许开启 TUN 的环境中，可以保留单层进程代理：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>企业网络保持原状</span></div></div><div><div><div>2</div></div><div><span><span>    </span></span><span>-&gt; Proxifier 只接管 ChatGPT / Codex</span></div></div><div><div><div>3</div></div><div><span><span>    </span></span><span>-&gt; 本地代理工具只提供 SOCKS5 监听</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>本地代理工具保持：</p><ul>
<li>TUN/虚拟网卡关闭。</li>
<li>系统代理关闭。</li>
<li>本地 SOCKS5 端口保持监听。</li>
</ul><p>Proxifier 规则按从上到下的顺序配置：</p>

<table><thead><tr><th>顺序</th><th>规则</th><th>目标</th><th>动作</th></tr></thead><tbody><tr><td>1</td><td>Localhost</td><td><code>localhost; 127.0.0.1; ::1</code></td><td>Direct</td></tr><tr><td>2</td><td>Private Networks</td><td><code>10.0.0.0/8; 172.16.0.0/12; 192.168.0.0/16</code></td><td>Direct</td></tr><tr><td>3</td><td>AI Tools</td><td><code>ChatGPT.exe; Codex.exe; codex.exe</code>，目标地址 Any</td><td>本地 SOCKS5</td></tr><tr><td>4</td><td>Default</td><td>Any</td><td>Direct</td></tr></tbody></table><p>不要为当前 DHCP 下发的 DNS 地址逐个写死规则。使用三个标准私网网段可以覆盖常见的企业 DNS 和内网地址，并避免网络切换后规则立即失效。</p><div><div><div></div><div>Warning</div></div><div><p>不要把整个 <code>127.0.0.0/8</code> 设置为 Direct。Proxifier 的远程 DNS 可能使用该网段中的假地址；整体直连会绕开后续代理接管。Localhost 规则只保留明确需要的 <code>127.0.0.1</code> 与 <code>::1</code>。</p></div></div><p>名称解析保持：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>关闭：自动检测 DNS 设置</span></div></div><div><div><div>2</div></div><div><span>开启：通过代理解析主机名称</span></div></div><div><div><div>3</div></div><div><span>选择：仅仅解析以下主机名</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>域名列表至少覆盖：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>chatgpt.com</span></div></div><div><div><div>2</div></div><div><span>*.chatgpt.com</span></div></div><div><div><div>3</div></div><div><span>*.openai.com</span></div></div><div><div><div>4</div></div><div><span>*.oaistatic.com</span></div></div><div><div><div>5</div></div><div><span>*.oaistatsig.com</span></div></div><div><div><div>6</div></div><div><span>*.oaiusercontent.com</span></div></div><div><div><div>7</div></div><div><span>*.auth.openai.com</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><code>chatgpt.com</code> 与 <code>*.chatgpt.com</code> 要分别配置；通配子域名不能代替裸域名。</p></section><section><h3>4. 不要仅凭 UDP 阻止日志改配置<a href="#4-不要仅凭-udp-阻止日志改配置"><span>#</span></a></h3><p>配置核对时可能看到：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>non A/AAAA request blocked</span></div></div><div><div><div>2</div></div><div><span>UDP / QUIC connection blocked</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>这通常来自“DNS 和 IP 泄漏防护模式”对 HTTPS/SVCB 类型查询和 UDP 的限制。它们能够解释日志中的 <code>connection blocked</code>，但普通 HTTPS 上传通常可以回退到 TCP，所以不能仅凭这些记录断定必须关闭防护。</p><p>更稳妥的处理顺序是：</p><ol>
<li>确认 Localhost、私网直连和 AI 工具规则的顺序。</li>
<li>确认本地 SOCKS5 端口确实由代理核心监听。</li>
<li>确认文件上传相关域名已纳入代理解析。</li>
<li>完全退出并重启 Proxifier 与 ChatGPT/Codex，清理旧的 <code>127.x.x.x</code> 映射。</li>
<li>使用同一张小图片复测侧边栏，并同步观察最新连接日志。</li>
<li>只有复测仍失败，且日志能把失败与非 A/AAAA 或 UDP 阻止对应起来时，才进行一次可回滚的 A/B 测试。</li>
</ol><div><div><div></div><div>验证状态</div></div><div><p>本次已经确认图片本身无异常、定位了 <code>/files</code> 网络错误，并只读核对了规则顺序、代理监听和域名覆盖；但没有记录重启后的侧边栏成功上传结果。后续复测成功前，应把结论表述为“网络链路问题已定位、配置已核对”，而不是“问题已经修复”。</p></div></div></section></section><section><h2>八、前两类故障的最终验证结果<a href="#八前两类故障的最终验证结果"><span>#</span></a></h2><p>最终观察结果：</p><ul>
<li> 启动速度恢复正常</li>
<li> 中文界面正常生效</li>
<li> “设置 → 用量”可以加载</li>
<li> 审批模式选项恢复完整</li>
<li> 对话与 Codex 工作流可以正常联网</li>
<li> Proxifier 中的 ChatGPT/Codex 连接命中指定 SOCKS5 规则</li>
<li> 登录态用量接口经同一 SOCKS5 返回 <code>HTTP 200</code></li>
<li> 临时关闭泄漏防护后故障仍可复现，排除 UDP 阻止因素</li>
<li> 选择性备份并移出 Chromium 缓存后，用量页恢复且登录态保留</li>
</ul><p>左下角原有的 5 小时、7 天用量和重置摘要没有恢复，但“设置 → 用量”已经正常。这属于本次新版界面布局变化，不是网络故障仍未解决。</p></section><section><h2>九、可复用的排查顺序<a href="#九可复用的排查顺序"><span>#</span></a></h2><p>以后遇到类似问题，按以下顺序排查：</p><ol>
<li>先确认“设置 → 用量”是正常数据显示，还是直接报加载失败。</li>
<li>查看 Proxifier 是否出现 <code>chatgpt.exe</code> 或 <code>codex.exe</code> 到 <code>chatgpt.com:443</code> 的记录。</li>
<li>规则命中但收不到响应时，不要停在“进程已经走代理”的结论上，继续检查 DNS。</li>
<li>同时配置裸域名和通配子域名。</li>
<li>对比本地 DNS 后走 SOCKS5 与 SOCKS5 远程解析的结果。</li>
<li>检查“DNS 和 IP 泄漏防护模式”及非 A/AAAA 查询设置。</li>
<li>如果服务端已经返回数据，再做一次不输出令牌和响应正文的登录态接口校验，区分账号问题与客户端问题。</li>
<li>临时关闭泄漏防护只能用于 A/B 对照；若关闭后仍失败，应立即重新开启，不要继续扩大代理改动。</li>
<li>优先使用 Windows“修复”；无效时，备份并选择性移出 Chromium 临时缓存。</li>
<li>最后才考虑退出登录或 Windows“重置”，因为它们可能触发重新认证并删除应用数据。</li>
<li>网络和用量页都恢复后，再判断侧边栏差异是否属于新版 UI 调整。</li>
<li>如果只有侧边栏附件失败，用同一文件对比两个入口，并在点击上传的同时检查 <code>/files</code>、上传域名和 Proxifier 接收字节数。</li>
</ol></section><section><h2>十、公开发布与隐私<a href="#十公开发布与隐私"><span>#</span></a></h2><p>本文使用 <code>publish: true</code>，仅保留可公开复用的配置和诊断方法。以下内容已经省略或替换为占位符：</p><ul>
<li>Windows 用户名、计算机名和本机绝对路径。</li>
<li>真实代理端口、代理节点、订阅地址和认证信息。</li>
<li>公司域名、内网地址、VPN 路由和安全策略。</li>
<li>ChatGPT/Codex 会话 ID、线程 ID、日志文件名和进程实例 ID。</li>
<li>本机 DNS 返回的具体异常 IP。</li>
<li>DHCP 下发的 DNS 地址、本地 SOCKS5 端口和代理配置文件名。</li>
<li>Proxifier 完整导出配置。</li>
<li>实际 Chromium 缓存备份时间戳和本机用户名。</li>
<li>登录令牌、账号 ID 和用量接口响应正文。</li>
</ul></section><section><h2>十一、参考链接<a href="#十一参考链接"><span>#</span></a></h2><ul>
<li><a href="https://help.openai.com/en/articles/9247338-network-recommendations-for-chatgpt-errors-on-web-and-apps" target="_blank">OpenAI：ChatGPT 网页和应用网络错误建议</a></li>
<li><a href="https://help.openai.com/en/articles/11369540-using-codex-with-chatgpt" target="_blank">OpenAI：通过 ChatGPT 套餐使用 Codex</a></li>
<li><a href="https://learn.chatgpt.com/docs/agent-approvals-security" target="_blank">OpenAI：Agent approvals &amp; security</a></li>
<li><a href="https://help.openai.com/en/articles/9982051-using-the-chatgpt-windows-app" target="_blank">OpenAI：Windows 应用使用说明</a></li>
<li><a href="https://support.microsoft.com/en-us/windows/apps/repair-apps-and-programs-in-windows" target="_blank">Microsoft：修复 Windows 应用</a></li>
<li><a href="https://developers.google.com/speed/public-dns/docs/using" target="_blank">Google：Public DNS 地址</a></li>
<li><a href="https://www.proxifier.com/docs/win-v4/dns.html" target="_blank">Proxifier：Name Resolution</a></li>
<li><a href="https://www.proxifier.com/changelog/" target="_blank">Proxifier v4 更新日志</a></li>
</ul></section></section>]]></content>
    </entry>
    <entry>
      <id>https://yyq-firefly.pages.dev/posts/50-tutorials/windows/codex-claude-%E8%BD%AF%E4%BB%B6%E7%BA%A7%E4%BB%A3%E7%90%86%E8%AE%BE%E7%BD%AE%E6%95%99%E7%A8%8B/</id>
      <title type="text">Codex Claude 软件级代理设置教程</title>
      <published>2026-06-24T00:00:00.000Z</published>
      <updated>2026-07-31T00:00:00.000Z</updated>
      <author><name>YYQ</name></author>
      <link rel="alternate" href="https://yyq-firefly.pages.dev/posts/50-tutorials/windows/codex-claude-%E8%BD%AF%E4%BB%B6%E7%BA%A7%E4%BB%A3%E7%90%86%E8%AE%BE%E7%BD%AE%E6%95%99%E7%A8%8B/"/>
      <summary type="text"></summary>
      <content type="html"><![CDATA[<section><h1>Codex Claude 软件级代理设置教程<a href="#codex-claude-软件级代理设置教程"><span>#</span></a></h1><p>相关笔记：<a href="/posts/50-Tutorials/Windows/ChatGPT%20Windows%20%E5%8D%87%E7%BA%A7%E5%90%8E%20Proxifier%20%E7%BD%91%E7%BB%9C%E5%BC%82%E5%B8%B8%E6%8E%92%E6%9F%A5/">ChatGPT Windows 升级后 Proxifier 网络异常排查</a>、<a href="/posts/50-Tutorials/Windows/Codex%20Windows%20%E5%BE%AE%E8%BD%AF%E5%95%86%E5%BA%97%E5%AE%89%E8%A3%85%E5%8C%85%E6%8F%90%E5%8F%96%E4%B8%8E%E6%89%8B%E5%8A%A8%E6%9B%B4%E6%96%B0/">Codex Windows 微软商店安装包提取与手动更新</a>、<a href="/posts/50-Tutorials/Windows/Git%20%E4%B8%8E%20GitHub%20SSH%20%E4%BB%A3%E7%90%86%E9%85%8D%E7%BD%AE%E6%95%99%E7%A8%8B/">Git 与 GitHub SSH 代理配置教程</a>、<a href="/posts/20-Knowledge/Windows/%E7%94%B5%E8%84%91%E5%BF%85%E5%A4%87%E8%BD%AF%E4%BB%B6/">电脑必备软件</a></p><section><h2>结论<a href="#结论"><span>#</span></a></h2><p>优先使用“按软件代理”，只让 Codex、Claude 这类 AI 工具走本地代理端口，不要一上来就开启全局 TUN 或系统代理。</p><div><div><div></div><div>2026-07-07 实测可用配置</div></div><div><p>Proxifier 使用 SOCKS5，规则同时包含 <code>Codex.exe</code> 和 <code>codex.exe</code>；<code>Localhost</code> 与代理核心保持 Direct；不使用右键菜单的临时 <code>Proxify Application</code>；系统代理和 TUN 均关闭。这样 Codex 启动、用量加载和对话响应都恢复正常速度。</p></div></div><p>在当前这类 Windows + 公司网络 + 本地代理工具环境里，推荐优先使用 Proxifier：</p><ol>
<li>首选 Proxifier：按进程接管 Codex、Claude，并让 DNS 通过代理解析。</li>
<li>可选启动脚本：适合命令行工具，或 Electron 应用明确吃环境变量和 <code>--proxy-server</code> 的情况。</li>
<li>Git 与 GitHub CLI 分开处理：Git 使用 URL 级规则，<code>gh</code> 用包装函数临时继承同一个代理值。</li>
<li>最后再用 TUN：只作为 Proxifier 和启动脚本都无法处理 DNS 或路由问题时的兜底方案。</li>
</ol></section><section><h2>场景选择<a href="#场景选择"><span>#</span></a></h2>

<table><thead><tr><th>场景</th><th>推荐方案</th></tr></thead><tbody><tr><td>Codex 加入 Proxifier 后仍响应慢、反复 reconnect</td><td>Proxifier + 关闭自动 DNS 检测 + 开启通过代理解析主机名</td></tr><tr><td>Codex 可用，但 Claude Desktop 显示 <code>Couldn't connect to Claude</code></td><td>Proxifier 路径规则命中后，再检查 Name Resolution 是否仍使用本地 DNS</td></tr><tr><td>公司内网、VPN、Jira、Git 不能被全局代理影响</td><td>Proxifier 按进程代理</td></tr><tr><td>Claude Code 从终端启动，想临时测试</td><td>当前终端设置 <code>HTTP_PROXY</code>、<code>HTTPS_PROXY</code>、<code>ALL_PROXY</code></td></tr><tr><td>Electron 桌面应用支持启动参数</td><td>环境变量 + <code>--proxy-server</code></td></tr><tr><td>GitHub 需要代理，但 GitLab 或公司仓库必须直连</td><td>Git URL 级代理配置</td></tr><tr><td>Git 已能访问 GitHub，但 <code>gh auth login</code>、<code>gh api</code> 仍失败</td><td>PowerShell 包装函数让 <code>gh</code> 临时复用 Git 代理</td></tr><tr><td>Proxifier 和启动脚本都不稳定</td><td>临时开启 TUN，再单独处理公司域名直连规则</td></tr></tbody></table></section><section><h2>适用场景<a href="#适用场景"><span>#</span></a></h2><ul>
<li>Windows 系统代理已经开启，但 Codex、Claude 仍然连接失败。</li>
<li>开启 TUN 后 AI 工具可用，但公司内网、Jira、Git、VPN 页面异常。</li>
<li>只希望 Codex、Claude、Node 子进程走代理，不影响浏览器、IDEA、企业安全软件和公司网络。</li>
<li>本地代理工具已经提供 HTTP 或 SOCKS5 端口，例如 Clash、FlyingBird、V2RayN、Shadowsocks。</li>
</ul></section><section><h2>先确认本地代理端口<a href="#先确认本地代理端口"><span>#</span></a></h2><p>常见本地端口：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>HTTP 代理：127.0.0.1:7890</span></div></div><div><div><div>2</div></div><div><span>SOCKS5 代理：127.0.0.1:7890 或 127.0.0.1:1080</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>以实际代理工具为准。先确认代理软件已经连接节点，并且本机端口正在监听：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>Test-NetConnection</span><span> </span><span>127.0</span><span>.</span><span>0.1</span><span><span> </span><span>-</span><span>Port </span></span><span>7890</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>如果你的工具区分 HTTP 与 SOCKS5，后面脚本里的协议也要对应修改。</p></section><section><h2>方案一：Proxifier 按进程代理（当前优先）<a href="#方案一proxifier-按进程代理当前优先"><span>#</span></a></h2><p>当系统代理对 Codex 不生效，或者 Codex 响应很慢、需要反复 reconnect、甚至无法登录时，优先使用 Proxifier。</p><section><h3>中文界面版本<a href="#中文界面版本"><span>#</span></a></h3><p>如果英文界面不顺手，可以参考 <code>1564307973/Proxifier-CN</code>。这个仓库整理了 Proxifier 中文本地化包和便携版，适合对照中文菜单配置代理服务器、代理规则和 DNS 解析。</p><p>注意：</p><ul>
<li>汉化包通常有版本适配限制，安装前先确认支持的 Proxifier 版本。</li>
<li>汉化不等于破解。Proxifier 仍是商业软件，长期使用需要正版授权。</li>
<li>如果已经安装官方新版 Proxifier，不要直接覆盖不匹配版本的汉化文件，避免程序异常。</li>
</ul></section><section><h3>添加代理服务器<a href="#添加代理服务器"><span>#</span></a></h3><p>进入：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Profile -&gt; Proxy Servers -&gt; Add</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>填写本地代理：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Address: 127.0.0.1</span></div></div><div><div><div>2</div></div><div><span>Port: 7890</span></div></div><div><div><div>3</div></div><div><span>Protocol: SOCKS Version 5</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>如果你的本地 SOCKS5 端口是 <code>1080</code>，就改为 <code>1080</code>。</p><p>弹出是否设为默认代理时，建议选择“否”。不要让 Proxifier 一开始接管所有程序。</p></section><section><h3>添加代理规则<a href="#添加代理规则"><span>#</span></a></h3><p>进入：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Profile -&gt; Proxification Rules -&gt; Add</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>为 Codex 添加规则：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Name: Codex</span></div></div><div><div><div>2</div></div><div><span>Applications: Codex.exe; codex.exe</span></div></div><div><div><div>3</div></div><div><span>Target Hosts: Any</span></div></div><div><div><div>4</div></div><div><span>Target Ports: Any</span></div></div><div><div><div>5</div></div><div><span>Action: Proxy SOCKS5 127.0.0.1:7890</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>两个进程都要包含：<code>Codex.exe</code> 是桌面界面，<code>codex.exe</code> 是后台 app-server。只代理前者时，窗口可能能打开，但“用量”、设置和对话请求会长时间等待。</p><p>不要从 Proxifier 右键菜单临时执行 <code>Proxify Application</code>。这种手动接管会跳过普通规则，包括 <code>Localhost</code> 直连规则；应当始终通过 <code>Profile -&gt; Proxification Rules</code> 配置。</p><p>Claude Code 常见还需要把 Node 运行时纳入规则：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Name: Claude Code</span></div></div><div><div><div>2</div></div><div><span>Applications: claude.exe; node.exe</span></div></div><div><div><div>3</div></div><div><span>Action: Proxy SOCKS5 127.0.0.1:7890</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>如果担心 <code>node.exe</code> 范围太大，可以先只加 <code>claude.exe</code>，观察 Proxifier 日志里实际发起连接的进程，再补充更精确的路径规则。</p></section><section><h3>DNS 也要走代理<a href="#dns-也要走代理"><span>#</span></a></h3><p>截图里的 Linux.do 经验重点是：问题不一定出在 Codex 进程没有代理，而是 DNS 解析没有按预期通过代理。</p><p>典型现象：</p><ul>
<li>已经在 Proxifier 中加入 <code>codex.exe</code>，但响应非常慢。</li>
<li>需要多次 reconnect 才有响应。</li>
<li>甚至无法登录。</li>
<li>使用系统代理时也要尝试多次 reconnect。</li>
</ul><p>处理方式：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Profile -&gt; Name Resolution</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>在 Name Resolution 中：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>关闭：Detect DNS setting automatically</span></div></div><div><div><div>2</div></div><div><span>开启：Resolve hostnames through proxy</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>这样让目标进程的主机名解析也通过代理完成。开启后再完全退出 Codex，并重新启动测试。</p><p>公司网络需要保留内网 DNS 时，优先使用 <code>Resolve ONLY the following</code>，只让下列公网域名通过代理解析：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>*.chatgpt.com</span></div></div><div><div><div>2</div></div><div><span>*.openai.com</span></div></div><div><div><div>3</div></div><div><span>*.oaistatic.com</span></div></div><div><div><div>4</div></div><div><span>*.oaistatsig.com</span></div></div><div><div><div>5</div></div><div><span>*.oaiusercontent.com</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>这样不会把所有域名都交给代理端解析，也能减少对公司内网和 split DNS 的影响。</p><p>如果使用 SOCKS5，尽量选择支持远端 DNS 的方式。某些命令行工具支持 <code>socks5h://127.0.0.1:7890</code>，其中 <code>h</code> 表示 hostname 交给代理端解析；不支持时再退回 <code>socks5://</code>。</p><div><div><div></div><div>ChatGPT 新版专项排障</div></div><div><p>如果升级后同时出现启动慢、语言回退、用量加载失败或审批模式缺失，请参阅 <a href="/posts/50-Tutorials/Windows/ChatGPT%20Windows%20%E5%8D%87%E7%BA%A7%E5%90%8E%20Proxifier%20%E7%BD%91%E7%BB%9C%E5%BC%82%E5%B8%B8%E6%8E%92%E6%9F%A5/">ChatGPT Windows 升级后 Proxifier 网络异常排查</a>。除了 <code>*.chatgpt.com</code>，还要单独覆盖裸域名 <code>chatgpt.com</code>，并检查“DNS 和 IP 泄漏防护模式”。</p></div></div></section><section><h3>实测案例：Codex 可以，Claude 仍打不开<a href="#实测案例codex-可以claude-仍打不开"><span>#</span></a></h3><p>本机配置中已经把 Codex 和 Claude 的程序路径都加入 Proxifier。现象是：</p><ul>
<li>Codex 可以正常打开。</li>
<li>Claude Desktop 仍显示 <code>Couldn't connect to Claude</code>。</li>
<li>错误提示中出现 <code>Your network redirected this request to www.anthropic.com</code>。</li>
</ul><p>这说明 Proxifier 的路径规则不一定有问题，真正的问题可能是名称解析仍然走了本地网络，被公司网络、DNS 策略、网关或安全软件重定向。</p><p>处理方式：</p><ol>
<li>打开 Proxifier 日志，确认 Claude 对 <code>www.anthropic.com:443</code>、<code>claude.ai:443</code> 或相关域名的连接是否命中代理规则。</li>
<li>如果规则已命中，但 Claude 仍提示网络被重定向，进入 <code>Profile -&gt; Name Resolution</code>。</li>
<li>关闭 <code>Detect DNS setting automatically</code>。</li>
<li>开启 <code>Resolve hostnames through proxy</code>。</li>
<li>完全退出 Claude Desktop 后重新打开。</li>
</ol><p>同理，Proxifier 日志里如果已经能看到类似：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>codex.exe - chatgpt.com:443 open through proxy 127.0.0.1:7890 SOCKS5</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>只能说明连接动作命中了代理规则，不代表 DNS 解析一定正确。遇到发送字节但收不到响应、反复 close、应用层报网络重定向时，应继续检查名称解析。</p></section><section><h3>Name Resolution 选项理解<a href="#name-resolution-选项理解"><span>#</span></a></h3><p><code>Name Resolution</code> 决定“域名变成 IP”这一步在哪里发生。</p><p>常见理解：</p>

<table><thead><tr><th>选项</th><th>含义</th><th>适合场景</th></tr></thead><tbody><tr><td><code>Detect DNS setting automatically</code></td><td>让 Proxifier 自动判断使用本地 DNS 还是代理侧解析</td><td>普通网络环境，问题少时可以保留</td></tr><tr><td><code>Resolve hostnames locally</code> / 本地解析</td><td>使用 Windows 当前 DNS 解析域名，再把 IP 交给代理连接</td><td>公司内网域名、需要 split DNS 的服务</td></tr><tr><td><code>Resolve hostnames through proxy</code> / 通过代理解析</td><td>把域名交给代理服务器或代理链解析</td><td>公网服务被本地 DNS 污染、劫持、重定向或解析失败</td></tr></tbody></table><p>对 Codex、Claude 这类公网 AI 工具，如果已经按进程代理但仍打不开，优先尝试 <code>Resolve hostnames through proxy</code>。</p><p>可能的副作用：</p><ul>
<li>公司内网域名可能无法解析，因为代理节点不知道公司内部 DNS。</li>
<li>某些依赖本地 DNS 分流的服务可能走到错误地区或错误出口。</li>
<li>代理服务端会看到访问的域名，隐私边界从本机 DNS 转移到代理侧。</li>
<li>如果代理节点的 DNS 质量不好，可能出现解析慢、解析到不可用 IP、地区不匹配等问题。</li>
<li>Windows <code>hosts</code> 和公司 VPN 的 split DNS 结果可能不再按预期生效。</li>
</ul><p>所以不要把 Proxifier 的默认规则改成全局代理。推荐只代理 Codex、Claude 等公网 AI 工具，代理软件自身、公司内网工具、VPN 客户端和企业安全软件保持 Direct。</p></section><section><h3>规则顺序<a href="#规则顺序"><span>#</span></a></h3><p>Proxifier 规则从上往下匹配，建议：</p>

<table><thead><tr><th>顺序</th><th>规则</th><th>Applications</th><th>Targets</th><th>Action</th></tr></thead><tbody><tr><td>1</td><td>Localhost</td><td>Any</td><td><code>localhost; 127.0.0.1; ::1</code></td><td>Direct</td></tr><tr><td>2</td><td>Proxy Core</td><td>代理核心进程，例如 <code>FlyingBirdCore.exe</code></td><td>Any</td><td>Direct</td></tr><tr><td>3</td><td>Codex</td><td><code>Codex.exe; codex.exe</code></td><td>Any</td><td>SOCKS5 <code>127.0.0.1:7890</code></td></tr><tr><td>4</td><td>Default</td><td>Any</td><td>Any</td><td>Direct</td></tr></tbody></table><p>不要把代理软件自身也放进代理规则，否则可能出现代理套代理、循环连接或节点频繁断开。</p><p>使用 Proxifier 时，让本地代理核心保持监听即可，同时关闭代理软件的“系统代理”和 TUN/虚拟网卡。多层接管会形成重复代理，常见表现就是 Codex 启动慢、用量迟迟不显示。</p></section></section><section><h2>方案二：启动脚本注入代理<a href="#方案二启动脚本注入代理"><span>#</span></a></h2><p>这是最干净的方式。环境变量只传给当前脚本启动的软件及其子进程，不会修改 Windows 全局系统代理。</p><section><h3>Codex Desktop<a href="#codex-desktop"><span>#</span></a></h3><p>完全退出 Codex 后，用 BAT 启动：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>@</span><span>echo</span><span> </span><span>off</span></div></div><div><div><div>2</div></div><div><span>chcp</span><span> </span><span>65001</span><span> &gt;</span><span>nul</span></div></div><div><div><div>3</div></div><div><span>set</span><span> </span><span>HTTP_PROXY</span><span><span>=</span><span>http://127.0.0.1:7890</span></span></div></div><div><div><div>4</div></div><div><span>set</span><span> </span><span>HTTPS_PROXY</span><span><span>=</span><span>http://127.0.0.1:7890</span></span></div></div><div><div><div>5</div></div><div><span>set</span><span> </span><span>ALL_PROXY</span><span><span>=</span><span>socks5://127.0.0.1:7890</span></span></div></div><div><div><div>6</div></div><div><span>start</span><span> </span><span>""</span><span> </span><span>"D:\软件\codex\Codex.exe"</span><span> --proxy-server=http://127.0.0.1:7890</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>注意：</p><ul>
<li>把 <code>D:\软件\codex\Codex.exe</code> 替换成你的真实 Codex 路径。</li>
<li>Codex Desktop 是单实例应用。已经运行时再执行 BAT，只会唤醒旧进程，新的代理变量不会注入。</li>
<li>测试时先退出所有 Codex 窗口，再从脚本启动。</li>
<li><code>--proxy-server</code> 是 Chromium/Electron 常见启动参数，Codex 当前本地实践可用；如果后续版本行为变化，以实际验证为准。</li>
</ul></section><section><h3>Claude Code<a href="#claude-code"><span>#</span></a></h3><p>Claude Code 是命令行工具，优先在启动它的终端里设置环境变量：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>$env:HTTP_PROXY</span><span><span> </span><span>=</span><span> </span></span><span>"http://127.0.0.1:7890"</span></div></div><div><div><div>2</div></div><div><span>$env:HTTPS_PROXY</span><span><span> </span><span>=</span><span> </span></span><span>"http://127.0.0.1:7890"</span></div></div><div><div><div>3</div></div><div><span>$env:ALL_PROXY</span><span><span> </span><span>=</span><span> </span></span><span>"socks5://127.0.0.1:7890"</span></div></div><div><div><div>4</div></div><div><span>claude</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>如果希望每次 Claude Code 都带这些变量，可以写入 <code>%USERPROFILE%\.claude\settings.json</code> 的 <code>env</code>：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>{</span></div></div><div><div><div>2</div></div><div><span>  </span><span>"env"</span><span>: {</span></div></div><div><div><div>3</div></div><div><span>    </span><span>"HTTP_PROXY"</span><span>: </span><span>"http://127.0.0.1:7890"</span><span>,</span></div></div><div><div><div>4</div></div><div><span>    </span><span>"HTTPS_PROXY"</span><span>: </span><span>"http://127.0.0.1:7890"</span><span>,</span></div></div><div><div><div>5</div></div><div><span>    </span><span>"ALL_PROXY"</span><span>: </span><span>"socks5://127.0.0.1:7890"</span></div></div><div><div><div>6</div></div><div><span><span>  </span></span><span>}</span></div></div><div><div><div>7</div></div><div><span>}</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>这个方式适合 Claude Code 本体和它启动的子进程。若只想临时测试，不要写入 <code>settings.json</code>，直接在当前终端设置环境变量即可。</p></section><section><h3>Claude Desktop 或其他 Electron 应用<a href="#claude-desktop-或其他-electron-应用"><span>#</span></a></h3><p>如果是桌面版 Electron 应用，可以尝试用启动参数：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>@</span><span>echo</span><span> </span><span>off</span></div></div><div><div><div>2</div></div><div><span>chcp</span><span> </span><span>65001</span><span> &gt;</span><span>nul</span></div></div><div><div><div>3</div></div><div><span>set</span><span> </span><span>HTTP_PROXY</span><span><span>=</span><span>http://127.0.0.1:7890</span></span></div></div><div><div><div>4</div></div><div><span>set</span><span> </span><span>HTTPS_PROXY</span><span><span>=</span><span>http://127.0.0.1:7890</span></span></div></div><div><div><div>5</div></div><div><span>set</span><span> </span><span>ALL_PROXY</span><span><span>=</span><span>socks5://127.0.0.1:7890</span></span></div></div><div><div><div>6</div></div><div><span>start</span><span> </span><span>""</span><span> </span><span>"C:\Path\To\App.exe"</span><span> --proxy-server=http://127.0.0.1:7890</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>这类参数并不是每个软件都会公开承诺支持。判断标准很简单：启动后能登录、能对话、公司网络不受影响，就保留；无效就切换到 Proxifier。</p></section></section><section><h2>方案三：Git 和 GitHub CLI 仅 GitHub 走代理<a href="#方案三git-和-github-cli-仅-github-走代理"><span>#</span></a></h2><p>如果 GitHub 需要代理，但 GitLab、公司仓库和其他网站必须直连，不要设置通用的 <code>http.proxy</code> 或 <code>https.proxy</code>。Git 支持按 URL 配置代理：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span><span>git config </span><span>--</span><span>global http.https:</span><span>//</span></span><span>github.com</span><span><span>/</span><span>.proxy http:</span><span>//</span></span><span>127.0</span><span>.</span><span>0.1</span><span>:</span><span>7890</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>这里的 <code>7890</code> 应替换为本地代理工具实际提供的 HTTP 代理端口。该规则只匹配 <code>https://github.com/</code>；其他 HTTPS 地址不会继承它。</p><p>如果此前配置过全局 Git 代理，先检查配置来源：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span><span>git config </span><span>--</span><span>global </span><span>--</span></span><span>get-regexp</span><span> </span><span>'^(http|https)\..*proxy$'</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>确认通用代理不再需要后，将它们移除，再设置 GitHub 专用规则：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span><span>git config </span><span>--</span><span>global </span><span>--</span><span>unset</span><span>-</span><span>all http.proxy</span></span></div></div><div><div><div>2</div></div><div><span><span>git config </span><span>--</span><span>global </span><span>--</span><span>unset</span><span>-</span><span>all https.proxy</span></span></div></div><div><div><div>3</div></div><div><span><span>git config </span><span>--</span><span>global http.https:</span><span>//</span></span><span>github.com</span><span><span>/</span><span>.proxy http:</span><span>//</span></span><span>127.0</span><span>.</span><span>0.1</span><span>:</span><span>7890</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>最后验证实际生效的代理项：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span><span>git config </span><span>--</span><span>global </span><span>--</span></span><span>get-regexp</span><span> </span><span>'^(http|https)\..*proxy$'</span></div></div><div><div><div>2</div></div><div><span><span>git config </span><span>--</span></span><span>get-urlmatch</span><span><span> http.proxy https:</span><span>//</span></span><span>github.com</span><span>/</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>预期只看到类似下面的 URL 级规则：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>http.https://github.com/.</span><span>proxy</span><span><span>=</span><span>http://127.0.0.1:7890</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div><div><div><div></div><div>HTTPS 与 SSH 是两套配置</div></div><div><p>这项 Git 配置只影响 <code>https://github.com/...</code> 形式的远程地址，不影响 <code>git@github.com:...</code> 形式的 SSH 地址。SSH 需要在 <code>~/.ssh/config</code> 中通过 <code>ProxyCommand</code> 单独设置代理，完整配置见 <a href="/posts/50-Tutorials/Windows/Git%20%E4%B8%8E%20GitHub%20SSH%20%E4%BB%A3%E7%90%86%E9%85%8D%E7%BD%AE%E6%95%99%E7%A8%8B/">Git 与 GitHub SSH 代理配置教程</a>。</p></div></div><section><h3>Git 配了代理，为什么 <code>gh auth login</code> 仍打不开<a href="#git-配了代理为什么-gh-auth-login-仍打不开"><span>#</span></a></h3><p>Git 和 GitHub CLI 是两个独立的网络客户端：</p>

<table><thead><tr><th>操作</th><th>读取 Git 的 <code>http.*.proxy</code></th></tr></thead><tbody><tr><td><code>git clone</code>、<code>git pull</code>、<code>git push</code></td><td>是</td></tr><tr><td><code>gh auth login</code>、<code>gh api</code>、<code>gh issue</code>、<code>gh pr</code></td><td>否</td></tr><tr><td><code>gh repo clone</code></td><td>实际执行 Git 的阶段读取；若还需发起 <code>gh</code> API 请求，该部分不读取</td></tr></tbody></table><p>即使 <code>.gitconfig</code> 使用不限定域名的通用 <code>http.proxy</code>，也只是 Git 的配置，不会自动变成 GitHub CLI、PowerShell 或 Windows 的全局代理。<code>gh auth login</code> 还需要先在命令行中访问 GitHub 获取设备登录信息；这一步失败时，浏览器可能不会正常打开。</p><p>GitHub CLI 没有单独的 <code>proxy</code> 配置项。它的 HTTP 请求使用进程继承到的 <code>HTTP_PROXY</code>、<code>HTTPS_PROXY</code> 等环境变量。如果不希望永久修改用户环境变量，可以用 PowerShell 包装函数只在 <code>gh.exe</code> 运行期间注入代理。</p></section><section><h3>让 <code>gh</code> 自动复用 Git 的代理<a href="#让-gh-自动复用-git-的代理"><span>#</span></a></h3><p>把下面函数加入 PowerShell 的 <code>$PROFILE</code>：</p><div><div><div><figure><figcaption><span></span><span>Terminal window</span><span>展开</span><span>收起</span></figcaption><pre><code><div><div><div>1</div></div><div><span>function</span><span> </span><span>gh</span><span> {</span></div></div><div><div><div>2</div></div><div><span>    </span><span># 读取 Git 对 GitHub 最终匹配到的全局代理；</span></div></div><div><div><div>3</div></div><div><span>    </span><span># 同时支持 http.https://github.com/.proxy 和通用 http.proxy。</span></div></div><div><div><div>4</div></div><div><span>    </span><span>$proxyUrl</span><span><span> </span><span>=</span><span> &amp; </span></span><span>git.exe</span><span><span> config </span><span>--</span><span>global </span><span>--</span></span><span>get-urlmatch</span><span> `</span></div></div><div><div><div>5</div></div><div><span><span>        </span></span><span>http.proxy `</span></div></div><div><div><div>6</div></div><div><span><span>        </span></span><span>https:</span><span>//</span><span>github.com</span><span><span>/</span><span> 2&gt;</span></span><span>$null</span></div></div><div><div><div>7</div></div><div>
</div></div><div><div><div>8</div></div><div><span>    </span><span>if</span><span> ([</span><span>string</span><span>]::IsNullOrWhiteSpace(</span><span>$proxyUrl</span><span>)) {</span></div></div><div><div><div>9</div></div><div><span>        </span><span>Write-Warning</span><span> </span><span>'Git 全局配置中没有找到 GitHub 代理，gh 将直接连接。'</span></div></div><div><div><div>10</div></div><div><span><span>        </span></span><span>&amp; </span><span>gh.exe</span><span> </span><span>@args</span></div></div><div><div><div>11</div></div><div><span>        </span><span>return</span></div></div><div><div><div>12</div></div><div><span><span>    </span></span><span>}</span></div></div><div><div><div>13</div></div><div>
</div></div><div><div><div>14</div></div><div><span>    </span><span>$proxyUrl</span><span><span> </span><span>=</span><span> </span></span><span>$proxyUrl.Trim</span><span>()</span></div></div><div><div><div>15</div></div><div><span>    </span><span>$oldHttpProxy</span><span><span> </span><span>=</span><span> </span></span><span>$env:HTTP_PROXY</span></div></div><div><div><div>16</div></div><div><span>    </span><span>$oldHttpsProxy</span><span><span> </span><span>=</span><span> </span></span><span>$env:HTTPS_PROXY</span></div></div><div><div><div>17</div></div><div>
</div></div><div><div><div>18</div></div><div><span>    </span><span>try</span><span> {</span></div></div><div><div><div>19</div></div><div><span>        </span><span>$env:HTTP_PROXY</span><span><span> </span><span>=</span><span> </span></span><span>$proxyUrl</span></div></div><div><div><div>20</div></div><div><span>        </span><span>$env:HTTPS_PROXY</span><span><span> </span><span>=</span><span> </span></span><span>$proxyUrl</span></div></div><div><div><div>21</div></div><div>
</div></div><div><div><div>22</div></div><div><span><span>        </span></span><span>&amp; </span><span>gh.exe</span><span> </span><span>@args</span></div></div><div><div><div>23</div></div><div><span><span>    </span></span><span>}</span></div></div><div><div><div>24</div></div><div><span>    </span><span>finally</span><span> {</span></div></div><div><div><div>25</div></div><div><span><span>        </span></span><span>[</span><span>Environment</span><span>]::SetEnvironmentVariable(</span></div></div><div><div><div>26</div></div><div><span>            </span><span>'HTTP_PROXY'</span><span>,</span></div></div><div><div><div>27</div></div><div><span>            </span><span>$oldHttpProxy</span><span>,</span></div></div><div><div><div>28</div></div><div><span>            </span><span>'Process'</span></div></div><div><div><div>29</div></div><div><span><span>        </span></span><span>)</span></div></div><div><div><div>30</div></div><div>
</div></div><div><div><div>31</div></div><div><span><span>        </span></span><span>[</span><span>Environment</span><span>]::SetEnvironmentVariable(</span></div></div><div><div><div>32</div></div><div><span>            </span><span>'HTTPS_PROXY'</span><span>,</span></div></div><div><div><div>33</div></div><div><span>            </span><span>$oldHttpsProxy</span><span>,</span></div></div><div><div><div>34</div></div><div><span>            </span><span>'Process'</span></div></div><div><div><div>35</div></div><div><span><span>        </span></span><span>)</span></div></div><div><div><div>36</div></div><div><span><span>    </span></span><span>}</span></div></div><div><div><div>37</div></div><div><span>}</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div><p>这个函数有三个边界：</p><ul>
<li>用 <code>git.exe</code> 读取 Git 针对 <code>https://github.com/</code> 最终匹配到的代理，因此兼容 GitHub 专用规则和通用 <code>http.proxy</code>。</li>
<li>使用 <code>--global</code>，只读取用户级 Git 配置，不让某个仓库的局部设置意外改变全部 <code>gh</code> 命令。</li>
<li>显式调用 <code>gh.exe</code>，避免函数递归；命令结束后恢复原来的进程环境变量，不影响同一终端中的其他程序。</li>
</ul></section><section><h3>安装并验证包装函数<a href="#安装并验证包装函数"><span>#</span></a></h3><p>创建并打开 PowerShell 配置文件：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>if</span><span> (!(</span><span>Test-Path</span><span><span> </span><span>-</span><span>LiteralPath $PROFILE)) {</span></span></div></div><div><div><div>2</div></div><div><span>    </span><span>New-Item</span><span><span> </span><span>-</span><span>ItemType File </span><span>-</span><span>Path $PROFILE </span><span>-</span><span>Force</span></span></div></div><div><div><div>3</div></div><div><span>}</span></div></div><div><div><div>4</div></div><div>
</div></div><div><div><div>5</div></div><div><span>notepad $PROFILE</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>粘贴函数并保存，然后立即重新加载：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>. $PROFILE</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>确认 <code>gh</code> 已被包装函数接管，并检查 Git 能返回代理值：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>Get-Command</span><span> gh</span></div></div><div><div><div>2</div></div><div><span><span>git config </span><span>--</span><span>global </span><span>--</span></span><span>get-urlmatch</span><span><span> http.proxy https:</span><span>//</span></span><span>github.com</span><span>/</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><code>Get-Command gh</code> 的 <code>CommandType</code> 应为 <code>Function</code>。之后仍按原方式使用：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span><span>gh auth login </span><span>-</span><span>h </span></span><span>github.com</span></div></div><div><div><div>2</div></div><div><span>gh api user</span></div></div><div><div><div>3</div></div><div><span>gh pr list</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>需要临时绕过包装函数并直接运行 GitHub CLI 时，显式调用：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>gh.exe</span><span> auth status</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>以后代理端口变化，只需修改 Git 配置：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span><span>git config </span><span>--</span><span>global http.https:</span><span>//</span></span><span>github.com</span><span><span>/</span><span>.proxy http:</span><span>//</span></span><span>127.0</span><span>.</span><span>0.1</span><span>:新端口</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>PowerShell 函数无需同步修改。</p></section></section><section><h2>方案四：TUN 兜底<a href="#方案四tun-兜底"><span>#</span></a></h2><p>如果启动脚本和 Proxifier 都无法稳定处理 DNS，可以临时开启代理工具的 TUN 或虚拟网卡作为兜底。</p><p>公司网络下要注意：</p><ul>
<li>TUN 可能接管默认路由和 DNS。</li>
<li>Fake-IP 可能把公司域名解析到 <code>198.18.0.0/16</code>。</li>
<li>系统代理排除列表只能影响应用层代理，不能完全约束 TUN。</li>
</ul><p>公司网络、VPN、内网 DNS 与 TUN 共存属于环境相关场景，需要根据实际企业网络策略单独处理，本文不公开展开。长期方案仍建议回到“只让 AI 工具显式走代理”。</p></section><section><h2>Windows 沙箱与工作区依赖<a href="#windows-沙箱与工作区依赖"><span>#</span></a></h2><section><h3><code>pwsh.exe</code> 商店别名导致沙箱启动失败<a href="#pwshexe-商店别名导致沙箱启动失败"><span>#</span></a></h3><p>如果 Codex 顶部持续出现“设置智能体沙盒以继续”，日志中又有类似错误：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>CreateProcessAsUserW failed: 1920</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>可能是 Microsoft Store 安装的 PowerShell 7 注册了 <code>pwsh.exe</code> 应用执行别名。沙箱用户无法通过这个别名启动真实程序，而系统自带的 Windows PowerShell 可以正常运行。</p><p>处理步骤：</p><ol>
<li>打开 Windows“设置 -&gt; 应用 -&gt; 高级应用设置 -&gt; 应用执行别名”。</li>
<li>关闭 Microsoft PowerShell 对应的 <code>pwsh.exe</code> 别名。</li>
<li>完全退出并重新启动 Codex。</li>
<li>新会话应使用 <code>C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe</code>。</li>
</ol><p>修复后可让 Codex 执行普通命令，并确认进程身份包含 <code>codexsandboxoffline</code>，再测试工作区文件的创建、读取和删除。出现这个身份说明智能体沙箱已经生效。</p></section><section><h3>Windows 10 显示“工作区依赖未安装”<a href="#windows-10-显示工作区依赖未安装"><span>#</span></a></h3><p>这和沙箱不是同一个功能。当前 Codex 的工作区依赖要求 Windows 11 22H2 或更高版本；Windows 10 即使反复点击“诊断”或“重新安装”，仍可能显示“未安装”或“无法重新安装”。</p><p>在 Windows 10 上可以关闭“Codex 依赖项”开关并忽略该提示，代码编辑、命令执行和沙箱仍可正常使用。若确实需要随附的 Node.js、Python 工具链，再升级到受支持的 Windows 11 版本。</p></section></section><section><h2>排查清单<a href="#排查清单"><span>#</span></a></h2><ul>
<li> 本地代理工具已连接节点</li>
<li> <code>Test-NetConnection 127.0.0.1 -Port 7890</code> 成功</li>
<li> Codex、Claude 已完全退出后重新启动</li>
<li> 单实例桌面应用没有复用旧进程</li>
<li> <code>HTTP_PROXY</code>、<code>HTTPS_PROXY</code>、<code>ALL_PROXY</code> 协议和端口正确</li>
<li> Git 已能访问 GitHub 但 <code>gh</code> 失败时，已单独给 <code>gh.exe</code> 注入代理环境变量</li>
<li> Proxifier 的 Codex 规则同时包含 <code>Codex.exe</code> 和 <code>codex.exe</code></li>
<li> 使用常规 Proxification Rules，而不是临时 <code>Proxify Application</code></li>
<li> <code>Localhost</code> 和代理核心规则位于 Codex 规则上方并保持 Direct</li>
<li> DNS 解析已经通过代理或远端解析</li>
<li> Claude 提示网络被重定向时，已关闭自动 DNS 检测并开启通过代理解析主机名</li>
<li> 代理软件自身没有被 Proxifier 代理</li>
<li> 使用 Proxifier 时已关闭系统代理和 TUN/虚拟网卡</li>
<li> Default 规则没有误改成全局代理</li>
<li> 公司内网域名没有被 TUN Fake-IP 污染</li>
<li> 沙箱报错 <code>1920</code> 时已关闭商店 PowerShell 的 <code>pwsh.exe</code> 应用执行别名</li>
</ul></section><section><h2>常见问题<a href="#常见问题"><span>#</span></a></h2><section><h3>系统代理开了，为什么 Codex 还是不通？<a href="#系统代理开了为什么-codex-还是不通"><span>#</span></a></h3><p>很多桌面软件、命令行工具或其子进程不一定读取 Windows 系统代理。Codex 这类 Electron 应用还可能有自己的网络栈。用启动脚本或 Proxifier 直接约束目标进程更可靠。</p></section><section><h3>为什么不推荐长期全局 TUN？<a href="#为什么不推荐长期全局-tun"><span>#</span></a></h3><p>TUN 是更底层的接管方式，适合兜底，但会影响默认路由、DNS、公司 VPN、内网域名和安全软件。AI 工具只需要访问少量公网服务时，进程级代理的副作用更小。</p></section><section><h3><code>HTTP_PROXY</code> 和 <code>HTTPS_PROXY</code> 要填 HTTP 还是 SOCKS？<a href="#http_proxy-和-https_proxy-要填-http-还是-socks"><span>#</span></a></h3><p>如果代理工具提供 HTTP 入站端口，优先写：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>http://127.0.0.1:7890</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><code>ALL_PROXY</code> 可以写 SOCKS5：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>socks5://127.0.0.1:7890</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>如果工具明确支持 <code>socks5h://</code>，可用它解决 DNS 走代理问题；不支持时可能会报协议错误。</p></section><section><h3>Claude Code 的 <code>settings.json</code> 在哪里？<a href="#claude-code-的-settingsjson-在哪里"><span>#</span></a></h3><p>Windows 下 <code>~/.claude</code> 等价于：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>%USERPROFILE%\.claude</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>用户级配置文件通常是：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>%USERPROFILE%\.claude\settings.json</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section></section><section><h2>发布与隐私<a href="#发布与隐私"><span>#</span></a></h2><p>本文设置了 <code>publish: true</code>，只记录可公开复用的配置。发布前不要写入以下内容：</p><ul>
<li>公司真实域名、内网 IP、VPN 路由和安全策略。</li>
<li>Windows 用户名、计算机名、仓库绝对路径和日志中的身份信息。</li>
<li>代理订阅、节点地址、认证用户名或密码。</li>
<li>Proxifier 导出的完整配置文件；其中可能包含代理凭据。</li>
</ul><p>涉及实际公司网络的排障过程应放在没有 <code>publish: true</code> 的私有笔记中，公开文档只使用 <code>&lt;公司域名&gt;</code> 等占位符。</p></section><section><h2>参考链接<a href="#参考链接"><span>#</span></a></h2><ul>
<li><a href="https://linux.do/t/topic/2311522/20" target="_blank">Linux.do：Codex / 代理相关讨论 1</a></li>
<li><a href="https://linux.do/t/topic/2184754" target="_blank">Linux.do：Codex / 代理相关讨论 2</a></li>
<li><a href="http://www.lzhpo.com/article/139" target="_blank">推荐一个全局代理工具 Proxifier</a></li>
<li><a href="https://github.com/selierlin/Share-SSR-V2ray/wiki/Proxifier%E8%AE%BE%E7%BD%AE%E6%95%99%E7%A8%8B" target="_blank">Shadowsocks 配合 Proxifier 实现客户端代理</a></li>
<li><a href="https://github.com/1564307973/Proxifier-CN" target="_blank">Proxifier-CN 中文本地化包</a></li>
<li><a href="https://code.claude.com/docs/en/settings" target="_blank">Claude Code settings</a></li>
<li><a href="https://developers.openai.com/codex/windows" target="_blank">Codex Windows 官方文档</a></li>
<li><a href="https://git-scm.com/docs/git-config#Documentation/git-config.txt-httplturlgt" target="_blank">Git：<code>http.&lt;url&gt;.*</code> URL 匹配规则</a></li>
<li><a href="https://github.com/cli/cli/issues/5244" target="_blank">GitHub CLI：代理环境变量处理说明</a></li>
<li><a href="https://www.proxifier.com/docs/win-v4/rules.html" target="_blank">Proxifier：Proxification Rules</a></li>
<li><a href="https://www.proxifier.com/docs/win-v4/dns.html" target="_blank">Proxifier：Name Resolution</a></li>
<li><a href="https://www.proxifier.com/docs/win-v4/proxy.html" target="_blank">Proxifier：Proxy Settings</a></li>
</ul><div><div><div></div><div>Note</div></div><div><p>整理时当前网络无法直接打开 Linux.do 两个页面；其中 Proxifier 代理 Codex 的 DNS 设置已根据截图补充。其余可访问资料主要来自 LZHPO、GitHub Wiki、Proxifier-CN、Claude Code 官方设置页和本知识库既有 Codex/TUN 排障记录。</p></div></div></section></section>]]></content>
    </entry>
    <entry>
      <id>https://yyq-firefly.pages.dev/posts/50-tutorials/obsidian/quartz-4-%E5%8D%87%E7%BA%A7-quartz-5-%E5%A4%8D%E7%9B%98/</id>
      <title type="text">Quartz 4 升级 Quartz 5 复盘</title>
      <published>2026-06-03T00:00:00.000Z</published>
      <updated>2026-06-03T00:00:00.000Z</updated>
      <author><name>YYQ</name></author>
      <link rel="alternate" href="https://yyq-firefly.pages.dev/posts/50-tutorials/obsidian/quartz-4-%E5%8D%87%E7%BA%A7-quartz-5-%E5%A4%8D%E7%9B%98/"/>
      <summary type="text"></summary>
      <content type="html"><![CDATA[<section><h1>Quartz 4 升级 Quartz 5 复盘<a href="#quartz-4-升级-quartz-5-复盘"><span>#</span></a></h1><p>本文记录一次将 Obsidian 私人知识库的 Quartz 公开站点从 Quartz 4 升级到 Quartz 5 的过程。真实仓库名、本机路径、站点域名、Secret 名称均已脱敏。</p><p>相关笔记：<a href="/posts/50-Tutorials/Obsidian/Obsidian%20%E7%A7%81%E4%BA%BA%E7%9F%A5%E8%AF%86%E5%BA%93%E8%87%AA%E5%8A%A8%E5%8F%91%E5%B8%83%20Quartz%20%E4%B8%8E%20Cloudflare%20Pages/">Obsidian 私人知识库自动发布 Quartz 与 Cloudflare Pages</a></p><section><h2>一、升级目标<a href="#一升级目标"><span>#</span></a></h2><ul>
<li>私人 Obsidian 知识库：<code>&lt;PRIVATE_VAULT_REPO&gt;</code></li>
<li>Quartz 公开站点仓库：<code>&lt;QUARTZ_REPO&gt;</code></li>
<li>公开内容筛选方式：frontmatter 中的 <code>publish: true</code></li>
<li>部署平台：Cloudflare Pages</li>
<li>原生产分支：<code>v4</code></li>
<li>新生产分支：<code>v5</code></li>
</ul><p>目标是升级到 Quartz 5，同时保留“私人库写作、公开库发布、Cloudflare 自动部署”的链路。</p></section><section><h2>二、Quartz 5 的关键变化<a href="#二quartz-5-的关键变化"><span>#</span></a></h2>

<table><thead><tr><th>项目</th><th>Quartz 4</th><th>Quartz 5</th></tr></thead><tbody><tr><td>配置文件</td><td><code>quartz.config.ts</code>、<code>quartz.layout.ts</code></td><td><code>quartz.config.yaml</code></td></tr><tr><td>功能组织</td><td>内置 TypeScript 插件</td><td>GitHub 插件化</td></tr><tr><td>构建前置</td><td>通常直接 <code>npx quartz build</code></td><td>需要先安装/恢复 <code>.quartz/plugins</code></td></tr><tr><td>显式发布</td><td>TS 配置启用</td><td>YAML 中启用 <code>explicit-publish</code></td></tr></tbody></table><div><div><div></div><div>Important</div></div><div><p>Quartz 5 默认配置中 <code>explicit-publish</code> 不是开启状态。公开知识库必须显式启用。</p></div></div></section><section><h2>三、迁移步骤<a href="#三迁移步骤"><span>#</span></a></h2><section><h3>3.1 建立隔离迁移分支<a href="#31-建立隔离迁移分支"><span>#</span></a></h3><p>不要直接在生产分支迁移。建议从上游 Quartz 5 创建隔离分支：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span><span>git worktree add </span><span>-</span><span>b &lt;MIGRATION_BRANCH&gt; </span></span><span>"&lt;QUARTZ_V5_WORKTREE&gt;"</span><span><span> upstream</span><span>/</span><span>v5</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>迁移完成后，将该分支推送为公开仓库的 <code>v5</code> 分支：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span><span>git </span><span>-</span><span>C </span></span><span>"&lt;QUARTZ_V5_WORKTREE&gt;"</span><span> push origin &lt;MIGRATION_BRANCH&gt;:v5</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>3.2 迁移站点配置<a href="#32-迁移站点配置"><span>#</span></a></h3><p>Quartz 5 使用 <code>quartz.config.yaml</code>。关键配置：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>configuration</span><span>:</span></div></div><div><div><div>2</div></div><div><span>  </span><span>pageTitle</span><span>: </span><span>&lt;SITE_TITLE&gt;</span></div></div><div><div><div>3</div></div><div><span>  </span><span>locale</span><span>: </span><span>zh-CN</span></div></div><div><div><div>4</div></div><div><span>  </span><span>baseUrl</span><span>: </span><span>&lt;PROJECT_NAME&gt;.pages.dev</span></div></div><div><div><div>5</div></div><div>
</div></div><div><div><div>6</div></div><div><span>plugins</span><span>:</span></div></div><div><div><div>7</div></div><div><span><span>  </span></span><span>- </span><span>source</span><span>: </span><span>github:quartz-community/explicit-publish</span></div></div><div><div><div>8</div></div><div><span>    </span><span>enabled</span><span>: </span><span>true</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>为了降低迁移风险，只保留实际启用的插件；暂时不把禁用插件写进 YAML。</p></section><section><h3>3.3 迁移同步脚本<a href="#33-迁移同步脚本"><span>#</span></a></h3><p>同步脚本继续从私人知识库扫描 Markdown，并只复制文件开头 frontmatter 中含有 <code>publish: true</code> 的笔记。</p><p>判断公开标记时必须只解析开头 frontmatter，不要用跨全文正则搜索：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>$frontmatter</span><span><span> </span><span>=</span><span> [</span></span><span>regex</span><span>]::Match(</span></div></div><div><div><div>2</div></div><div><span>    </span><span>$text</span><span>,</span></div></div><div><div><div>3</div></div><div><span>    </span><span>'\A---\s*\r?\n(?&lt;content&gt;.*?)\r?\n---\s*(?:\r?\n|$)'</span><span>,</span></div></div><div><div><div>4</div></div><div><span><span>    </span></span><span>[</span><span>System.Text.RegularExpressions.RegexOptions</span><span>]::Singleline</span></div></div><div><div><div>5</div></div><div><span>)</span></div></div><div><div><div>6</div></div><div>
</div></div><div><div><div>7</div></div><div><span>$frontmatter.Success</span><span><span> </span><span>-and</span></span></div></div><div><div><div>8</div></div><div><span>$frontmatter.Groups</span><span>[</span><span>"content"</span><span><span>].Value </span><span>-match</span><span> </span></span><span>'(?m)^publish:\s*true\s*$'</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>这样正文中的示例代码不会被误判为公开标记。</p></section><section><h3>3.4 Cloudflare Pages 构建命令<a href="#34-cloudflare-pages-构建命令"><span>#</span></a></h3><p>Quartz 5 的 <code>.quartz/plugins</code> 是运行时生成目录，不应提交到 Git。Cloudflare Pages 是干净构建环境，所以构建前必须安装插件。</p><p>最终构建命令：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>node quartz/bootstrap-cli.mjs plugin install --from-config --clean &amp;&amp; node quartz/bootstrap-cli.mjs build</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>输出目录仍然是：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>public</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section></section><section><h2>四、遇到的问题与处理<a href="#四遇到的问题与处理"><span>#</span></a></h2><section><h3>问题一：正文中的 <code>publish: true</code> 被误判为公开<a href="#问题一正文中的-publish-true-被误判为公开"><span>#</span></a></h3><p>旧脚本使用跨全文正则，正文示例里的 <code>publish: true</code> 也会触发公开。</p><p>处理方式：</p><ul>
<li>先截取文件开头的 frontmatter</li>
<li>只在 frontmatter 内判断 <code>publish: true</code></li>
<li>做回归验证：正文示例不触发公开，frontmatter 标记才触发公开</li>
</ul></section><section><h3>问题二：<code>npx quartz plugin install</code> 在 Windows / Node 24 下卡住<a href="#问题二npx-quartz-plugin-install-在-windows--node-24-下卡住"><span>#</span></a></h3><p>现象：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>npx quartz plugin install</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>在本机环境中无输出卡住，进程残留。</p><p>处理方式：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span><span>node .\quartz\bootstrap</span><span>-</span><span>cli.mjs plugin install </span><span>--</span><span>from</span><span>-</span><span>config </span><span>--</span><span>clean</span></span></div></div><div><div><div>2</div></div><div><span><span>node .\quartz\bootstrap</span><span>-</span><span>cli.mjs build</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>直接调用仓库内 Quartz CLI 可以正常完成。</p></section><section><h3>问题三：<code>npm run install-plugins</code> 触发 <code>.scss</code> ESM 解析错误<a href="#问题三npm-run-install-plugins-触发-scss-esm-解析错误"><span>#</span></a></h3><p>现象：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".scss"</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>处理方式：</p><ul>
<li>不使用 <code>npm run install-plugins</code> 作为构建前置</li>
<li>改用 <code>node quartz/bootstrap-cli.mjs plugin install --from-config --clean</code></li>
<li>再执行 <code>node quartz/bootstrap-cli.mjs build</code></li>
</ul></section><section><h3>问题四：<code>quartz.lock.json</code> 残留未启用插件<a href="#问题四quartzlockjson-残留未启用插件"><span>#</span></a></h3><p>按 lockfile 恢复时，未启用的主题插件也可能被安装。</p><p>处理方式：</p><ul>
<li>使用 <code>--from-config --clean</code></li>
<li>从 <code>quartz.config.yaml</code> 移除当前不用的 <code>enabled: false</code> 插件块</li>
<li>让 lockfile 只保留当前配置实际需要的插件</li>
</ul></section><section><h3>问题五：Cloudflare 构建环境没有 <code>.quartz/plugins</code><a href="#问题五cloudflare-构建环境没有-quartzplugins"><span>#</span></a></h3><p>本地构建可能依赖已有缓存，而 Cloudflare 新环境没有。</p><p>处理方式是在 Cloudflare 构建命令中显式安装插件：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>node quartz/bootstrap-cli.mjs plugin install --from-config --clean &amp;&amp; node quartz/bootstrap-cli.mjs build</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>并用全新临时副本验证：不带 <code>.quartz</code>、<code>node_modules</code>、<code>public</code>，从 <code>npm install</code> 开始完整构建。</p></section><section><h3>问题六：生产分支切换顺序<a href="#问题六生产分支切换顺序"><span>#</span></a></h3><p>不能先改私人库 workflow，否则自动同步会推送到尚未准备好的分支。</p><p>推荐顺序：</p><ol>
<li>推送旧生产分支上的安全修复。</li>
<li>推送新 <code>v5</code> 分支。</li>
<li>Cloudflare Pages 生产分支切到 <code>v5</code>。</li>
<li>私人库 workflow 从 <code>v4</code> 改为 <code>v5</code>。</li>
</ol></section></section><section><h2>五、最终验证<a href="#五最终验证"><span>#</span></a></h2><p>干净环境验证流程：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span><span>npm install </span><span>--</span><span>registry</span><span>=</span><span>https:</span><span>//</span><span>registry.npmjs.org</span></span></div></div><div><div><div>2</div></div><div><span><span>node .\quartz\bootstrap</span><span>-</span><span>cli.mjs plugin install </span><span>--</span><span>from</span><span>-</span><span>config </span><span>--</span><span>clean</span></span></div></div><div><div><div>3</div></div><div><span><span>node .\quartz\bootstrap</span><span>-</span><span>cli.mjs build</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>验证结果：</p><ul>
<li>成功安装 33 个 Quartz 5 插件</li>
<li>公开内容：9 篇笔记</li>
<li>Quartz 输入文件：10 个，包括自动生成首页</li>
<li>输出静态文件：132 个</li>
<li>输出目录：<code>public</code></li>
</ul></section><section><h2>六、自动发布链路切换<a href="#六自动发布链路切换"><span>#</span></a></h2><p>私人库 GitHub Actions 原逻辑：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>ref</span><span>: </span><span>v4</span></div></div><div><div><div>2</div></div><div><span>git push origin v4</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>迁移后改为：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>ref</span><span>: </span><span>v5</span></div></div><div><div><div>2</div></div><div><span>git push origin v5</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>这样私人库推送后会自动同步公开内容到 Quartz 5 分支，并触发 Cloudflare Pages 构建。</p></section><section><h2>七、主题美化调研<a href="#七主题美化调研"><span>#</span></a></h2><p>Quartz 5 的主题主要有两条路线。</p><section><h3>路线一：稳定配置化美化<a href="#路线一稳定配置化美化"><span>#</span></a></h3><p>通过 <code>quartz.config.yaml</code> 修改：</p><ul>
<li><code>theme.colors</code></li>
<li><code>theme.typography</code></li>
</ul><p>再通过 <code>quartz/styles/custom.scss</code> 做少量样式增强。</p><p>推荐方案：</p>

<table><thead><tr><th>方案</th><th>特点</th><th>适用场景</th></tr></thead><tbody><tr><td>清爽技术文档风</td><td>高可读、低装饰</td><td>技术笔记、工具手册</td></tr><tr><td>Obsidian 深色风</td><td>更接近 Obsidian</td><td>想保持本地写作体验</td></tr><tr><td>温暖数字花园风</td><td>暖白背景、博客感</td><td>随笔和知识沉淀</td></tr><tr><td>卡片化现代风</td><td>圆角、间距、层次更明显</td><td>想让站点更精致</td></tr></tbody></table><p>个人建议：先采用“清爽技术文档风 + 少量卡片化圆角”。</p></section><section><h3>路线二：社区主题插件<a href="#路线二社区主题插件"><span>#</span></a></h3><p>Quartz 5 可以通过社区主题插件尝试 Obsidian 风格主题，例如：</p><ul>
<li><code>tokyo-night</code></li>
<li><code>catppuccin</code></li>
<li><code>nord</code></li>
<li><code>rose-pine</code></li>
<li><code>dracula-official</code></li>
<li><code>aura</code></li>
</ul><p>示例：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>plugins</span><span>:</span></div></div><div><div><div>2</div></div><div><span><span>  </span></span><span>- </span><span>source</span><span>:</span></div></div><div><div><div>3</div></div><div><span>      </span><span>name</span><span>: </span><span>quartz-themes</span></div></div><div><div><div>4</div></div><div><span>      </span><span>repo</span><span>: </span><span>"https://github.com/saberzero1/quartz-themes.git"</span></div></div><div><div><div>5</div></div><div><span>      </span><span>subdir</span><span>: </span><span>plugin</span></div></div><div><div><div>6</div></div><div><span>    </span><span>enabled</span><span>: </span><span>true</span></div></div><div><div><div>7</div></div><div><span>    </span><span>options</span><span>:</span></div></div><div><div><div>8</div></div><div><span>      </span><span>theme</span><span>: </span><span>tokyo-night</span></div></div><div><div><div>9</div></div><div><span>      </span><span>mode</span><span>: </span><span>both</span></div></div><div><div><div>10</div></div><div><span>      </span><span>calloutStyle</span><span>: </span><span>glass</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>这条路线可玩性更高，但引入额外插件和适配成本。建议等基础 v5 站点稳定后再尝试。</p></section></section><section><h2>八、经验总结<a href="#八经验总结"><span>#</span></a></h2><ol>
<li>迁移 Quartz 大版本时，先用隔离 worktree，不要直接动生产分支。</li>
<li>公开内容筛选必须只看 frontmatter，不要全文搜索 <code>publish: true</code>。</li>
<li>Quartz 5 的插件目录是构建产物，不应依赖本地缓存。</li>
<li>Cloudflare Pages 要使用可在干净环境复现的构建命令。</li>
<li>新生产分支、Cloudflare 分支、私人库 workflow 三者要按顺序切换。</li>
<li>主题美化先求稳，再逐步尝试社区主题。</li>
</ol></section><section><h2>九、参考<a href="#九参考"><span>#</span></a></h2><ul>
<li><a href="https://quartz.jzhao.xyz/" target="_blank">Quartz 官方文档</a></li>
<li><a href="https://www.reddit.com/r/ObsidianMD/comments/1tnh02x/quartz_v5_rebuilt_from_the_ground_up/" target="_blank">Quartz v5 讨论</a></li>
<li><a href="https://deepwiki.com/quartz-community/v5/2.3-theme-and-styling" target="_blank">Quartz v5 Theme and Styling</a></li>
<li><a href="https://saberzero1.github.io/quartz-syncer-docs/Guides/Using-an-Obsidian-theme-in-Quartz" target="_blank">Quartz Themes 插件说明</a></li>
<li><a href="https://github.com/saberzero1/quartz-themes" target="_blank">Quartz Themes 仓库</a></li>
</ul></section></section>]]></content>
    </entry>
    <entry>
      <id>https://yyq-firefly.pages.dev/posts/50-tutorials/obsidian/obsidian-%E7%A7%81%E4%BA%BA%E7%9F%A5%E8%AF%86%E5%BA%93%E8%87%AA%E5%8A%A8%E5%8F%91%E5%B8%83-quartz-%E4%B8%8E-cloudflare-pages/</id>
      <title type="text">Obsidian 私人知识库自动发布 Quartz 与 Cloudflare Pages</title>
      <published>2026-06-02T00:00:00.000Z</published>
      <updated>2026-06-02T00:00:00.000Z</updated>
      <author><name>YYQ</name></author>
      <link rel="alternate" href="https://yyq-firefly.pages.dev/posts/50-tutorials/obsidian/obsidian-%E7%A7%81%E4%BA%BA%E7%9F%A5%E8%AF%86%E5%BA%93%E8%87%AA%E5%8A%A8%E5%8F%91%E5%B8%83-quartz-%E4%B8%8E-cloudflare-pages/"/>
      <summary type="text"></summary>
      <content type="html"><![CDATA[<section><h1>Obsidian 私人知识库自动发布 Quartz 与 Cloudflare Pages<a href="#obsidian-私人知识库自动发布-quartz-与-cloudflare-pages"><span>#</span></a></h1><p>这套方案将私人 Obsidian 知识库作为唯一写作入口，只公开明确标记的笔记。公开内容会自动同步到 Quartz 仓库，再由 Cloudflare Pages 构建为静态网站。</p><div><div><div></div><div>核心原则</div></div><div><p>私人知识库与公开网站必须使用两个独立仓库。只有 frontmatter 中显式声明 <code>publish: true</code> 的 Markdown 笔记可以进入公开仓库。</p></div></div><section><h2>一、当前架构<a href="#一当前架构"><span>#</span></a></h2>

<table><thead><tr><th>项目</th><th>当前配置</th></tr></thead><tbody><tr><td>私人知识库本地目录</td><td><code>&lt;PRIVATE_VAULT_DIR&gt;</code></td></tr><tr><td>私人 GitHub 仓库</td><td><code>&lt;GITHUB_USER&gt;/&lt;PRIVATE_VAULT_REPO&gt;</code></td></tr><tr><td>私人仓库分支</td><td><code>main</code></td></tr><tr><td>Quartz 本地目录</td><td><code>&lt;QUARTZ_SITE_DIR&gt;</code></td></tr><tr><td>Quartz GitHub 仓库</td><td><code>&lt;GITHUB_USER&gt;/&lt;QUARTZ_REPO&gt;</code></td></tr><tr><td>Quartz 生产分支</td><td><code>v5</code></td></tr><tr><td>Cloudflare Pages 域名</td><td><code>https://&lt;PROJECT_NAME&gt;.pages.dev</code></td></tr><tr><td>Quartz 版本</td><td><code>5.0.0</code></td></tr><tr><td>Node.js 版本</td><td><code>&gt;=22</code></td></tr></tbody></table><div><div><div><div><span><p>Obsidian Git 自动提交与推送</p></span></div><div><span><p>GitHub Actions</p></span></div><div><span><p>同步 content/ 并推送</p></span></div><div><span><p>Cloudflare Pages Git 集成</p></span></div><div><span></span></div><div><span><p>Obsidian 私人知识库</p></span></div><div><span><p>私人仓库 / main</p></span></div><div><span><p>筛选 publish: true</p></span></div><div><span><p>Quartz 公开仓库 / v5</p></span></div><div><span><p>安装插件并构建</p></span></div><div><span><p>.pages.dev</p></span></div>
</div><div><div><span><p>Obsidian Git 自动提交与推送</p></span></div><div><span><p>GitHub Actions</p></span></div><div><span><p>同步 content/ 并推送</p></span></div><div><span><p>Cloudflare Pages Git 集成</p></span></div><div><span></span></div><div><span><p>Obsidian 私人知识库</p></span></div><div><span><p>私人仓库 / main</p></span></div><div><span><p>筛选 publish: true</p></span></div><div><span><p>Quartz 公开仓库 / v5</p></span></div><div><span><p>安装插件并构建</p></span></div><div><span><p>.pages.dev</p></span></div>
</div></div></div></section><section><h2>二、日常发布<a href="#二日常发布"><span>#</span></a></h2><section><h3>2.1 发布一篇笔记<a href="#21-发布一篇笔记"><span>#</span></a></h3><p>在需要公开的笔记顶部加入：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>---</span></div></div><div><div><div>2</div></div><div><span>title</span><span>: </span><span>示例笔记</span></div></div><div><div><div>3</div></div><div><span>publish</span><span>: </span><span>true</span></div></div><div><div><div>4</div></div><div><span>---</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>保存后不需要手动复制文件。当前 Obsidian Git 插件会自动提交并推送私人知识库，后续流水线会继续完成公开同步和网站部署。</p></section><section><h3>2.2 保持笔记私密<a href="#22-保持笔记私密"><span>#</span></a></h3><p>以下情况不会被公开：</p><ul>
<li>没有 frontmatter 的笔记</li>
<li>frontmatter 中没有 <code>publish: true</code> 的笔记</li>
<li><code>publish: false</code> 的笔记</li>
<li>隐藏目录中的笔记，例如 <code>.obsidian</code></li>
<li>临时规划文件：<code>task_plan.md</code>、<code>findings.md</code>、<code>progress.md</code></li>
</ul><div><div><div></div><div>发布前检查</div></div><div><p>不要在公开笔记中写入密码、Token、内网域名、私人附件路径或其他敏感信息。<code>publish: true</code> 是公开开关，不是草稿标记。</p></div></div></section></section><section><h2>三、本地自动推送私人库<a href="#三本地自动推送私人库"><span>#</span></a></h2><p>私人知识库使用 Obsidian Git 插件自动备份。当前关键设置位于：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>&lt;PRIVATE_VAULT_DIR&gt;\.obsidian\plugins\obsidian-git\data.json</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>当前行为：</p>

<table><thead><tr><th>设置</th><th>值</th><th>作用</th></tr></thead><tbody><tr><td><code>autoBackupAfterFileChange</code></td><td><code>true</code></td><td>笔记发生变化后自动备份</td></tr><tr><td><code>autoSaveInterval</code></td><td><code>5</code></td><td>约每 5 分钟自动提交</td></tr><tr><td><code>autoPushInterval</code></td><td><code>5</code></td><td>约每 5 分钟自动推送</td></tr><tr><td><code>autoPullInterval</code></td><td><code>10</code></td><td>约每 10 分钟自动拉取</td></tr><tr><td><code>autoPullOnBoot</code></td><td><code>true</code></td><td>打开 Obsidian 时先拉取</td></tr><tr><td><code>pullBeforePush</code></td><td><code>true</code></td><td>推送前先拉取，减少冲突</td></tr><tr><td><code>commitMessage</code></td><td><code>vault backup: {{date}}</code></td><td>自动提交信息</td></tr></tbody></table><p>需要立即发布时，也可以在私人知识库目录手动执行：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>git add .</span></div></div><div><div><div>2</div></div><div><span><span>git commit </span><span>-</span><span>m </span></span><span>"docs: publish note"</span></div></div><div><div><div>3</div></div><div><span>git push origin main</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h2>四、GitHub Actions 自动同步<a href="#四github-actions-自动同步"><span>#</span></a></h2><p>私人仓库中的工作流文件：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>.github/workflows/publish-quartz.yml</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>触发条件：</p><ul>
<li>向 <code>&lt;PRIVATE_VAULT_REPO&gt;/main</code> 推送提交</li>
<li>在 GitHub Actions 页面手动运行 <code>workflow_dispatch</code></li>
</ul><p>工作流会执行以下步骤：</p><ol>
<li>检出私人知识库到 <code>vault/</code></li>
<li>检出 <code>&lt;GITHUB_USER&gt;/&lt;QUARTZ_REPO&gt;</code> 的 <code>v5</code> 分支到 <code>site/</code></li>
<li>运行 <code>site/scripts/sync-public-content.ps1 -VaultPath .\vault</code></li>
<li>仅提交公开仓库中的 <code>content/</code></li>
<li>如果公开内容没有变化，则正常退出，不创建空提交</li>
<li>如果有变化，则推送到 <code>&lt;QUARTZ_REPO&gt;/v5</code></li>
</ol><section><h3>4.1 配置 GitHub Token<a href="#41-配置-github-token"><span>#</span></a></h3><p>私人仓库工作流需要向公开仓库写入内容，因此私人仓库中必须存在 Actions Secret：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>&lt;QUARTZ_PUBLISH_SECRET&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>推荐创建 GitHub Fine-grained personal access token：</p><ol>
<li>在 GitHub 个人设置中进入 <code>Developer settings</code> → <code>Personal access tokens</code> → <code>Fine-grained tokens</code></li>
<li>将仓库访问范围限制为 <code>&lt;GITHUB_USER&gt;/&lt;QUARTZ_REPO&gt;</code></li>
<li>为 <code>Contents</code> 授予 <code>Read and write</code></li>
<li>将 Token 保存到私人仓库 <code>&lt;GITHUB_USER&gt;/&lt;PRIVATE_VAULT_REPO&gt;</code></li>
<li>进入 <code>Settings</code> → <code>Secrets and variables</code> → <code>Actions</code></li>
<li>新建 Repository secret，例如命名为 <code>&lt;QUARTZ_PUBLISH_SECRET&gt;</code></li>
</ol><div><div><div></div><div>不要提交 Token</div></div><div><p>Token 只能保存在 GitHub Actions Secret 中。不要将真实值写入 Markdown、脚本、Git 提交或聊天记录。</p></div></div></section></section><section><h2>五、公开内容同步脚本<a href="#五公开内容同步脚本"><span>#</span></a></h2><p>同步脚本位于公开仓库：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>scripts/sync-public-content.ps1</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>脚本的主要逻辑：</p><ol>
<li>定位 Quartz 仓库中的 <code>content/</code></li>
<li>校验目标目录必须位于 Quartz 仓库内部</li>
<li>清空旧的 <code>content/</code></li>
<li>递归扫描私人知识库中的 Markdown 文件</li>
<li>仅解析文件开头的 frontmatter，并复制其中包含 <code>publish: true</code> 的文件</li>
<li>保持原始目录结构</li>
<li>自动生成公开首页 <code>content/index.md</code></li>
</ol><div><div><div></div><div>不要直接维护 <code>content/</code></div></div><div><p><code>content/</code> 是同步脚本生成的目录。每次同步都会清空并重建。需要修改公开内容时，应修改私人知识库中的源笔记。</p></div></div><section><h3>5.1 本地同步<a href="#51-本地同步"><span>#</span></a></h3><p>在 Quartz 仓库中执行：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>cd &lt;QUARTZ_SITE_DIR&gt;</span></div></div><div><div><div>2</div></div><div><span>.</span><span>\scripts\sync-public</span><span><span>-</span><span>content.ps1</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>脚本默认从相邻目录 <code>..\obsidian-yyq</code> 读取私人知识库。需要指定其他目录时：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>.</span><span>\scripts\sync-public</span><span><span>-</span><span>content.ps1 </span><span>-</span><span>VaultPath </span></span><span>"D:\notes\my-vault"</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section></section><section><h2>六、Quartz 配置<a href="#六quartz-配置"><span>#</span></a></h2><p>公开仓库中的核心配置文件：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>quartz.config.yaml</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>当前关键配置：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>configuration</span><span>:</span></div></div><div><div><div>2</div></div><div><span>  </span><span>pageTitle</span><span>: </span><span>"&lt;SITE_TITLE&gt;"</span></div></div><div><div><div>3</div></div><div><span>  </span><span>locale</span><span>: </span><span>"zh-CN"</span></div></div><div><div><div>4</div></div><div><span>  </span><span>baseUrl</span><span>: </span><span>"&lt;PROJECT_NAME&gt;.pages.dev"</span></div></div><div><div><div>5</div></div><div><span>  </span><span>ignorePatterns</span><span>:</span></div></div><div><div><div>6</div></div><div><span><span>    </span></span><span>- </span><span>private</span></div></div><div><div><div>7</div></div><div><span><span>    </span></span><span>- </span><span>templates</span></div></div><div><div><div>8</div></div><div><span><span>    </span></span><span>- </span><span>.obsidian</span></div></div><div><div><div>9</div></div><div><span>plugins</span><span>:</span></div></div><div><div><div>10</div></div><div><span><span>  </span></span><span>- </span><span>source</span><span>: </span><span>github:quartz-community/explicit-publish</span></div></div><div><div><div>11</div></div><div><span>    </span><span>enabled</span><span>: </span><span>true</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>同步脚本与 <code>explicit-publish</code> 插件形成两层保护：</p><ol>
<li>同步脚本只解析文件开头的 frontmatter，并复制带有 <code>publish: true</code> 的 Markdown</li>
<li>Quartz 构建时再次过滤未显式发布的页面</li>
</ol><section><h3>6.1 本地预览<a href="#61-本地预览"><span>#</span></a></h3><p>首次运行前安装依赖：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>cd &lt;QUARTZ_SITE_DIR&gt;</span></div></div><div><div><div>2</div></div><div><span>npm install</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>同步内容并启动本地预览：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>.</span><span>\scripts\sync-public</span><span><span>-</span><span>content.ps1</span></span></div></div><div><div><div>2</div></div><div><span><span>node .\quartz\bootstrap</span><span>-</span><span>cli.mjs plugin install </span><span>--</span><span>from</span><span>-</span><span>config </span><span>--</span><span>clean</span></span></div></div><div><div><div>3</div></div><div><span><span>node .\quartz\bootstrap</span><span>-</span><span>cli.mjs build </span><span>--</span><span>serve</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>浏览器打开：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>http://localhost:8080/</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section></section><section><h2>七、Cloudflare Pages 自动部署<a href="#七cloudflare-pages-自动部署"><span>#</span></a></h2><p>Cloudflare Pages 使用 Git 集成监听公开仓库。每次 <code>&lt;QUARTZ_REPO&gt;/v5</code> 收到新提交后，Cloudflare Pages 都会重新构建并发布网站。</p><section><h3>7.1 Cloudflare Pages 配置<a href="#71-cloudflare-pages-配置"><span>#</span></a></h3><p>在 Cloudflare Dashboard 中进入 <code>Workers &amp; Pages</code>，创建 Pages 项目并导入已有 GitHub 仓库：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>&lt;GITHUB_USER&gt;/&lt;QUARTZ_REPO&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>构建配置：</p>

<table><thead><tr><th>配置项</th><th>值</th></tr></thead><tbody><tr><td>Production branch</td><td><code>v5</code></td></tr><tr><td>Framework preset</td><td><code>None</code></td></tr><tr><td>Build command</td><td><code>node quartz/bootstrap-cli.mjs plugin install --from-config --clean &amp;&amp; node quartz/bootstrap-cli.mjs build</code></td></tr><tr><td>Build output directory</td><td><code>public</code></td></tr><tr><td>Root directory</td><td>留空，使用仓库根目录</td></tr></tbody></table><p>部署成功后，Cloudflare Pages 会提供：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>https://&lt;PROJECT_NAME&gt;.pages.dev</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>如果后续绑定自定义域名，需要同步修改 <code>quartz.config.yaml</code> 中的 <code>baseUrl</code>。</p></section><section><h3>7.2 为什么不需要 Cloudflare Token<a href="#72-为什么不需要-cloudflare-token"><span>#</span></a></h3><p>当前使用 Cloudflare Pages 的 Git 集成。Cloudflare 直接监听公开 GitHub 仓库并自动部署，因此 GitHub Actions 不需要保存 Cloudflare API Token。</p></section></section><section><h2>八、完整发布链路<a href="#八完整发布链路"><span>#</span></a></h2><p>一次正常发布会出现两次 Git 推送：</p><ol>
<li>Obsidian Git 将私人笔记推送到 <code>&lt;PRIVATE_VAULT_REPO&gt;/main</code></li>
<li>私人仓库的 GitHub Actions 将筛选后的内容推送到 <code>&lt;QUARTZ_REPO&gt;/v5</code></li>
<li>Cloudflare Pages 检测到公开库变化，安装 Quartz 5 插件并运行构建</li>
<li>Cloudflare Pages 将 <code>public/</code> 目录发布到网站</li>
</ol><p>查看进度的位置：</p>

<table><thead><tr><th>阶段</th><th>检查位置</th></tr></thead><tbody><tr><td>私人库是否推送成功</td><td><code>&lt;GITHUB_USER&gt;/&lt;PRIVATE_VAULT_REPO&gt;</code> 提交记录</td></tr><tr><td>自动筛选是否成功</td><td>私人库 GitHub Actions：<code>Publish Quartz notes</code></td></tr><tr><td>公开内容是否更新</td><td><code>&lt;GITHUB_USER&gt;/&lt;QUARTZ_REPO&gt;</code> 的 <code>v5</code> 分支</td></tr><tr><td>网站是否部署成功</td><td>Cloudflare Pages 项目的 Deployments 页面</td></tr></tbody></table></section><section><h2>九、附件处理<a href="#九附件处理"><span>#</span></a></h2><p>当前同步脚本只复制 Markdown，不复制本地图片、PDF 或其他附件。</p><p>现有公开笔记中的图片使用远程 URL，因此可以正常显示。后续如果需要公开 Obsidian 本地附件，应增加附件白名单，只复制被公开笔记引用的资源，避免把私人附件整体上传。</p></section><section><h2>十、常见问题<a href="#十常见问题"><span>#</span></a></h2><section><h3>10.1 保存笔记后网站没有更新<a href="#101-保存笔记后网站没有更新"><span>#</span></a></h3><p>按顺序检查：</p><ol>
<li>笔记 frontmatter 是否包含 <code>publish: true</code></li>
<li>Obsidian Git 是否已经推送到 <code>&lt;PRIVATE_VAULT_REPO&gt;/main</code></li>
<li>私人仓库的 <code>Publish Quartz notes</code> 工作流是否成功</li>
<li><code>&lt;QUARTZ_REPO&gt;/v5</code> 是否出现新的 <code>content: sync published notes</code> 提交</li>
<li>Cloudflare Pages 的最新 Deployment 是否成功</li>
</ol></section><section><h3>10.2 GitHub Actions 无法推送公开库<a href="#102-github-actions-无法推送公开库"><span>#</span></a></h3><p>重点检查：</p><ul>
<li>私人仓库是否存在 <code>&lt;QUARTZ_PUBLISH_SECRET&gt;</code></li>
<li>Token 是否过期</li>
<li>Token 是否仅授权给 <code>&lt;GITHUB_USER&gt;/&lt;QUARTZ_REPO&gt;</code></li>
<li>Token 的 <code>Contents</code> 权限是否为 <code>Read and write</code></li>
<li>工作流检出的公开分支是否仍为 <code>v5</code></li>
</ul></section><section><h3>10.3 Cloudflare Pages 构建失败<a href="#103-cloudflare-pages-构建失败"><span>#</span></a></h3><p>本地先复现：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>cd &lt;QUARTZ_SITE_DIR&gt;</span></div></div><div><div><div>2</div></div><div><span>npm install</span></div></div><div><div><div>3</div></div><div><span>.</span><span>\scripts\sync-public</span><span><span>-</span><span>content.ps1</span></span></div></div><div><div><div>4</div></div><div><span><span>node .\quartz\bootstrap</span><span>-</span><span>cli.mjs plugin install </span><span>--</span><span>from</span><span>-</span><span>config </span><span>--</span><span>clean</span></span></div></div><div><div><div>5</div></div><div><span><span>node .\quartz\bootstrap</span><span>-</span><span>cli.mjs build</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>如果本地构建成功，再检查 Cloudflare Pages：</p><ul>
<li>Production branch 是否为 <code>v5</code></li>
<li>Build command 是否为 <code>node quartz/bootstrap-cli.mjs plugin install --from-config --clean &amp;&amp; node quartz/bootstrap-cli.mjs build</code></li>
<li>Build output directory 是否为 <code>public</code></li>
<li>Node.js 版本是否满足 Quartz 要求</li>
</ul></section><section><h3>10.4 公开页面出现不应发布的内容<a href="#104-公开页面出现不应发布的内容"><span>#</span></a></h3><p>立即处理：</p><ol>
<li>在私人源笔记中删除 <code>publish: true</code> 或改为 <code>publish: false</code></li>
<li>推送私人库，等待自动同步删除公开副本</li>
<li>检查 GitHub 公开仓库的历史提交中是否仍包含敏感信息</li>
<li>如果敏感信息已经进入 Git 历史，轮换相关密码或 Token，并清理 Git 历史</li>
</ol></section></section><section><h2>十一、关键文件清单<a href="#十一关键文件清单"><span>#</span></a></h2>

<table><thead><tr><th>文件</th><th>用途</th></tr></thead><tbody><tr><td><code>&lt;PRIVATE_VAULT_DIR&gt;\.obsidian\plugins\obsidian-git\data.json</code></td><td>Obsidian Git 自动备份设置</td></tr><tr><td><code>&lt;PRIVATE_VAULT_DIR&gt;\.github\workflows\publish-quartz.yml</code></td><td>私人库推送后自动发布</td></tr><tr><td><code>&lt;QUARTZ_SITE_DIR&gt;\scripts\sync-public-content.ps1</code></td><td>筛选并复制公开笔记</td></tr><tr><td><code>&lt;QUARTZ_SITE_DIR&gt;\quartz.config.yaml</code></td><td>Quartz 网站配置与二次过滤</td></tr><tr><td><code>&lt;QUARTZ_SITE_DIR&gt;\content\</code></td><td>自动生成的公开笔记目录</td></tr></tbody></table></section><section><h2>十二、参考文档<a href="#十二参考文档"><span>#</span></a></h2><ul>
<li><a href="https://quartz.jzhao.xyz/" target="_blank">Quartz 官方文档</a></li>
<li><a href="https://developers.cloudflare.com/pages/configuration/git-integration/" target="_blank">Cloudflare Pages Git integration</a></li>
<li><a href="https://developers.cloudflare.com/pages/configuration/git-integration/github-integration/" target="_blank">Cloudflare Pages GitHub integration</a></li>
<li><a href="https://developers.cloudflare.com/pages/configuration/build-configuration/" target="_blank">Cloudflare Pages build configuration</a></li>
</ul></section></section>]]></content>
    </entry>
    <entry>
      <id>https://yyq-firefly.pages.dev/posts/50-tutorials/windows/codex-windows-%E5%BE%AE%E8%BD%AF%E5%95%86%E5%BA%97%E5%AE%89%E8%A3%85%E5%8C%85%E6%8F%90%E5%8F%96%E4%B8%8E%E6%89%8B%E5%8A%A8%E6%9B%B4%E6%96%B0/</id>
      <title type="text">Codex Windows 微软商店安装包提取与手动更新</title>
      <published>2026-06-02T00:00:00.000Z</published>
      <updated>2026-06-02T00:00:00.000Z</updated>
      <author><name>YYQ</name></author>
      <link rel="alternate" href="https://yyq-firefly.pages.dev/posts/50-tutorials/windows/codex-windows-%E5%BE%AE%E8%BD%AF%E5%95%86%E5%BA%97%E5%AE%89%E8%A3%85%E5%8C%85%E6%8F%90%E5%8F%96%E4%B8%8E%E6%89%8B%E5%8A%A8%E6%9B%B4%E6%96%B0/"/>
      <summary type="text"></summary>
      <content type="html"><![CDATA[<section><h1>Codex Windows 微软商店安装包提取与手动更新<a href="#codex-windows-微软商店安装包提取与手动更新"><span>#</span></a></h1><section><h2>适用场景<a href="#适用场景"><span>#</span></a></h2><p>部分旧版 Windows 或受限办公环境无法直接通过 Microsoft Store 安装 Codex Desktop。此时可以从 Microsoft Store 产品页提取微软 CDN 中的安装包，并手动安装或解压运行。</p><p>Codex 的 Microsoft Store 产品 ID：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>9PLM9XGG6VKS</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>官方商店页面：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>https://apps.microsoft.com/detail/9PLM9XGG6VKS</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h2>提取 Microsoft Store 安装包<a href="#提取-microsoft-store-安装包"><span>#</span></a></h2><p>使用第三方 Microsoft Store 链接生成器：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>https://store.rg-adguard.net/</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>操作步骤：</p><ol>
<li>打开链接生成器。</li>
<li>左侧下拉框选择 <code>ProductId</code>。</li>
<li>输入 <code>9PLM9XGG6VKS</code>。</li>
<li>右侧渠道选择 <code>Retail</code>。</li>
<li>点击勾号生成下载链接。</li>
<li>在结果中选择最新的 <code>x64</code> Codex 安装包。</li>
</ol><p>文件名通常类似：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>OpenAI.Codex_&lt;版本号&gt;_x64__2p2nqsd0c76g0.msix</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>注意：</p><ul>
<li><code>store.rg-adguard.net</code> 是第三方链接生成器，不是微软官方网站。</li>
<li>实际安装包下载链接应指向微软 CDN。</li>
<li>不要从来源不明的网站下载别人重新打包的 <code>.exe</code>。</li>
<li>下载后可以在文件属性中检查数字签名。</li>
</ul></section><section><h2>两种更新方式<a href="#两种更新方式"><span>#</span></a></h2><section><h3>方式一：正式安装 MSIX<a href="#方式一正式安装-msix"><span>#</span></a></h3><p>优先尝试使用 PowerShell 安装或覆盖升级：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>Add-AppxPackage</span><span><span> </span><span>-</span><span>Path </span></span><span>"C:\下载目录\OpenAI.Codex_x64.msix"</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>这种方式更接近 Microsoft Store 正常安装流程，系统能够管理应用包。应用数据通常会保留。</p></section><section><h3>方式二：解压后运行<a href="#方式二解压后运行"><span>#</span></a></h3><p>如果系统版本较低，无法安装 MSIX，可以将安装包解压后直接运行。</p><p>推荐更新流程：</p><ol>
<li>
<p>完全退出 Codex。</p>
</li>
<li>
<p>在任务管理器中确认没有残留的 <code>Codex.exe</code> 和 <code>codex.exe</code>。</p>
</li>
<li>
<p>将新版安装包解压到新目录，例如：</p>
<div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>D:\软件\codex-&lt;新版本号&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div>
</li>
<li>
<p>运行新目录中的 <code>Codex.exe</code>。</p>
</li>
<li>
<p>确认登录状态、插件、配置和历史记录正常。</p>
</li>
<li>
<p>更新快捷方式。</p>
</li>
<li>
<p>旧目录暂时保留，确认稳定后再手动删除。</p>
</li>
</ol><p>不要直接将新版文件逐个覆盖到旧目录。旧版残留文件可能与新版不兼容，也不利于回滚。</p><p>如果希望保持原路径不变，可以采用目录替换：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>D:\软件\codex      -&gt; D:\软件\codex-old</span></div></div><div><div><div>2</div></div><div><span>D:\软件\codex-new  -&gt; D:\软件\codex</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section></section><section><h2>用户数据备份<a href="#用户数据备份"><span>#</span></a></h2><p>Codex 的用户数据通常位于用户目录，而不是程序目录：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>C:\Users\&lt;用户名&gt;\.codex</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>更新前建议备份：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>Copy-Item</span><span> </span><span><span>"</span><span>$</span></span><span>env:USERPROFILE</span><span>\.codex"</span><span> </span><span><span>"</span><span>$</span></span><span>env:USERPROFILE</span><span>\.codex-backup-</span><span>$(</span><span>Get-Date</span><span> </span><span>-</span><span>Format yyyyMMdd</span><span>-</span><span>HHmmss</span><span>)</span><span>"</span><span><span> </span><span>-</span><span>Recurse</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>更换程序目录后，登录状态、配置、插件和历史记录通常仍会自动读取。遇到异常时，不要立即删除 <code>.codex</code> 目录，先切回旧版程序目录排查。</p></section><section><h2>查看本地版本<a href="#查看本地版本"><span>#</span></a></h2><p>解压运行时，可以查看 <code>Codex.exe</code> 的产品版本：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>(</span><span>Get-Item</span><span> </span><span>"D:\软件\codex\Codex.exe"</span><span>).VersionInfo |</span></div></div><div><div><div>2</div></div><div><span>  </span><span>Select-Object</span><span> FileVersion, ProductVersion</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>也可以检查当前进程：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>Get-Process</span><span><span> Codex </span><span>-</span><span>ErrorAction SilentlyContinue |</span></span></div></div><div><div><div>2</div></div><div><span>  </span><span>Select-Object</span><span> ProcessName, Path,</span></div></div><div><div><div>3</div></div><div><span>    </span><span>@</span><span>{</span><span>Name</span><span>=</span><span>'FileVersion'</span><span>;</span><span>Expression</span><span><span>=</span><span>{$_</span></span><span>.MainModule.FileVersionInfo.FileVersion</span><span>}},</span></div></div><div><div><div>4</div></div><div><span>    </span><span>@</span><span>{</span><span>Name</span><span>=</span><span>'ProductVersion'</span><span>;</span><span>Expression</span><span><span>=</span><span>{$_</span></span><span>.MainModule.FileVersionInfo.ProductVersion</span><span>}}</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>版本号有两种格式：</p><ul>
<li><code>Codex.exe</code> 产品版本，例如 <code>26.519.81530</code></li>
<li>Microsoft Store AppX 包版本，例如 <code>26.527.3686.0</code></li>
</ul><p>两者格式不同，不应只比较最后一段数字。提取安装包时，以链接生成器列出的最新 <code>x64</code> 包为准。</p></section><section><h2>沙箱注意事项<a href="#沙箱注意事项"><span>#</span></a></h2><p>解压运行不等于完全缺少沙箱组件。Codex 安装目录中通常包含：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>resources\codex-command-runner.exe</span></div></div><div><div><div>2</div></div><div><span>resources\codex-windows-sandbox-setup.exe</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>但是旧版 Windows、初始化异常或解压安装方式可能导致沙箱无法正常启动。例如：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>CreateProcessAsUserW failed: 1312</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>遇到沙箱异常时：</p><ol>
<li>先更新 Codex。</li>
<li>优先尝试 MSIX 正式安装。</li>
<li>如果条件允许，升级到较新的 Windows 10 或 Windows 11。</li>
<li>不要因为开启“自动审查”就默认所有命令一定处于隔离环境中。</li>
<li>日常使用优先选择“默认权限”或“自动审查”，谨慎使用“完全访问权限”。</li>
</ol></section><section><h2>更新检查清单<a href="#更新检查清单"><span>#</span></a></h2><ul>
<li> 从 Microsoft Store 产品 ID <code>9PLM9XGG6VKS</code> 提取最新 <code>x64</code> 包</li>
<li> 确认下载链接来自微软 CDN</li>
<li> 完全退出旧版 Codex</li>
<li> 备份 <code>%USERPROFILE%\.codex</code></li>
<li> 优先尝试 <code>Add-AppxPackage</code></li>
<li> 解压运行时使用新目录，不要直接覆盖旧目录</li>
<li> 验证登录状态、插件、配置和历史记录</li>
<li> 验证沙箱命令是否正常执行</li>
<li> 稳定运行后再删除旧版目录</li>
</ul></section><section><h2>参考链接<a href="#参考链接"><span>#</span></a></h2><ul>
<li><a href="https://apps.microsoft.com/detail/9PLM9XGG6VKS" target="_blank">Codex Microsoft Store 页面</a></li>
<li><a href="https://store.rg-adguard.net/" target="_blank">Microsoft Store 链接生成器</a></li>
<li><a href="https://developers.openai.com/codex/windows" target="_blank">Codex Windows 官方文档</a></li>
</ul></section></section>]]></content>
    </entry>
    <entry>
      <id>https://yyq-firefly.pages.dev/posts/20-knowledge/windows/keepass/keepass%E5%AF%86%E7%A0%81%E7%AE%A1%E7%90%86/</id>
      <title type="text">KeePass 密码管理</title>
      <published>2026-05-26T00:00:00.000Z</published>
      <updated>2026-09-15T00:00:00.000Z</updated>
      <author><name>YYQ</name></author>
      <link rel="alternate" href="https://yyq-firefly.pages.dev/posts/20-knowledge/windows/keepass/keepass%E5%AF%86%E7%A0%81%E7%AE%A1%E7%90%86/"/>
      <summary type="text"></summary>
      <content type="html"><![CDATA[<section><h1>KeePass 密码管理<a href="#keepass-密码管理"><span>#</span></a></h1><p>开源免费的密码管理器，支持 Windows / Android / Chrome，通过插件扩展实现自动填充、两步验证、跨平台同步。</p><p>相关笔记：<a href="/posts/20-Knowledge/Windows/%E7%94%B5%E8%84%91%E5%BF%85%E5%A4%87%E8%BD%AF%E4%BB%B6/">电脑必备软件</a>、<a href="/posts/20-Knowledge/Windows/KeePass/KeePassXC%20%E6%8E%A8%E8%8D%90%E9%85%8D%E7%BD%AE%E4%B8%8E%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/">KeePassXC 推荐配置与使用指南</a></p><p>官方下载：<a href="https://keepass.info/download.html" target="_blank">KeePass 官网</a></p><div><div><div></div><div>本文性质</div></div><div><p>这是一份<strong>个人整理笔记</strong>，按自己的使用顺序重写了 KeePass 与插件配置要点，不是原文转载。主要参考来源见文末「来源与致谢」。原文写于 2018 年，针对 KeePass 2.x 时代，插件版本与下载入口请以官网和仓库现状为准。</p></div></div><section><h2>一、安装与中文配置<a href="#一安装与中文配置"><span>#</span></a></h2><section><h3>1.1 安装中文语言包<a href="#11-安装中文语言包"><span>#</span></a></h3><ol>
<li>安装 KeePass（默认英文）</li>
<li>点击 <code>View</code> → <code>Change Language</code> → <code>Open Folder</code></li>
<li>解压中文语言包 zip，将文件复制到该文件夹</li>
<li>重新点击 <code>View</code> → <code>Change Language</code>，选择 <code>Chinese_Simplified</code>，重启生效</li>
</ol></section><section><h3>1.2 插件安装<a href="#12-插件安装"><span>#</span></a></h3><p>所有插件均为 <code>.plgx</code> 格式，安装方式统一：</p><ol>
<li><code>工具</code> → <code>插件管理器</code> → <code>打开文件夹</code></li>
<li>将 <code>.plgx</code> 文件复制到该文件夹</li>
<li>重启 KeePass</li>
</ol></section><section><h3>1.3 推荐插件清单<a href="#13-推荐插件清单"><span>#</span></a></h3>

<table><thead><tr><th>插件</th><th>功能</th><th>来源</th></tr></thead><tbody><tr><td>KPEnhancedEntryView</td><td>增强记录视图，一键查看/隐藏加密字段</td><td>SourceForge</td></tr><tr><td>KPEntryTemplates</td><td>模板编辑器，快速创建标准化记录</td><td>GitHub</td></tr><tr><td>KeePassHttp</td><td>与浏览器通信的 HTTP 桥接</td><td>GitHub</td></tr><tr><td>KeeTrayTOTP</td><td>桌面端生成 TOTP 两步验证码</td><td>GitHub</td></tr><tr><td>WebAutoType</td><td>根据网页自动填写标题/URL 快速添加记录</td><td>SourceForge</td></tr><tr><td>AutoTypeSearch</td><td>自动输入无匹配时弹出搜索框</td><td>SourceForge</td></tr><tr><td>YetAnotherFaviconDownloader</td><td>批量下载网站图标</td><td>GitHub</td></tr><tr><td>KPSourceForgeUpdateChecker</td><td>检查 SourceForge 来源插件的更新</td><td>SourceForge</td></tr><tr><td>chromeIPass</td><td>Chrome 浏览器端自动填充（crx 安装）</td><td>Chrome Web Store</td></tr></tbody></table></section></section><section><h2>二、数据库安全<a href="#二数据库安全"><span>#</span></a></h2><section><h3>2.1 加密方式<a href="#21-加密方式"><span>#</span></a></h3><p>创建数据库时提供 3 种可组合的加密方式，建议使用 <strong>管理密码 + 密钥文件</strong>：</p><ul>
<li><strong>管理密码</strong>：打开数据库的主密码，不要遗忘</li>
<li><strong>密钥文件</strong>：任意文件（图片、音频、文档等），原理是对文件做 SHA-256 哈希作为密钥。修改文件内容会导致无法解锁，重命名不影响。建议多方备份（其他盘、U盘、网盘）</li>
<li><strong>Windows 用户账户</strong>：绑定当前 Windows 账户</li>
</ul></section><section><h3>2.2 迭代次数<a href="#22-迭代次数"><span>#</span></a></h3><p><code>数据库设置</code> → <code>安全</code> → <code>迭代次数</code>，默认 60000，建议设为 500000（安卓端打开约 5~6 秒）。次数越高，暴力破解难度越大。</p></section><section><h3>2.3 安全桌面<a href="#23-安全桌面"><span>#</span></a></h3><p><code>工具</code> → <code>选项</code> → <code>安全</code> → 勾选 <code>在安全桌面输入管理密码</code>。安全桌面环境下，键盘记录软件几乎无法工作。</p></section><section><h3>2.4 数据库同步<a href="#24-数据库同步"><span>#</span></a></h3><p>建议将数据库文件存储在 OneDrive 文件夹中，利用 OneDrive 的版本历史记录和回收站功能防止误操作。安卓端可使用 FolderSync 进行双向同步。</p></section></section><section><h2>三、自动输入<a href="#三自动输入"><span>#</span></a></h2><section><h3>3.1 基本原理<a href="#31-基本原理"><span>#</span></a></h3><p>KeePass 通过模拟按键实现自动输入。全局热键默认为 <code>Ctrl + Shift + A</code>（可能与 QQ 等软件冲突，可在 <code>工具</code> → <code>选项</code> → <code>集成</code> 中修改）。</p><p><strong>使用方式</strong>：</p><ul>
<li>点击目标输入框 → 按下全局自动输入热键</li>
<li>或在 KeePass 主界面右键记录 → <code>执行自动输入</code></li>
</ul><blockquote><p>如果目标程序以管理员权限运行，KeePass 也必须以管理员权限运行才能自动输入。</p></blockquote></section><section><h3>3.2 匹配规则<a href="#32-匹配规则"><span>#</span></a></h3><p>按下自动输入热键时，KeePass 根据当前活动窗口标题在数据库中匹配记录——记录的 <strong>标题</strong> 或 <strong>网址</strong> 包含在窗口标题内即匹配成功。</p><p><strong>注意事项</strong>：</p><ul>
<li>标题需包含网页关键词（不能随意填写），否则无法匹配</li>
<li>Chrome 中所有标签页标题都包含 “Google Chrome”，可能误匹配</li>
<li><strong>务必勾选</strong> <code>工具</code> → <code>选项</code> → <code>高级</code> → <code>总是显示全局自动输入记录选取对话框</code></li>
</ul></section><section><h3>3.3 推荐键入规则<a href="#33-推荐键入规则"><span>#</span></a></h3><p>默认规则：<code>{USERNAME}{TAB}{PASSWORD}{ENTER}</code></p><p><strong>推荐规则（适合中文用户）</strong>：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>+{DELAY 100}{CLEARFIELD}{USERNAME}{TAB}{PASSWORD}{ENTER}</span></div></div></code></pre><div><div></div><div></div></div></figure></div><ul>
<li><code>+</code> = Shift 键（切换输入法）</li>
<li><code>{DELAY 100}</code> = 等待 100ms</li>
<li><code>{CLEARFIELD}</code> = 清空输入框</li>
<li>注意：使用此规则时确保当前输入法为<strong>中文</strong>状态</li>
</ul><p>设置方式：编辑群组 → <code>自动输入</code> → <code>替代默认规则</code>，子记录会自动继承。</p></section><section><h3>3.4 全自动切换英文输入并切回<a href="#34-全自动切换英文输入并切回"><span>#</span></a></h3><p>通过 Windows 键盘快捷键 + KeePass 编码实现自动切换。</p><p><strong>Step 1 — Windows 键盘设置</strong>：</p><p>控制面板 → 语言 → 高级键盘设置 → 语言栏选项 → 分别设置英语美式键盘和中文键盘的快捷键（如 <code>Ctrl+0</code> 切换英文，<code>Ctrl+1</code> 切换中文）。</p><p><strong>Step 2 — KeePass 规则</strong>：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>^0{CLEARFIELD}{USERNAME}{TAB}{PASSWORD}^1{ENTER}</span></div></div></code></pre><div><div></div><div></div></div></figure></div><ul>
<li><code>^0</code> = Ctrl+0（切换到英文输入）</li>
<li><code>^1</code> = Ctrl+1（切换回中文输入）</li>
<li><code>^+1</code> = Ctrl+Shift+1（部分输入法如搜狗需要加 Shift）</li>
</ul><p>这样自动填写时无需手动切换输入法。</p></section><section><h3>3.5 双通道自动输入混淆<a href="#35-双通道自动输入混淆"><span>#</span></a></h3><p>将要输入的字符随机分为两部分，分别用<strong>模拟按键</strong>和<strong>复制粘贴</strong>两种方式混合输入，输入完成后还原剪切板内容。单一的键盘记录或剪切板监听均无法窃取完整字段。</p><blockquote><p>某些软件输入框不支持粘贴，因此该功能默认不启用。</p></blockquote><p>启用方式：编辑记录 → <code>自动输入</code> → 勾选 <code>双通道自动输入混淆</code>。配合 KPEntryTemplates 模板插件可实现新建记录时自动启用。</p></section><section><h3>3.6 指定窗口自定义规则<a href="#36-指定窗口自定义规则"><span>#</span></a></h3><p>部分软件中全局自动输入可能失效，可通过 <code>编辑记录</code> → <code>自动输入</code> → <code>为指定窗口使用自定义规则</code> → <code>添加</code> → <code>选择窗口</code> 进行适配。</p></section></section><section><h2>四、浏览器集成（KeePassHttp + chromeIPass）<a href="#四浏览器集成keepasshttp--chromeipass"><span>#</span></a></h2><section><h3>4.1 工作原理<a href="#41-工作原理"><span>#</span></a></h3><p>KeePassHttp 作为插件运行在 KeePass 中，chromeIPass 作为 Chrome 扩展运行在浏览器中。chromeIPass 不存储数据，每次通过 KeePassHttp 从 KeePass 数据库获取记录（AES 256 加密传输）。</p></section><section><h3>4.2 chromeIPass 配置<a href="#42-chromeipass-配置"><span>#</span></a></h3><ol>
<li>点击 Chrome 中 chromeIPass 图标 → <code>Connect</code></li>
<li>输入标识名称（如”家里的电脑”）→ <code>Save</code></li>
<li>默认快捷键：<code>Ctrl + Shift + U</code>（填充用户名+密码）、<code>Ctrl + Shift + P</code>（仅填充密码）</li>
</ol></section><section><h3>4.3 自动新建/更新记录<a href="#43-自动新建更新记录"><span>#</span></a></h3><p>在未记录的网站登录时，chromeIPass 图标会变红闪烁，点击即可新建或更新记录。<strong>注意</strong>：chromeIPass 无法识别登录是否成功，输错密码也会闪烁。</p></section><section><h3>4.4 进阶技巧<a href="#44-进阶技巧"><span>#</span></a></h3><p><strong>网址前缀处理</strong>：添加记录时网址设为 <code>baidu.com/</code> 而非 <code>www.baidu.com/</code>，这样子域名（<code>tieba.baidu.com</code>、<code>map.baidu.com</code>）均可匹配。使用 WebAutoType 插件可自动完成。</p><p><strong>修改网站密码</strong>：</p><ol>
<li>在 chromeIPass 设置中取消勾选 <code>Automatically fill-in single credentials entry</code></li>
<li>打开密码修改页面，按 <code>Ctrl + Shift + P</code> 填入原密码</li>
<li>在 KeePass 中修改密码</li>
<li>切换到其他标签页再切回</li>
<li>按 <code>Ctrl + Shift + P</code> 填入新密码</li>
</ol><blockquote><p>原理：切换标签页会触发 KeePassHttp 重新检索数据库。</p></blockquote><p><strong>关闭密码生成器</strong>：chromeIPass 的密码生成功能复制到剪切板后不会自动清除，建议在设置中关闭 <code>Activate password generator</code>。</p></section></section><section><h2>五、两步验证（KeeTrayTOTP）<a href="#五两步验证keetraytotp"><span>#</span></a></h2><section><h3>5.1 功能说明<a href="#51-功能说明"><span>#</span></a></h3><p>在 Windows 端直接生成 TOTP 两步验证码，安卓端 Keepass2Android 无需额外配置即可使用。替代 Google Authenticator、Microsoft Authenticator、Steam 手机客户端等。</p></section><section><h3>5.2 配置方法<a href="#52-配置方法"><span>#</span></a></h3><ol>
<li>设置网站两步验证时，在二维码下方点击”无法扫描条形码”，获取密钥（TOTP Seed）</li>
<li>在 KeePass 中选中记录，按 <code>Ctrl + Shift + I</code> 打开 TOTP 设置</li>
<li>粘贴密钥到 <code>TOTP Seed</code>，<code>TOTP Format</code> 选择 <code>6</code>（6 位验证码）</li>
<li>点击 <code>Finish</code></li>
</ol><p>使用：选中记录 → <code>Ctrl + T</code>（或右键 → Copy TOTP），验证码即复制到剪切板。</p></section><section><h3>5.3 特殊网站处理<a href="#53-特殊网站处理"><span>#</span></a></h3><p><strong>小米</strong>：只能扫码不给密钥时，用任意二维码扫描软件获取密钥（URI 中 <code>secret=</code> 参数）。</p><p><strong>Steam</strong>（需手机 root）：</p><ol>
<li>安装 Steam 手机客户端并设置好令牌</li>
<li>用 root 文件管理器打开 <code>/data/data/com.valvesoftware.android.steam.community/files/Steamguard</code></li>
<li>复制密钥，<code>TOTP Format</code> 选择 <code>Steam</code></li>
<li>验证与手机端令牌代码一致后可卸载手机客户端</li>
</ol></section></section><section><h2>六、KPEntryTemplates 模板配置<a href="#六kpentrytemplates-模板配置"><span>#</span></a></h2><section><h3>6.1 基础配置<a href="#61-基础配置"><span>#</span></a></h3><ol>
<li><code>文件</code> → <code>数据库设置</code> → <code>高级</code>，在 <code>模板记录组</code> 中选择一个群组</li>
<li>在该群组中按 <code>Ctrl+I</code> 添加记录</li>
<li>配置 <code>自动输入</code> 勾选 <code>双通道自动输入混淆</code></li>
<li>点击 <code>Template</code> → <code>Init As Template</code></li>
<li>配置所需字段 → <code>确定</code></li>
</ol></section><section><h3>6.2 关键字段类型<a href="#62-关键字段类型"><span>#</span></a></h3><ul>
<li><strong>Protected Inline</strong>：加密文本编辑框，用于存储支付密码等敏感字段</li>
<li><strong>Listbox</strong>：下拉列表框，适合邮箱、手机号等重复字段。分隔符为英文逗号</li>
</ul></section><section><h3>6.3 使用模板<a href="#63-使用模板"><span>#</span></a></h3><p>添加记录时 → <code>Template</code> → <code>Set Template Parent</code>，选择对应模板即可。</p></section></section><section><h2>七、高级技巧<a href="#七高级技巧"><span>#</span></a></h2><section><h3>7.1 固定配置（防篡改）<a href="#71-固定配置防篡改"><span>#</span></a></h3><p>类似网吧还原机制，每次启动使用固定配置：</p><ol>
<li><code>工具</code> → <code>选项</code>，配置完成后点确定</li>
<li>打开 <code>C:\Users\&lt;用户名&gt;\AppData\Roaming\KeePass</code></li>
<li>将 <code>KeePass.config.xml</code> 重命名为 <code>KeePass.config.enforced.xml</code></li>
<li>剪切到 <code>C:\Program Files (x86)\KeePass Password Safe 2</code></li>
</ol><p>如需取消，删除 <code>KeePass.config.enforced.xml</code> 即可。</p></section><section><h3>7.2 TAN（一次性验证码）<a href="#72-tan一次性验证码"><span>#</span></a></h3><p>适用于网站两步验证提供的备用验证码，每条 TAN 用过后自动标记失效日期。</p><ul>
<li>建议为每个账户单独创建群组，避免混淆</li>
<li>添加方式：选中群组 → <code>工具</code> → <code>TAN 向导</code> → 勾选 <code>序号连续，开始于</code></li>
</ul></section><section><h3>7.3 WebAutoType 快速添加<a href="#73-webautotype-快速添加"><span>#</span></a></h3><p>设置全局热键后，在网页中一键添加记录（标题和 URL 自动填充）：</p><p><code>工具</code> → <code>WebAutoType Options</code> → 设置 <code>Global hot key</code> → <code>OK</code></p></section><section><h3>7.4 AutoTypeSearch 搜索补充<a href="#74-autotypesearch-搜索补充"><span>#</span></a></h3><p>按下自动输入热键无匹配时弹出搜索框，手动搜索后执行自动输入。</p><p>可设置独立全局热键：<code>工具</code> → <code>选项</code> → <code>AutoTypeSearch</code> → 勾选并设置。</p></section></section><section><h2>八、安卓端（Keepass2Android）<a href="#八安卓端keepass2android"><span>#</span></a></h2><ul>
<li>支持 TOTP、指纹解锁、自动清除剪切板、禁止应用内截图</li>
<li>Android 8.0+ 支持应用内自动填充，8.0 以下使用内置键盘填充</li>
<li>离线版同步建议使用 FolderSync（双向同步）</li>
<li>官方版本内置中文，完全免费，仅从 Google Play 下载</li>
</ul></section><section><h2>九、常见问题<a href="#九常见问题"><span>#</span></a></h2><section><h3>9.1 安全警告<a href="#91-安全警告"><span>#</span></a></h3><ul>
<li>仅从官方渠道下载 KeePass 及插件，避免使用精简版、修改版、增强版等</li>
<li>密钥文件不要随意修改内容，重命名不影响使用</li>
</ul></section><section><h3>9.2 快捷键冲突<a href="#92-快捷键冲突"><span>#</span></a></h3><p>默认 <code>Ctrl+Alt+A</code> 可能与 QQ 截图快捷键冲突，在 <code>工具</code> → <code>选项</code> → <code>集成</code> 中修改。</p></section><section><h3>9.3 自动输入失效<a href="#93-自动输入失效"><span>#</span></a></h3><p>目标程序以管理员权限运行时，KeePass 也需以管理员权限运行。</p></section></section><section><h2>十、来源与致谢<a href="#十来源与致谢"><span>#</span></a></h2><p>本文是在他人公开教程基础上重写的个人整理笔记，不是原文转载；章节结构、取舍和补记的踩坑点由本人决定。参考来源：</p><ul>
<li>《一劳永逸：KeePass全网最详使用指南》，知乎专栏，2018-07-13，作者署名 tactk：<a href="https://zhuanlan.zhihu.com/p/39645975" target="_blank">zhuanlan.zhihu.com/p/39645975</a>。知乎正文可能需要登录才能查看。</li>
<li>作者个人站点战术客上的相关 KeePass 文章（同样是 tactk，标题即《KeePass入门探索——全自动切换英文输入并切回及自动调用技巧》），2018-09-26：<a href="https://www.tacgeek.com/1937-keepass.html" target="_blank">tacgeek.com/1937-keepass.html</a>。</li>
<li>KeePass 官方插件列表：<a href="https://keepass.info/plugins.html" target="_blank">keepass.info/plugins.html</a>。</li>
</ul><p>原文截图托管在知乎图床，禁止外站引用（直接请求返回 403），而本仓库的发布管道只同步 Markdown、不同步图片，所以这里只保留文字步骤，界面细节请对照官方文档或原作者原文。需要完整配图版请直接阅读原作者文章。</p></section></section>]]></content>
    </entry>
    <entry>
      <id>https://yyq-firefly.pages.dev/posts/20-knowledge/java/arthas%E8%AF%8A%E6%96%AD/</id>
      <title type="text">Arthas诊断</title>
      <published>2023-07-24T00:00:00.000Z</published>
      <updated>2023-07-24T00:00:00.000Z</updated>
      <author><name>YYQ</name></author>
      <link rel="alternate" href="https://yyq-firefly.pages.dev/posts/20-knowledge/java/arthas%E8%AF%8A%E6%96%AD/"/>
      <summary type="text"></summary>
      <content type="html"><![CDATA[<section><h1>Arthas诊断<a href="#arthas诊断"><span>#</span></a></h1><p>阿里开源 Arthas 工具，线上诊断 Java 程序的神器。</p><section><h2>一、Arthas简介<a href="#一arthas简介"><span>#</span></a></h2><p><a href="https://arthas.aliyun.com/en/" target="_blank">Arthas官网</a> | <a href="https://github.com/alibaba/arthas/blob/master/README_CN.md" target="_blank">Arthas GitHub</a></p><p></p><figure><img src="https://raw.githubusercontent.com/Super-YYQ/PicGoPicture/main/PicGo/20230724144124.png" alt="image-20230724144124654" /><figcaption>image-20230724144124654</figcaption></figure><p></p><section><h3>1.1 使用准备<a href="#11-使用准备"><span>#</span></a></h3><div><div><div><figure><figcaption><span></span><span>Terminal window</span><span>展开</span><span>收起</span></figcaption><pre><code><div><div><div>1</div></div><div><span>## 1、下载 arthas 的包</span></div></div><div><div><div>2</div></div><div><span>wget</span><span> </span><span>https://alibaba.github.io/arthas/arthas-boot.jar</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span>## 2、启动 arthas</span></div></div><div><div><div>5</div></div><div><span>java</span><span> </span><span>-jar</span><span> </span><span>arthas-boot.jar</span></div></div><div><div><div>6</div></div><div>
</div></div><div><div><div>7</div></div><div><span>## 3、arthas 启动后会自动检测存在的 java 进程</span></div></div><div><div><div>8</div></div><div><span>$</span><span> </span><span>java</span><span> </span><span>-jar</span><span> </span><span>arthas-boot.jar</span></div></div><div><div><div>9</div></div><div><span>* [1]: 35542 com.yyq.bootstrap.jar</span></div></div><div><div><div>10</div></div><div><span><span>  </span></span><span>[2]</span><span>:</span><span> </span><span>71560</span><span> </span><span>arthas-demo.jar</span></div></div><div><div><div>11</div></div><div><span>1</span></div></div><div><div><div>12</div></div><div>
</div></div><div><div><div>13</div></div><div><span>## 4、选择进程，使用相关命令</span></div></div><div><div><div>14</div></div><div>
</div></div><div><div><div>15</div></div><div><span>## 5、stop 命令可退出</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div></section></section><section><h2>二、基础命令<a href="#二基础命令"><span>#</span></a></h2><section><h3>2.1 jad（反编译）<a href="#21-jad反编译"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>## 查看 java 源码，可以用来诊断线上环境代码是否最新</span></div></div><div><div><div>2</div></div><div><span>jad </span><span>demo</span><span>.</span><span>MathGame</span><span> test</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>2.2 watch（数据观测）<a href="#22-watch数据观测"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>## 监听 demo.MathGame 类的 primeFactors 方法，展示 params[0] 第一个参数、returnObj 返回值、throwExp 报错，过滤条件 params[0].getKey == '12345'，打印详细参数-v，收集n条数据-n</span></div></div><div><div><div>2</div></div><div><span>watch</span><span> </span><span>demo.MathGame</span><span> </span><span>primeFactors</span><span> </span><span>"{params[0],returnObj,throwExp}"</span><span> </span><span>"params[0].getKey == '12345'"</span><span> </span><span>-x</span><span> </span><span>2</span><span> </span><span>-v</span><span> </span><span>-n</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span>## 过滤list数组中包含参数条件</span></div></div><div><div><div>5</div></div><div><span>wacth</span><span> </span><span>...</span><span> </span><span>"params[0].parameters.indexOf('c1r4k4yv')&gt;-1"</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>2.3 trace（调用路径）<a href="#23-trace调用路径"><span>#</span></a></h3><blockquote><p>stack：当前方法被调用的调用路径（反向trace）</p></blockquote><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>## 监控方法内部调用路径，并输出方法路径上的每个节点上耗时</span></div></div><div><div><div>2</div></div><div><span>trace</span><span> </span><span>demo.MathGame</span><span> </span><span>test</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>2.4 sc（JVM 已加载的类信息）<a href="#24-scjvm-已加载的类信息"><span>#</span></a></h3><div><div><div><figure><figcaption><span></span><span>Terminal window</span><span>展开</span><span>收起</span></figcaption><pre><code><div><div><div>1</div></div><div><span>## 查看JVM已加载的类信息</span></div></div><div><div><div>2</div></div><div><span>$</span><span> </span><span>sc</span><span> </span><span>-d</span><span> </span><span>demo.MathGame</span></div></div><div><div><div>3</div></div><div><span>class-info</span><span>        </span><span>demo.MathGame</span></div></div><div><div><div>4</div></div><div><span>code-source</span><span>       </span><span>/private/tmp/math-game.jar</span></div></div><div><div><div>5</div></div><div><span>name</span><span>              </span><span>demo.MathGame</span></div></div><div><div><div>6</div></div><div><span>isInterface</span><span>       </span><span>false</span></div></div><div><div><div>7</div></div><div><span>isAnnotation</span><span>      </span><span>false</span></div></div><div><div><div>8</div></div><div><span>isEnum</span><span>            </span><span>false</span></div></div><div><div><div>9</div></div><div><span>isAnonymousClass</span><span>  </span><span>false</span></div></div><div><div><div>10</div></div><div><span>isArray</span><span>           </span><span>false</span></div></div><div><div><div>11</div></div><div><span>isLocalClass</span><span>      </span><span>false</span></div></div><div><div><div>12</div></div><div><span>isMemberClass</span><span>     </span><span>false</span></div></div><div><div><div>13</div></div><div><span>isPrimitive</span><span>       </span><span>false</span></div></div><div><div><div>14</div></div><div><span>isSynthetic</span><span>       </span><span>false</span></div></div><div><div><div>15</div></div><div><span>simple-name</span><span>       </span><span>MathGame</span></div></div><div><div><div>16</div></div><div><span>modifier</span><span>          </span><span>public</span></div></div><div><div><div>17</div></div><div><span>annotation</span></div></div><div><div><div>18</div></div><div><span>interfaces</span></div></div><div><div><div>19</div></div><div><span>super-class</span><span>       </span><span>+-java.lang.Object</span></div></div><div><div><div>20</div></div><div><span>class-loader</span><span>      </span><span>+-sun.misc.Launcher</span><span>$AppClassLoader</span><span>@3d4eac69</span></div></div><div><div><div>21</div></div><div><span>                    </span><span>+-sun.misc.Launcher$ExtClassLoader@66350f69</span></div></div><div><div><div>22</div></div><div><span>classLoaderHash</span><span>   </span><span>3d4eac69</span></div></div><div><div><div>23</div></div><div>
</div></div><div><div><div>24</div></div><div><span>Affect(row-cnt:1</span><span>) cost in 875 ms.</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div></section><section><h3>2.5 logger（logger 信息）<a href="#25-loggerlogger-信息"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>## 查询所有日志设置</span></div></div><div><div><div>2</div></div><div><span>$</span><span> </span><span>logger</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span>## 更改日志级别</span></div></div><div><div><div>5</div></div><div><span>$</span><span> </span><span>logger</span><span> </span><span>-c</span><span> [hashcode] --name ROOT --level debug</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>2.6 tt（方法执行数据的时空隧道）<a href="#26-tt方法执行数据的时空隧道"><span>#</span></a></h3></section><section><h3>2.7 ognl表达式<a href="#27-ognl表达式"><span>#</span></a></h3><blockquote><p>如watch命令的过滤、计数等…</p></blockquote><p><a href="https://github.com/alibaba/arthas/issues/71" target="_blank">Arthas特殊用法issues</a></p><p><a href="https://commons.apache.org/proper/commons-ognl/language-guide.html" target="_blank">OGNL表达式官网</a></p></section></section><section><h2>三、高级应用<a href="#三高级应用"><span>#</span></a></h2><section><h3>3.1 Idea插件<a href="#31-idea插件"><span>#</span></a></h3><blockquote><p>arthas idea</p></blockquote></section><section><h3>3.2 线上热部署<a href="#32-线上热部署"><span>#</span></a></h3></section><section><h3>3.3 获取任意bean<a href="#33-获取任意bean"><span>#</span></a></h3><p><a href="https://github.com/alibaba/arthas/issues/482" target="_blank">GitHub教程</a></p><p><strong>spring mvc应用，请求会经过一系列的spring bean处理，那么我们可以在spring mvc的类里拦截到一些请求。</strong></p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>$</span><span> </span><span>tt</span><span> </span><span>-t</span><span> </span><span>org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter</span><span> </span><span>invokeHandlerMethod</span></div></div><div><div><div>2</div></div><div><span>Press</span><span> </span><span>Ctrl+C</span><span> </span><span>to</span><span> </span><span>abort.</span></div></div><div><div><div>3</div></div><div><span>Affect(class-cnt:1</span><span> </span><span>,</span><span> </span><span>method-cnt:1</span><span>) cost in 101 ms.</span></div></div><div><div><div>4</div></div><div><span> </span><span>INDEX</span><span>  </span><span>TIMESTAMP</span><span>         </span><span>COST</span><span>(</span><span>ms</span><span>  </span><span>IS-RE</span><span>  </span><span>IS-EX</span><span>  </span><span>OBJECT</span><span>       </span><span>CLASS</span><span>                     </span><span>METHOD</span></div></div><div><div><div>5</div></div><div><span><span>                          </span></span><span>)        </span><span>T</span><span>      </span><span>P</span></div></div><div><div><div>6</div></div><div><span>------------------------------------------------------------------------------------------------------------------</span></div></div><div><div><div>7</div></div><div><span> </span><span>1000</span><span>   </span><span>2019-01-27</span><span> </span><span>16:31</span><span>  </span><span>3.66744</span><span>  </span><span>true</span><span>   </span><span>false</span><span>  </span><span>0x4465cf70</span><span>   </span><span>RequestMappingHandlerAda</span><span>  </span><span>invokeHandlerMethod</span></div></div><div><div><div>8</div></div><div><span>        </span><span>:54</span><span>                                                   </span><span>pter</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>那么怎样获取到spring context？</strong></p><p>可以用<code>tt</code>命令的<code>-i</code>参数来指定index，并且用<code>-w</code>参数来执行ognl表达式来获取spring context：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>$</span><span> </span><span>tt</span><span> </span><span>-i</span><span> </span><span>1000</span><span> </span><span>-w</span><span> </span><span>'target.getApplicationContext()'</span></div></div><div><div><div>2</div></div><div><span>@AnnotationConfigEmbeddedWebApplicationContext[</span></div></div><div><div><div>3</div></div><div><span> </span><span>reader</span><span>=</span><span>@AnnotatedBeanDefinitionReader[org.springframework.context.annotation.AnnotatedBeanDefinitionReader@35dc90ec</span><span>],</span></div></div><div><div><div>4</div></div><div><span> </span><span>scanner</span><span>=</span><span>@ClassPathBeanDefinitionScanner[org.springframework.context.annotation.ClassPathBeanDefinitionScanner@72078a14</span><span>],</span></div></div><div><div><div>5</div></div><div><span>  </span><span>annotatedClasses</span><span>=</span><span>null,</span></div></div><div><div><div>6</div></div><div><span>  </span><span>basePackages</span><span>=</span><span>null,</span></div></div><div><div><div>7</div></div><div><span>]</span></div></div><div><div><div>8</div></div><div><span>Affect(row-cnt:1</span><span>) cost in 7 ms.</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>从spring context里获取任意bean</strong></p><p>获取到spring context之后，就可以获取到任意的bean了，比如获取到<code>helloWorldService</code>，并调用<code>getHelloMessage()</code>函数：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>$</span><span> </span><span>tt</span><span> </span><span>-i</span><span> </span><span>1000</span><span> </span><span>-w</span><span> </span><span>'target.getApplicationContext().getBean("helloWorldService").getHelloMessage()'</span></div></div><div><div><div>2</div></div><div><span>@String[Hello</span><span> </span><span>World]</span></div></div><div><div><div>3</div></div><div><span>Affect(row-cnt:1</span><span>) cost in 5 ms.</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>3.4 获取数据库连接信息<a href="#34-获取数据库连接信息"><span>#</span></a></h3><p><strong>找到项目中数据库相关组件，如：mybatis-spring</strong></p><p><strong>查询数据库组件中存在DataSource的相关类和方法</strong></p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>org.mybatis.spring.transaction.SpringManagedTransactionFactory#newTransaction(javax.sql.DataSource,</span><span> </span><span>org.apache.ibatis.session.TransactionIsolationLevel,</span><span> </span><span>boolean</span><span>)</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><strong>通过tt方法检索DataSource中隐藏的数据库连接信息</strong></p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>tt</span><span> </span><span>-t</span><span> </span><span>org.mybatis.spring.transaction.SpringManagedTransactionFactory</span><span> </span><span>newTransaction</span><span> </span><span>-n</span><span> </span><span>5</span></div></div><div><div><div>2</div></div><div>
</div></div><div><div><div>3</div></div><div><span>tt</span><span> </span><span>-i</span><span> </span><span>1001</span><span> </span><span>-w</span><span> </span><span>'params[0].**'</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section></section><section><h2>四、常见问题<a href="#四常见问题"><span>#</span></a></h2></section></section>]]></content>
    </entry>
    <entry>
      <id>https://yyq-firefly.pages.dev/posts/20-knowledge/windows/%E7%94%B5%E8%84%91%E5%BF%85%E5%A4%87%E8%BD%AF%E4%BB%B6/</id>
      <title type="text">电脑必备软件</title>
      <published>2023-07-23T00:00:00.000Z</published>
      <updated>2023-07-23T00:00:00.000Z</updated>
      <author><name>YYQ</name></author>
      <link rel="alternate" href="https://yyq-firefly.pages.dev/posts/20-knowledge/windows/%E7%94%B5%E8%84%91%E5%BF%85%E5%A4%87%E8%BD%AF%E4%BB%B6/"/>
      <summary type="text"></summary>
      <content type="html"><![CDATA[<section><h1>电脑必备软件<a href="#电脑必备软件"><span>#</span></a></h1><p>Windows 电脑必备软件，包括电脑美化、实用工具等。</p><section><h2>一、效率工具<a href="#一效率工具"><span>#</span></a></h2><section><h3>1.1 <a href="https://www.snipaste.com/" target="_blank">Snipaste（截图工具）</a><a href="#11-snipaste截图工具"><span>#</span></a></h3><blockquote><p>小巧、快捷、使用方便</p></blockquote><p></p><figure><img src="https://raw.githubusercontent.com/Super-YYQ/PicGoPicture/main/PicGoOwn/image-20230723152524565.png" alt="Snipaste" /><figcaption>Snipaste</figcaption></figure><p></p></section><section><h3>1.2 <a href="https://keepass.info/" target="_blank">Keepass（统一密码管理）</a><a href="#12-keepass统一密码管理"><span>#</span></a></h3><blockquote><p>统一密码管理软件，需要配置插件使用</p></blockquote><p></p><figure><img src="https://raw.githubusercontent.com/Super-YYQ/PicGoPicture/main/PicGoOwn/image-20230723152618356.png" alt="Keepass" /><figcaption>Keepass</figcaption></figure><p></p><p><strong>使用教程</strong></p><ul>
<li>
<a href="/posts/20-Knowledge/Windows/KeePass/KeePass%E5%AF%86%E7%A0%81%E7%AE%A1%E7%90%86/"><div><div>KeePass 密码管理</div><div><span>2026-05-26</span><span>knowledge</span><span><span>#keepass</span><span>#密码管理</span><span>#效率工具</span><span>#安全</span></span></div></div></a>
</li>
<li><a href="/posts/20-Knowledge/Windows/KeePass/KeePassXC%20%E6%8E%A8%E8%8D%90%E9%85%8D%E7%BD%AE%E4%B8%8E%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/">KeePassXC 推荐配置与使用指南</a>：当前主力客户端配置</li>
<li><a href="https://zhuanlan.zhihu.com/p/39645975" target="_blank">一劳永逸：KeePass全网最详使用指南</a></li>
<li>使用 <strong>OneDrive</strong> 同步</li>
</ul></section><section><h3>1.3 <a href="https://www.neatdownloadmanager.com/index.php/en/" target="_blank">Neat Download Manager（下载工具）</a><a href="#13-neat-download-manager下载工具"><span>#</span></a></h3><blockquote><p>小巧下载工具，配合浏览器插件使用更佳</p></blockquote><p></p><figure><img src="https://raw.githubusercontent.com/Super-YYQ/PicGoPicture/main/PicGoOwn/image-20230723154525650.png" alt="Neat Download Manager" /><figcaption>Neat Download Manager</figcaption></figure><p></p></section><section><h3>1.4 <a href="https://www.listary.com/" target="_blank">Listary（快捷启动工具）</a><a href="#14-listary快捷启动工具"><span>#</span></a></h3><blockquote><p>通过快捷键唤起搜索框，快速查询并启动软件</p></blockquote><p></p><figure><img src="https://raw.githubusercontent.com/Super-YYQ/PicGoPicture/main/PicGoOwn/image-20230723154443912.png" alt="Listary" /><figcaption>Listary</figcaption></figure><p></p></section><section><h3>1.5 <a href="https://picgo.github.io/PicGo-Doc/zh/guide/#picgo-is-here" target="_blank">PicGo（图床工具）</a><a href="#15-picgo图床工具"><span>#</span></a></h3><blockquote><p>配合 GitHub 仓库搭建免费图床</p></blockquote><p></p><figure><img src="https://raw.githubusercontent.com/Super-YYQ/PicGoPicture/main/PicGoOwn/image-20230723153730453.png" alt="PicGo" /><figcaption>PicGo</figcaption></figure><p></p><p><strong>使用教程</strong></p><ul>
<li><a href="https://picgo.github.io/PicGo-Doc/zh/guide/config.html#github%E5%9B%BE%E5%BA%8A" target="_blank">PicGo+GitHub搭建免费个人图床</a></li>
<li><a href="http://b.aksy.space/study-notes/514.html" target="_blank">PicGo+GitHub图床配置&amp;常见错误</a></li>
</ul></section><section><h3>1.6 <a href="https://typora.io/" target="_blank">Typora（MarkDown编辑器）</a><a href="#16-typoramarkdown编辑器"><span>#</span></a></h3><blockquote><p>配合 Snipaste + PicGo 实现文章图片的截取上传自动化</p></blockquote><p></p><figure><img src="https://raw.githubusercontent.com/Super-YYQ/PicGoPicture/main/PicGoOwn/image-20230723155055161.png" alt="Typora" /><figcaption>Typora</figcaption></figure><p></p></section></section><section><h2>二、电脑美化<a href="#二电脑美化"><span>#</span></a></h2><section><h3>2.1 Wallpaper Engine (Steam)<a href="#21-wallpaper-engine-steam"><span>#</span></a></h3><p></p><figure><img src="https://raw.githubusercontent.com/Super-YYQ/PicGoPicture/main/PicGoOwn/image-20230723151113486.png" alt="Wallpaper Engine" /><figcaption>Wallpaper Engine</figcaption></figure><p></p></section></section><section><h2>三、配置优化<a href="#三配置优化"><span>#</span></a></h2><section><h3>3.1 暂无<a href="#31-暂无"><span>#</span></a></h3></section></section></section>]]></content>
    </entry>
    <entry>
      <id>https://yyq-firefly.pages.dev/posts/50-tutorials/%E5%8D%9A%E5%AE%A2/hexo%E5%8D%9A%E5%AE%A2%E6%90%AD%E5%BB%BA/</id>
      <title type="text">Hexo + GithubPage 博客搭建</title>
      <published>2023-07-23T00:00:00.000Z</published>
      <updated>2023-07-23T00:00:00.000Z</updated>
      <author><name>YYQ</name></author>
      <link rel="alternate" href="https://yyq-firefly.pages.dev/posts/50-tutorials/%E5%8D%9A%E5%AE%A2/hexo%E5%8D%9A%E5%AE%A2%E6%90%AD%E5%BB%BA/"/>
      <summary type="text"></summary>
      <content type="html"><![CDATA[<section><h1>Hexo + GithubPage 博客搭建<a href="#hexo--githubpage-博客搭建"><span>#</span></a></h1><p>基于 Hexo 博客框架搭建 GithubPage 免费的静态博客页面。</p><section><h2>一、Hexo 的使用<a href="#一hexo-的使用"><span>#</span></a></h2><p><a href="https://hexo.io/zh-cn/index.html" target="_blank">Hexo官网链接</a></p></section><section><h2>二、Hexo 主题<a href="#二hexo-主题"><span>#</span></a></h2><p><a href="https://github.com/blinkfox/hexo-theme-matery" target="_blank">闪烁之狐大神的 <strong>hexo-theme-matery</strong></a></p></section><section><h2>三、GithubPage 的使用<a href="#三githubpage-的使用"><span>#</span></a></h2></section><section><h2>四、GitHub Action<a href="#四github-action"><span>#</span></a></h2></section><section><h2>五、优化<a href="#五优化"><span>#</span></a></h2></section><section><h2>六、教程汇总<a href="#六教程汇总"><span>#</span></a></h2><section><h3>6.1 <a href="https://blog.17lai.site/posts/40300608/" target="_blank">夜法之书</a><a href="#61-夜法之书"><span>#</span></a></h3></section></section><section><h2>七、常见问题<a href="#七常见问题"><span>#</span></a></h2><section><h3>7.1 Hexo 文档永久链接设置<a href="#71-hexo-文档永久链接设置"><span>#</span></a></h3><p><a href="https://hexo.io/zh-cn/docs/permalinks.html" target="_blank">官网文档 — 永久链接（Permalinks）</a></p><ul>
<li>permalink 最后一定要以 <code>/</code> 收尾，否则点击文档会变成下载</li>
</ul></section><section><h3>7.2 Git Bash 中按下 Ctrl+C 无法中断 hexo s<a href="#72-git-bash-中按下-ctrlc-无法中断-hexo-s"><span>#</span></a></h3><blockquote><p>打开 cmd，命令行执行 <code>taskkill /F /IM node.exe</code></p></blockquote><p><a href="https://blog.csdn.net/weixin_43608645/article/details/105103743" target="_blank">转载至</a></p></section></section></section>]]></content>
    </entry>
</feed>
