<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>服务器与系统 on 扎塔-Zata</title><link>https://www.zata.cc/tags/%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8E%E7%B3%BB%E7%BB%9F/</link><description>Recent content in 服务器与系统 on 扎塔-Zata</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><copyright>Example Person</copyright><lastBuildDate>Thu, 24 Sep 2026 17:09:06 +0800</lastBuildDate><atom:link href="https://www.zata.cc/tags/%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8E%E7%B3%BB%E7%BB%9F/index.xml" rel="self" type="application/rss+xml"/><item><title>服务器磁盘管理基础</title><link>https://www.zata.cc/p/%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%A3%81%E7%9B%98%E7%AE%A1%E7%90%86%E5%9F%BA%E7%A1%80/</link><pubDate>Fri, 05 Jun 2026 10:00:00 +0800</pubDate><guid>https://www.zata.cc/p/%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%A3%81%E7%9B%98%E7%AE%A1%E7%90%86%E5%9F%BA%E7%A1%80/</guid><description>&lt;img src="https://www.zata.cc/p/%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%A3%81%E7%9B%98%E7%AE%A1%E7%90%86%E5%9F%BA%E7%A1%80/images/index/index.png" alt="Featured image of post 服务器磁盘管理基础" />&lt;p>服务器运维的第一步是搞清楚自己手上有几块盘、有多大、挂在哪。本文覆盖从磁盘查看、分区格式化到持久化挂载的完整流程。&lt;/p>
&lt;hr>
&lt;h2 id="查看磁盘概况">查看磁盘概况
&lt;/h2>&lt;h3 id="1-lsblk--最直观的树形视图">1. lsblk —— 最直观的树形视图
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">lsblk
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>输出示例：&lt;/p>
&lt;p>&lt;img src="https://www.zata.cc/p/%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%A3%81%E7%9B%98%E7%AE%A1%E7%90%86%E5%9F%BA%E7%A1%80/image/index/1780640633328.png"
width="812"
height="364"
srcset="https://www.zata.cc/p/%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%A3%81%E7%9B%98%E7%AE%A1%E7%90%86%E5%9F%BA%E7%A1%80/image/index/1780640633328_hu5275955386156789794.png 480w, https://www.zata.cc/p/%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%A3%81%E7%9B%98%E7%AE%A1%E7%90%86%E5%9F%BA%E7%A1%80/image/index/1780640633328_hu2854119440593011549.png 1024w"
loading="lazy"
alt="1780640633328"
class="gallery-image"
data-flex-grow="223"
data-flex-basis="535px"
>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sda 8:0 0 50G 0 disk
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├─sda1 8:1 0 1G 0 part /boot
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">└─sda2 8:2 0 49G 0 part /
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sdb 8:16 0 100G 0 disk
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">└─sdb1 8:17 0 100G 0 part /mnt
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">nvme0n1 259:0 0 200G 0 disk
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>解读：&lt;/p>
&lt;ul>
&lt;li>&lt;code>sda&lt;/code>、&lt;code>sdb&lt;/code>、&lt;code>nvme0n1&lt;/code> 是 &lt;strong>3 块物理磁盘&lt;/strong>&lt;/li>
&lt;li>&lt;code>sda&lt;/code> 分了 2 个区，分别挂载到 &lt;code>/boot&lt;/code> 和 &lt;code>/&lt;/code>&lt;/li>
&lt;li>&lt;code>sdb&lt;/code> 分了 1 个区，挂载到 &lt;code>/mnt&lt;/code>&lt;/li>
&lt;li>&lt;code>nvme0n1&lt;/code> 未分区、未挂载&lt;/li>
&lt;/ul>
&lt;p>常用参数：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 只看物理盘，不显示分区&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">lsblk -d -o NAME,SIZE,TYPE,MODEL
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 显示文件系统类型和 UUID&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">lsblk -f
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="2-df--h--查看已挂载分区的使用情况">2. df -h —— 查看已挂载分区的使用情况
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">df -h
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>输出示例：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Filesystem Size Used Avail Use% Mounted on
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">/dev/sda2 49G 15G 32G 32% /
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">/dev/sda1 1.0G 200M 800M 20% /boot
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">/dev/sdb1 100G 10G 90G 10% /mnt
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="3-fdisk--l--查看所有磁盘详情含未挂载">3. fdisk -l —— 查看所有磁盘详情（含未挂载）
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">sudo fdisk -l
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>需要 root 权限，能看到 sector 大小、磁盘标签类型等详细信息。&lt;/p>
&lt;h3 id="4-查看磁盘类型hdd--ssd--nvme">4. 查看磁盘类型（HDD / SSD / NVMe）
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 方法1：通过旋转状态判断（SSD 为 0）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">cat /sys/block/sda/queue/rotational
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 0 = SSD/NVMe, 1 = 机械硬盘&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 方法2：直接查看硬件信息&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">lsblk -d -o NAME,ROTA,TYPE,MODEL
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 方法3：NVMe 专用信息&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo nvme list
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h2 id="分区与格式化">分区与格式化
&lt;/h2>&lt;h3 id="对新磁盘进行分区">对新磁盘进行分区
&lt;/h3>&lt;p>以 &lt;code>/dev/sdb&lt;/code> 为例：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">sudo fdisk /dev/sdb
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>交互命令：&lt;/p>
&lt;ul>
&lt;li>&lt;code>n&lt;/code> —— 新建分区&lt;/li>
&lt;li>&lt;code>p&lt;/code> —— 主分区&lt;/li>
&lt;li>&lt;code>1&lt;/code> —— 分区号&lt;/li>
&lt;li>回车两次 —— 使用默认起始和结束扇区（占用整块盘）&lt;/li>
&lt;li>&lt;code>w&lt;/code> —— 写入并退出&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>大于 2TB 的磁盘请使用 &lt;code>gdisk&lt;/code> 或 &lt;code>parted&lt;/code>，fdisk 不支持 GPT 大分区。&lt;/p>
&lt;/blockquote>
&lt;h3 id="格式化分区">格式化分区
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># ext4（Linux 最常用）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo mkfs.ext4 /dev/sdb1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># xfs（适合大文件、高并发）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo mkfs.xfs /dev/sdb1
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h2 id="挂载磁盘">挂载磁盘
&lt;/h2>&lt;h3 id="临时挂载">临时挂载
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">sudo mkdir -p /mnt/data
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo mount /dev/sdb1 /mnt/data
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>重启后失效。&lt;/p>
&lt;h3 id="持久化挂载etcfstab">持久化挂载（/etc/fstab）
&lt;/h3>&lt;p>先获取分区的 UUID：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">lsblk -f /dev/sdb1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 或&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo blkid /dev/sdb1
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>编辑 fstab：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">sudo nano /etc/fstab
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>添加一行（&lt;strong>务必用 UUID，不要用设备名&lt;/strong>，防止重启后设备名变化导致挂错盘）：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">UUID=xxxxx-xxxxx-xxxxx /mnt/data ext4 defaults,noatime 0 2
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>字段说明：&lt;/p>
&lt;ul>
&lt;li>&lt;code>UUID=...&lt;/code> —— 分区的唯一标识&lt;/li>
&lt;li>&lt;code>/mnt/data&lt;/code> —— 挂载点&lt;/li>
&lt;li>&lt;code>ext4&lt;/code> —— 文件系统类型&lt;/li>
&lt;li>&lt;code>defaults,noatime&lt;/code> —— 挂载选项（noatime 减少不必要的写操作，延长 SSD 寿命）&lt;/li>
&lt;li>&lt;code>0&lt;/code> —— dump 备份标记（一般填 0）&lt;/li>
&lt;li>&lt;code>2&lt;/code> —— fsck 检查顺序（根目录填 1，其他填 2，不检查填 0）&lt;/li>
&lt;/ul>
&lt;p>验证配置是否正确：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">sudo mount -a
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>无报错即表示配置正确。如果配错了，重启后可能进不了系统，所以 &lt;strong>mount -a 验证这一步不能省&lt;/strong>。&lt;/p>
&lt;hr>
&lt;h2 id="场景把-docker-数据迁移到数据盘">场景：把 Docker 数据迁移到数据盘
&lt;/h2>&lt;p>这是最常见的需求之一。系统盘通常只有 50G，数据盘有几百 G。将 Docker 数据根目录改到 &lt;code>/mnt/docker_data&lt;/code>：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">sudo systemctl stop docker
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo systemctl stop docker.socket
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo mkdir -p /mnt/docker_data
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo rsync -aP /var/lib/docker/ /mnt/docker_data/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo nano /etc/docker/daemon.json
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>写入：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-json" data-lang="json">&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;data-root&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;/mnt/docker_data&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">sudo systemctl start docker
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>验证：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">docker info &lt;span class="p">|&lt;/span> grep &lt;span class="s2">&amp;#34;Docker Root Dir&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 应输出 /mnt/docker_data&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>更详细的方案（软链接、Compose 级挂载等）可参考 &lt;a class="link" href="https://www.zata.cc/p/docker%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/" >Docker 容器相关命令&lt;/a> 中的&amp;quot;数据卷自动挂载到 /mnt&amp;quot;一节。&lt;/p>
&lt;hr>
&lt;h2 id="常用命令速查表">常用命令速查表
&lt;/h2>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>需求&lt;/th>
&lt;th>命令&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>查看物理磁盘列表&lt;/td>
&lt;td>&lt;code>lsblk -d&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>查看分区 + 挂载点&lt;/td>
&lt;td>&lt;code>lsblk&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>查看已挂载磁盘使用率&lt;/td>
&lt;td>&lt;code>df -h&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>查看所有磁盘详情&lt;/td>
&lt;td>&lt;code>sudo fdisk -l&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>查看分区 UUID&lt;/td>
&lt;td>&lt;code>lsblk -f&lt;/code> 或 &lt;code>sudo blkid&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>判断 SSD/HDD&lt;/td>
&lt;td>&lt;code>cat /sys/block/sdX/queue/rotational&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>新建分区&lt;/td>
&lt;td>&lt;code>sudo fdisk /dev/sdX&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>格式化 ext4&lt;/td>
&lt;td>&lt;code>sudo mkfs.ext4 /dev/sdX1&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>临时挂载&lt;/td>
&lt;td>&lt;code>sudo mount /dev/sdX1 /mnt/xxx&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>验证 fstab&lt;/td>
&lt;td>&lt;code>sudo mount -a&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>查看目录占用空间&lt;/td>
&lt;td>&lt;code>du -sh /path&lt;/code>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;hr>
&lt;h2 id="注意事项">注意事项
&lt;/h2>&lt;ol>
&lt;li>&lt;strong>操作前确认设备名&lt;/strong>：&lt;code>sda&lt;/code>、&lt;code>sdb&lt;/code> 在不同机器、甚至同一机器重启后可能变化，写脚本或 fstab 时尽量用 UUID。&lt;/li>
&lt;li>&lt;strong>不要直接格式化已挂载的分区&lt;/strong>：先 &lt;code>umount&lt;/code>，或者在救援模式下操作。&lt;/li>
&lt;li>&lt;strong>云服务器的数据盘&lt;/strong>：首次使用需要先在控制台&amp;quot;挂载&amp;quot;到实例，然后在系统内分区格式化。阿里云、AWS、GCP 都是如此。&lt;/li>
&lt;li>&lt;strong>LVM 场景&lt;/strong>：某些云镜像默认使用 LVM，此时 &lt;code>lsblk&lt;/code> 看到的结构会更复杂（&lt;code>vg-xxx&lt;/code>、&lt;code>lv-xxx&lt;/code>），扩容操作需要用 &lt;code>lvextend&lt;/code> + &lt;code>resize2fs&lt;/code>。&lt;/li>
&lt;/ol></description></item><item><title>server_ops</title><link>https://www.zata.cc/p/server_ops/</link><pubDate>Tue, 24 Mar 2026 15:25:22 +0800</pubDate><guid>https://www.zata.cc/p/server_ops/</guid><description>&lt;img src="https://www.zata.cc/p/server_ops/images/index/index.png" alt="Featured image of post server_ops" />&lt;h1 id="注意事项">注意事项
&lt;/h1>&lt;h2 id="-血泪教训别再把数据库和业务代码塞进同一个-docker-容器了">🩸 血泪教训：别再把数据库和业务代码塞进同一个 Docker 容器了！
&lt;/h2>&lt;p>&lt;strong>前言：&lt;/strong>&lt;/p>
&lt;p>刚接触 Docker 的时候，我曾陷入一个深深的误区——认为“容器化部署”就等于把前端、后端、MySQL、Redis 等所有东西全都写进一个 docker-compose.yml 里，然后在服务器上敲一行 docker-compose up -d，看着整个世界“一键启动”，简直爽翻了。&lt;/p>
&lt;p>直到最近，我经历了一次惨痛的教训：业务代码引发的资源耗尽导致 MySQL 崩溃，随之而来的是极其痛苦的备份恢复，整个服务直接瘫痪。&lt;/p>
&lt;p>这次事故让我彻底顿悟：在生产环境中，绝不能把基础设施（Infra）和实际业务代码混在一起部署。&lt;/p>
&lt;hr>
&lt;p>&lt;strong>1. 为什么“一键打包”只适合玩具项目？&lt;/strong>&lt;/p>
&lt;p>把所有服务部署在同一台机器上，在本地开发或测试环境确实是银弹，但在生产环境却是一场定时炸弹。从“单机思维”走向“架构思维”，我们需要明白以下几个核心差异：&lt;/p>
&lt;p>🆚 &lt;strong>无状态（业务应用） vs 有状态（数据库）&lt;/strong>&lt;/p>
&lt;p>你的后端 API 是“无状态”的，随时可以重启、销毁、水平扩展，崩了拉起一个新的立刻就能用。而数据库（MySQL/PostgreSQL）是“有状态”的，里面存着身家性命。把它们绑在一起，无异于让脆弱的消耗品和贵重的传家宝放在同一个易碎的盒子里。&lt;/p>
&lt;p>💣 &lt;strong>恐怖的“爆炸半径”（Blast Radius）&lt;/strong>&lt;/p>
&lt;p>如果业务代码出现 Bug（比如内存泄漏），或者遭遇突发流量，服务器的 CPU 和内存会被瞬间吃光。这时 Linux 的 OOM Killer 就会无情启动，强制杀掉占用内存大的进程——通常数据库就是那个“冤大头”。业务代码的锅，导致数据库崩溃，进而导致全站瘫痪。&lt;/p>
&lt;p>此外，业务日志和数据库争抢磁盘 IOPS，也会让数据库性能大打折扣。&lt;/p>
&lt;p>💡 &lt;strong>架构顿悟：让计算归计算，存储归存储。&lt;/strong> 将业务应用和数据库分别部署在不同的服务器上，进行物理隔离，是迈向高可用架构的第一步。&lt;/p>
&lt;hr>
&lt;p>&lt;strong>2. 妥协与选择：自建 Docker 版 PostgreSQL&lt;/strong>&lt;/p>
&lt;p>明确了分离部署的原则后，我面临了一个新问题：我手头的云厂商 RDS 只有 MySQL，但我目前的业务非常想用 PostgreSQL。&lt;/p>
&lt;p>云厂商的高级托管服务（如 AWS RDS 或 Serverless 方案如 Neon/Supabase）当然是首选，但如果受限于预算或现有资源，单独买一台服务器，用 Docker 跑 PostgreSQL 依然是一个极具性价比且成熟的方案。&lt;/p>
&lt;p>很多人担心 Docker 部署数据库会有性能损耗。但在中小规模业务面前，那 2%~5% 的网络/IO损耗完全可以忽略不计。相反，只要坚持了**“物理分离”**的原则，Docker 带来的环境一致性和迁移便利性绝对物超所值。&lt;/p>
&lt;hr>
&lt;p>&lt;strong>3. 生产级 Docker PostgreSQL 部署指南&lt;/strong>&lt;/p>
&lt;p>既然成为了自己的 DBA，就不能像本地开发那样随意。以下是我整理的部署在独立数据库服务器上的生产级 docker-compose.yml 模板：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">version&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s1">&amp;#39;3.8&amp;#39;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">services&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">postgres&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">image&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">postgres:16-alpine &lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c"># 推荐指定明确的版本号，Alpine体积更小&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">container_name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">postgres_prod&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">restart&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">always &lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c"># 宿主机重启时自动拉起&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">environment&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">POSTGRES_USER&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">myuser &lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c"># ⚠️ 不要用默认的 postgres 作为日常用户名&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">POSTGRES_PASSWORD&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">MyStrongPassword_123! &lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">POSTGRES_DB&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">mydb &lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">TZ&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">Asia/Shanghai &lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">ports&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="c"># ⚠️ 警告：千万不要写 &amp;#34;5432:5432&amp;#34; 直接暴露公网！&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="s2">&amp;#34;5432:5432&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">volumes&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="c"># 核心！必须把数据挂载到宿主机，绝对不能留在容器内&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="l">/data/postgres_data/data:/var/lib/postgresql/data&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="c"># 挂载一个备份目录，方便宿主机的定时任务导出数据&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="l">/data/postgres_data/backups:/backups&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">command&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="c"># 【性能调优】Docker PG默认 shared_buffers 极小 (128MB)&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="c"># 推荐把 shared_buffers 设置为这台独立服务器总物理内存的 25% (假设分配1GB)&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="s2">&amp;#34;postgres&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="s2">&amp;#34;-c&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="s2">&amp;#34;shared_buffers=1GB&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="s2">&amp;#34;-c&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="s2">&amp;#34;max_connections=200&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;p>&lt;strong>4. 守住底线：数据库保命的“三道防线”&lt;/strong>&lt;/p>
&lt;p>脱离了云数据库 RDS 的温室，自建 Docker 数据库必须自己做好以下三道保险，否则之前的悲剧迟早重演：&lt;/p>
&lt;p>🛡️ &lt;strong>第一道防线：防勒索（网络隔离）&lt;/strong>&lt;/p>
&lt;p>自建数据库最容易踩的坑就是被勒索软件删库要比特币。&lt;/p>
&lt;p>绝对不要把 5432 端口暴露在公网上！&lt;/p>
&lt;p>去云服务器控制台的安全组（防火墙）设置中，配置 5432 端口的入站规则：仅允许你业务服务器的内网 IP 访问。&lt;/p>
&lt;p>🚀 &lt;strong>第二道防线：突破默认限制（性能调优）&lt;/strong>&lt;/p>
&lt;p>不要抱怨 Docker 跑 PG 慢，往往是因为没改配置。PG 默认的 shared_buffers 非常保守（128MB），会导致疯狂读写硬盘。如果你这台专用的 DB 服务器有 4G 内存，直接在 docker command 里设为 1GB（25% 原则），性能会有质的飞跃。&lt;/p>
&lt;p>💾 &lt;strong>第三道防线：自动化异地备份（保命符）&lt;/strong>&lt;/p>
&lt;p>由于没了 RDS 的自动备份，我们必须手动写 Crontab 脚本每天导出，并且一定要传到异地（如对象存储 OSS/S3）。&lt;/p>
&lt;p>一个简单的 Bash 备份脚本参考 (backup.sh)：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#!/bin/bash
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">&lt;/span>&lt;span class="nv">DATE&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="k">$(&lt;/span>date +%Y-%m-%d&lt;span class="k">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">BACKUP_DIR&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;/data/postgres_data/backups&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 1. 容器内执行 pg_dump 导出&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker &lt;span class="nb">exec&lt;/span> postgres_prod pg_dump -U myuser -d mydb -F c -f /backups/mydb_&lt;span class="nv">$DATE&lt;/span>.dump
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 2. 删除7天前的旧备份（防止撑爆硬盘）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">find &lt;span class="nv">$BACKUP_DIR&lt;/span> -name &lt;span class="s2">&amp;#34;*.dump&amp;#34;&lt;/span> -type f -mtime +7 -exec rm -f &lt;span class="o">{}&lt;/span> &lt;span class="se">\;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 3. 【关键】上传到对象存储或另一台机器&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># ossutil cp $BACKUP_DIR/mydb_$DATE.dump oss://my-backup-bucket/&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>通过 &lt;code>crontab -e&lt;/code> 设定每天凌晨 3 点执行：&lt;code>0 3 * * * /bin/bash /data/postgres_data/backup.sh&lt;/code>&lt;/p>
&lt;hr>
&lt;p>&lt;strong>写在最后&lt;/strong>&lt;/p>
&lt;p>从“把所有东西塞进一个容器里一键启动”，到“将业务逻辑与基础设施拆分并做好隔离与备份”，这是每一个开发者向后端架构师蜕变的必经之路。&lt;/p>
&lt;p>“性能损失”从来不是自建数据库的痛点，“运维疏忽”才是。只要严格遵守分离部署 + 挂载卷 + 限制公网访问 + 定时异地备份，你用 Docker 搭建的 PostgreSQL，足以平稳支撑你的业务走过漫长的初创和成长期。&lt;/p>
&lt;hr>
&lt;p>&lt;strong>5. 用户权限管理：创建只读用户&lt;/strong>&lt;/p>
&lt;p>在实际生产环境中，我们经常需要给第三方工具或只读分析需求提供数据库访问，但绝不能直接暴露拥有写权限的超级用户。&lt;/p>
&lt;p>以下是在 PostgreSQL 中创建一个只读用户的完整命令：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-sql" data-lang="sql">&lt;span class="line">&lt;span class="cl">&lt;span class="c1">-- 1. 创建只读用户（替换密码为强密码）
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="k">CREATE&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">USER&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">readonly_vanta&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">WITH&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">PASSWORD&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s1">&amp;#39;Vanta123456!&amp;#39;&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="c1">-- 2. 授予数据库连接权限
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="k">GRANT&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">CONNECT&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">ON&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">DATABASE&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Vanta&amp;#34;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">TO&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">readonly_vanta&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="c1">-- 3. 授予 schema 的使用权限
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="k">GRANT&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">USAGE&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">ON&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">SCHEMA&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">public&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">TO&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">readonly_vanta&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="c1">-- 4. 授予现有所有表的查询权限
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="k">GRANT&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">SELECT&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">ON&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">ALL&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">TABLES&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">IN&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">SCHEMA&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">public&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">TO&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">readonly_vanta&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="c1">-- 5. 【关键】设置默认权限，使该用户自动拥有未来新建表的查询权
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="k">ALTER&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">DEFAULT&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">PRIVILEGES&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">IN&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">SCHEMA&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">public&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">GRANT&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">SELECT&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">ON&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">TABLES&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">TO&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">readonly_vanta&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;blockquote>
&lt;p>💡 &lt;strong>注意事项&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>创建用户后，务必在安全组中限制该用户的连接来源 IP，避免公网直接暴露。&lt;/li>
&lt;li>如果数据库已有多个 schema，需要针对每个 schema 重复执行 &lt;code>GRANT USAGE&lt;/code> 和 &lt;code>GRANT SELECT&lt;/code>。&lt;/li>
&lt;li>如需回收权限，可使用 &lt;code>REVOKE&lt;/code> 命令或直接用 &lt;code>DROP USER readonly_vanta;&lt;/code> 删除用户。&lt;/li>
&lt;/ul>
&lt;/blockquote></description></item><item><title>阿里云服务器</title><link>https://www.zata.cc/p/%E9%98%BF%E9%87%8C%E4%BA%91%E6%9C%8D%E5%8A%A1%E5%99%A8/</link><pubDate>Sun, 22 Mar 2026 22:35:40 +0800</pubDate><guid>https://www.zata.cc/p/%E9%98%BF%E9%87%8C%E4%BA%91%E6%9C%8D%E5%8A%A1%E5%99%A8/</guid><description>&lt;img src="https://www.zata.cc/p/%E9%98%BF%E9%87%8C%E4%BA%91%E6%9C%8D%E5%8A%A1%E5%99%A8/images/index/index.png" alt="Featured image of post 阿里云服务器" />&lt;h1 id="注意事项">注意事项
&lt;/h1>&lt;ul>
&lt;li>我碰到过一次，下面新加的防火墙策略和上面的策略冲突，导致下面的失效，如果下面的策略没有问题，就不要加上面的策略&lt;/li>
&lt;/ul></description></item><item><title>服务器安全-server Security</title><link>https://www.zata.cc/p/%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%AE%89%E5%85%A8-server-security/</link><pubDate>Mon, 09 Mar 2026 13:54:43 +0800</pubDate><guid>https://www.zata.cc/p/%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%AE%89%E5%85%A8-server-security/</guid><description>&lt;img src="https://www.zata.cc/p/%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%AE%89%E5%85%A8-server-security/images/index/index.png" alt="Featured image of post 服务器安全-server Security" />&lt;p>这份教程的基础架构非常扎实，逻辑清晰。作为一个有追求的 AI 协作伙伴，我为你进行了&lt;strong>深度改写&lt;/strong>。&lt;/p>
&lt;p>这次改写的核心提升在于：&lt;/p>
&lt;ol>
&lt;li>&lt;strong>交互感&lt;/strong>：将枯燥的步骤转化为“闯关”体验。&lt;/li>
&lt;li>&lt;strong>技术严谨性&lt;/strong>：修正了 Ubuntu 系统中 &lt;code>sshd_config.d&lt;/code> 覆盖配置的常见坑点。&lt;/li>
&lt;li>&lt;strong>可读性&lt;/strong>：使用更清晰的 Markdown 布局和视觉引导。&lt;/li>
&lt;/ol>
&lt;hr>
&lt;h1 id="-linux-服务器金钟罩15-分钟全手工安全加固指南">🛡️ Linux 服务器金钟罩：15 分钟全手工安全加固指南
&lt;/h1>&lt;blockquote>
&lt;p>&lt;strong>写在前面：&lt;/strong> 互联网上每秒有数万个脚本在扫描公网 IP。如果你的服务器还在用默认端口、弱密码、开着 Root 登录，那不是“会不会被黑”的问题，而是“什么时候被黑”的问题。&lt;/p>
&lt;/blockquote>
&lt;h3 id="-终极保命准则">🚨 终极保命准则
&lt;/h3>&lt;p>&lt;strong>操作期间，千万不要断开当前的 SSH 窗口！&lt;/strong>
每完成一步加固，务必&lt;strong>新开一个终端窗口&lt;/strong>测试能否登录。确认无误后，再继续下一步。&lt;/p>
&lt;hr>
&lt;h2 id="第一阶段深度体检寻找破绽">第一阶段：深度体检（寻找破绽）
&lt;/h2>&lt;p>我们先通过一个自检脚本，看看你的服务器在黑客眼中长什么样。&lt;/p>
&lt;ol>
&lt;li>&lt;strong>创建检测脚本&lt;/strong>：&lt;code>nano security_check.sh&lt;/code>&lt;/li>
&lt;li>&lt;strong>填入代码&lt;/strong>：&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#!/bin/bash
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 颜色定义&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">RED&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;\033[0;31m&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">GREEN&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;\033[0;32m&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">YELLOW&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;\033[1;33m&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">NC&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;\033[0m&amp;#39;&lt;/span> &lt;span class="c1"># 恢复默认颜色&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">echo&lt;/span> -e &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nv">YELLOW&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">==================================================&lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nv">NC&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">echo&lt;/span> -e &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nv">YELLOW&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2"> 服务器基础安全配置自检脚本 (只读模式) &lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nv">NC&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">echo&lt;/span> -e &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nv">YELLOW&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">==================================================&lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nv">NC&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 检查是否以 root 权限运行&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">if&lt;/span> &lt;span class="o">[&lt;/span> &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="nv">$EUID&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span> -ne &lt;span class="m">0&lt;/span> &lt;span class="o">]&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="k">then&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">echo&lt;/span> -e &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nv">RED&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">[!] 请使用 sudo 运行此脚本 (例如: sudo bash security_check.sh)&lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nv">NC&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">exit&lt;/span> &lt;span class="m">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">fi&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">echo&lt;/span> -e &lt;span class="s2">&amp;#34;\n&lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nv">YELLOW&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">[1] 正在检查 SSH 安全配置...&lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nv">NC&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">SSH_PORT&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="k">$(&lt;/span>sshd -T &lt;span class="p">|&lt;/span> grep -w &lt;span class="s2">&amp;#34;^port&amp;#34;&lt;/span> &lt;span class="p">|&lt;/span> awk &lt;span class="s1">&amp;#39;{print $2}&amp;#39;&lt;/span>&lt;span class="k">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">SSH_ROOT_LOGIN&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="k">$(&lt;/span>sshd -T &lt;span class="p">|&lt;/span> grep -w &lt;span class="s2">&amp;#34;^permitrootlogin&amp;#34;&lt;/span> &lt;span class="p">|&lt;/span> awk &lt;span class="s1">&amp;#39;{print $2}&amp;#39;&lt;/span>&lt;span class="k">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">SSH_PASS_AUTH&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="k">$(&lt;/span>sshd -T &lt;span class="p">|&lt;/span> grep -w &lt;span class="s2">&amp;#34;^passwordauthentication&amp;#34;&lt;/span> &lt;span class="p">|&lt;/span> awk &lt;span class="s1">&amp;#39;{print $2}&amp;#39;&lt;/span>&lt;span class="k">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">if&lt;/span> &lt;span class="o">[&lt;/span> &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="nv">$SSH_PORT&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s2">&amp;#34;22&amp;#34;&lt;/span> &lt;span class="o">]&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="k">then&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">echo&lt;/span> -e &lt;span class="s2">&amp;#34; 🔴 SSH 端口: &lt;/span>&lt;span class="nv">$SSH_PORT&lt;/span>&lt;span class="s2"> (默认端口, 易被扫描)&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">else&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">echo&lt;/span> -e &lt;span class="s2">&amp;#34; 🟢 SSH 端口: &lt;/span>&lt;span class="nv">$SSH_PORT&lt;/span>&lt;span class="s2"> (已修改为非标准端口)&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">fi&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">if&lt;/span> &lt;span class="o">[&lt;/span> &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="nv">$SSH_ROOT_LOGIN&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s2">&amp;#34;yes&amp;#34;&lt;/span> &lt;span class="o">]&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="k">then&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">echo&lt;/span> -e &lt;span class="s2">&amp;#34; 🔴 Root 直接登录: 允许 (极高风险, 容易被爆破 root 密码)&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">else&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">echo&lt;/span> -e &lt;span class="s2">&amp;#34; 🟢 Root 直接登录: 禁止&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">fi&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">if&lt;/span> &lt;span class="o">[&lt;/span> &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="nv">$SSH_PASS_AUTH&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s2">&amp;#34;yes&amp;#34;&lt;/span> &lt;span class="o">]&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="k">then&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">echo&lt;/span> -e &lt;span class="s2">&amp;#34; 🔴 密码登录: 允许 (高风险, 建议改用密钥登录)&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">else&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">echo&lt;/span> -e &lt;span class="s2">&amp;#34; 🟢 密码登录: 禁止 (安全, 已启用纯密钥登录)&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">fi&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">echo&lt;/span> -e &lt;span class="s2">&amp;#34;\n&lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nv">YELLOW&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">[2] 正在检查防火墙状态...&lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nv">NC&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">if&lt;/span> &lt;span class="nb">command&lt;/span> -v ufw &amp;gt; /dev/null 2&amp;gt;&lt;span class="p">&amp;amp;&lt;/span>1&lt;span class="p">;&lt;/span> &lt;span class="k">then&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">UFW_STATUS&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="k">$(&lt;/span>ufw status &lt;span class="p">|&lt;/span> grep -i &lt;span class="s2">&amp;#34;Status: active\|状态： 激活&amp;#34;&lt;/span>&lt;span class="k">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="o">[&lt;/span> -n &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="nv">$UFW_STATUS&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span> &lt;span class="o">]&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="k">then&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">echo&lt;/span> -e &lt;span class="s2">&amp;#34; 🟢 防火墙 (UFW): 已启用&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">else&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">echo&lt;/span> -e &lt;span class="s2">&amp;#34; 🔴 防火墙 (UFW): 未启用!&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">fi&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">elif&lt;/span> &lt;span class="nb">command&lt;/span> -v firewall-cmd &amp;gt; /dev/null 2&amp;gt;&lt;span class="p">&amp;amp;&lt;/span>1&lt;span class="p">;&lt;/span> &lt;span class="k">then&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">FW_STATUS&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="k">$(&lt;/span>firewall-cmd --state 2&amp;gt;/dev/null&lt;span class="k">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="o">[&lt;/span> &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="nv">$FW_STATUS&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s2">&amp;#34;running&amp;#34;&lt;/span> &lt;span class="o">]&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="k">then&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">echo&lt;/span> -e &lt;span class="s2">&amp;#34; 🟢 防火墙 (Firewalld): 已启用&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">else&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">echo&lt;/span> -e &lt;span class="s2">&amp;#34; 🔴 防火墙 (Firewalld): 未启用!&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">fi&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">else&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">echo&lt;/span> -e &lt;span class="s2">&amp;#34; 🔴 未检测到 UFW 或 Firewalld 防火墙工具!&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">fi&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">echo&lt;/span> -e &lt;span class="s2">&amp;#34;\n&lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nv">YELLOW&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">[3] 正在检查防爆破工具 (Fail2ban)...&lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nv">NC&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">if&lt;/span> systemctl is-active --quiet fail2ban&lt;span class="p">;&lt;/span> &lt;span class="k">then&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">echo&lt;/span> -e &lt;span class="s2">&amp;#34; 🟢 Fail2ban: 正在运行 (防爆破保护中)&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">else&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">echo&lt;/span> -e &lt;span class="s2">&amp;#34; 🔴 Fail2ban: 未安装或未运行!&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">fi&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">echo&lt;/span> -e &lt;span class="s2">&amp;#34;\n&lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nv">YELLOW&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">[4] 正在检查对外暴露的端口 (仅列出监听状态的 TCP 端口)...&lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nv">NC&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">echo&lt;/span> -e &lt;span class="s2">&amp;#34;请检查以下端口是否都是你主动开放的？（数据库如3306不应暴露在0.0.0.0）&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">netstat_out&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="k">$(&lt;/span>ss -tulnp &lt;span class="p">|&lt;/span> grep tcp &lt;span class="p">|&lt;/span> grep LISTEN&lt;span class="k">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">if&lt;/span> &lt;span class="o">[&lt;/span> -z &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="nv">$netstat_out&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span> &lt;span class="o">]&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="k">then&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">echo&lt;/span> -e &lt;span class="s2">&amp;#34; 🟡 未检测到监听中的 TCP 端口&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">else&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ss -tulnp &lt;span class="p">|&lt;/span> grep tcp &lt;span class="p">|&lt;/span> grep LISTEN &lt;span class="p">|&lt;/span> awk &lt;span class="s1">&amp;#39;{print &amp;#34; - 协议:&amp;#34;$1&amp;#34; | 监听地址:&amp;#34;$5&amp;#34; | 进程:&amp;#34;$7}&amp;#39;&lt;/span> &lt;span class="p">|&lt;/span> sed &lt;span class="s1">&amp;#39;s/users:((&amp;#34;//g&amp;#39;&lt;/span> &lt;span class="p">|&lt;/span> sed &lt;span class="s1">&amp;#39;s/&amp;#34;.*//g&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">fi&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">echo&lt;/span> -e &lt;span class="s2">&amp;#34;\n&lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nv">YELLOW&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">[5] 正在检查特权用户...&lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nv">NC&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">SUPER_USERS&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="k">$(&lt;/span>awk -F: &lt;span class="s1">&amp;#39;($3 == &amp;#34;0&amp;#34; &amp;amp;&amp;amp; $1 != &amp;#34;root&amp;#34;) {print $1}&amp;#39;&lt;/span> /etc/passwd&lt;span class="k">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">if&lt;/span> &lt;span class="o">[&lt;/span> -z &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="nv">$SUPER_USERS&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span> &lt;span class="o">]&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="k">then&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">echo&lt;/span> -e &lt;span class="s2">&amp;#34; 🟢 UID为0的用户: 只有 root (正常)&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">else&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">echo&lt;/span> -e &lt;span class="s2">&amp;#34; 🔴 警告! 发现其他具有最高权限的用户: &lt;/span>&lt;span class="nv">$SUPER_USERS&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">fi&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">echo&lt;/span> -e &lt;span class="s2">&amp;#34;\n&lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nv">YELLOW&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">==================================================&lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nv">NC&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">echo&lt;/span> -e &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nv">YELLOW&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2"> 检查完成！请根据 🔴红色的警告项 进行下一步修改。 &lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nv">NC&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">echo&lt;/span> -e &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nv">YELLOW&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">==================================================&lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nv">NC&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="3">
&lt;li>&lt;strong>赋予权限并执行&lt;/strong>：&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">chmod +x security_check.sh
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo ./security_check.sh
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>你的目标：&lt;/strong> 消除所有的 🔴，迎接满屏的 🟢。&lt;/p>
&lt;hr>
&lt;h2 id="第二阶段五步锁死安全之门">第二阶段：五步锁死安全之门
&lt;/h2>&lt;h3 id="第-1-步建立安全通道创建-sudo-用户与密钥">第 1 步：建立“安全通道”（创建 sudo 用户与密钥）
&lt;/h3>&lt;p>&lt;strong>严禁&lt;/strong>直接在 Root 账户下裸奔。&lt;/p>
&lt;ol>
&lt;li>&lt;strong>创建新管理账号&lt;/strong>：&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">adduser armoradmin &lt;span class="c1"># 名字随你起&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">usermod -aG sudo armoradmin
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="2">
&lt;li>&lt;strong>注入 SSH 密钥&lt;/strong>（在你的&lt;strong>本地电脑&lt;/strong>执行）：&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">ssh-keygen -t ed25519 -C &lt;span class="s2">&amp;#34;server_key&amp;#34;&lt;/span> &lt;span class="c1"># 推荐 ed25519 算法，更短更安全&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ssh-copy-id -i ~/.ssh/id_ed25519.pub armoradmin@服务器IP
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;em>测试：&lt;code>ssh armoradmin@服务器IP&lt;/code>，无需密码直接进入即为成功。&lt;/em>&lt;/p>
&lt;hr>
&lt;h3 id="第-2-步斩断后门收紧-ssh-配置">第 2 步：斩断“后门”（收紧 SSH 配置）
&lt;/h3>&lt;p>这是最关键的一步。我们要让密码爆破彻底失效。&lt;/p>
&lt;ol>
&lt;li>&lt;strong>注意 Ubuntu 特有的坑&lt;/strong>：
检查 &lt;code>/etc/ssh/sshd_config.d/&lt;/code> 下是否有 &lt;code>.conf&lt;/code> 文件。如果有，里面的配置会优先于主配置。建议直接清理或同步修改。&lt;/li>
&lt;li>&lt;strong>修改主配置&lt;/strong>：&lt;code>sudo nano /etc/ssh/sshd_config&lt;/code>&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl"># 核心三要素
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">PermitRootLogin no # 禁止 Root 登录
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">PasswordAuthentication no # 禁止密码登录（关键！）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">KbdInteractiveAuthentication no # 彻底切断交互式认证
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"># 进阶项
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Port 22222 # 修改默认端口（记得在防火墙放行新端口！）
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;em>注意&lt;/em> 如果 /etc/ssh/sshd_config.d/ 目录下有任何以 .conf 结尾的文件（比如云厂商预设的配置），它们的内容会覆盖掉你在主配置文件里的修改。&lt;/p>
&lt;ul>
&lt;li>
&lt;p>检查方法：ls /etc/ssh/sshd_config.d/&lt;/p>
&lt;/li>
&lt;li>
&lt;p>检查密码登录是否已禁用：sshd -T | grep passwordauthentication&lt;/p>
&lt;/li>
&lt;/ul>
&lt;ol start="3">
&lt;li>&lt;strong>检查并重启&lt;/strong>：&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">sudo sshd -t &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> sudo systemctl restart ssh
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h3 id="第-3-步架起护城河ufw-防火墙">第 3 步：架起“护城河”（UFW 防火墙）
&lt;/h3>&lt;p>别让你的 Docker 容器或数据库在公网“裸奔”。&lt;/p>
&lt;ol>
&lt;li>&lt;strong>初始化策略&lt;/strong>：&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">sudo ufw default deny incoming &lt;span class="c1"># 默认拒绝所有入站&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo ufw default allow outgoing &lt;span class="c1"># 默认允许所有出站&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="2">
&lt;li>&lt;strong>精准开门&lt;/strong>：&lt;/li>
&lt;/ol>
&lt;p>关于docker swarm&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 允许 B 服务器访问我的 Swarm 端口&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo ufw allow from 2.2.2.2 to any proto tcp port 2377,7946
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo ufw allow from 2.2.2.2 to any proto udp port 7946,4789
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 允许 C 服务器访问我的 Swarm 端口&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo ufw allow from 3.3.3.3 to any proto tcp port 2377,7946
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo ufw allow from 3.3.3.3 to any proto udp port 7946,4789
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">sudo ufw allow 22222/tcp &lt;span class="c1"># 换成你修改后的 SSH 端口！&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo ufw allow 80/tcp &lt;span class="c1"># HTTP&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo ufw allow 443/tcp &lt;span class="c1"># HTTPS&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="3">
&lt;li>&lt;strong>合闸开启&lt;/strong>：&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">sudo ufw &lt;span class="nb">enable&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h3 id="第-4-步部署自动保安fail2ban">第 4 步：部署“自动保安”（Fail2ban）
&lt;/h3>&lt;p>Fail2ban 会自动关押那些尝试试探你端口的 IP。&lt;/p>
&lt;ol>
&lt;li>&lt;strong>安装并启动&lt;/strong>：&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">sudo apt install fail2ban -y
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo systemctl &lt;span class="nb">enable&lt;/span> --now fail2ban
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="2">
&lt;li>&lt;strong>默认保护&lt;/strong>：它会自动保护 SSH。你可以通过 &lt;code>sudo fail2ban-client status sshd&lt;/code> 查看又有多少倒霉蛋被你关进了“小黑屋”。&lt;/li>
&lt;/ol>
&lt;hr>
&lt;h3 id="第-5-步内鬼肃清清理特权用户与危险监听">第 5 步：内鬼肃清（清理特权用户与危险监听）
&lt;/h3>&lt;ol>
&lt;li>&lt;strong>监听自查&lt;/strong>：运行 &lt;code>ss -tulnp&lt;/code>。如果看到 &lt;code>0.0.0.0:3306&lt;/code>，请立即去数据库配置里把 &lt;code>bind-address&lt;/code> 改为 &lt;code>127.0.0.1&lt;/code>。&lt;/li>
&lt;li>&lt;strong>权限自查&lt;/strong>：如果脚本提示有除 root 以外的 UID 0 用户，&lt;strong>别犹豫，你的系统大概率已经“不干净”了&lt;/strong>。&lt;/li>
&lt;/ol>
&lt;hr>
&lt;h2 id="第三阶段最后验收">第三阶段：最后验收
&lt;/h2>&lt;p>现在，再次运行你的自检脚本：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">sudo ./security_check.sh
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h3 id="-维护锦囊">💡 维护锦囊
&lt;/h3>&lt;ul>
&lt;li>&lt;strong>定期更新&lt;/strong>：养成每周 &lt;code>sudo apt update &amp;amp;&amp;amp; sudo apt upgrade&lt;/code> 的好习惯。&lt;/li>
&lt;li>&lt;strong>监控日志&lt;/strong>：偶尔看看 &lt;code>/var/log/auth.log&lt;/code>，你会惊讶于外面的世界有多疯狂。&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>加固完成了！需要我帮你写一个自动导出安全日志的定时任务脚本吗？&lt;/strong>&lt;/p></description></item><item><title>1核1G云服务器“绝地求生”：如何把Ubuntu的内存从剩200M优化到能跑服务</title><link>https://www.zata.cc/p/1%E6%A0%B81g%E4%BA%91%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%BB%9D%E5%9C%B0%E6%B1%82%E7%94%9F%E5%A6%82%E4%BD%95%E6%8A%8Aubuntu%E7%9A%84%E5%86%85%E5%AD%98%E4%BB%8E%E5%89%A9200m%E4%BC%98%E5%8C%96%E5%88%B0%E8%83%BD%E8%B7%91%E6%9C%8D%E5%8A%A1/</link><pubDate>Sun, 22 Feb 2026 20:11:29 +0800</pubDate><guid>https://www.zata.cc/p/1%E6%A0%B81g%E4%BA%91%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%BB%9D%E5%9C%B0%E6%B1%82%E7%94%9F%E5%A6%82%E4%BD%95%E6%8A%8Aubuntu%E7%9A%84%E5%86%85%E5%AD%98%E4%BB%8E%E5%89%A9200m%E4%BC%98%E5%8C%96%E5%88%B0%E8%83%BD%E8%B7%91%E6%9C%8D%E5%8A%A1/</guid><description>&lt;img src="https://www.zata.cc/p/1%E6%A0%B81g%E4%BA%91%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%BB%9D%E5%9C%B0%E6%B1%82%E7%94%9F%E5%A6%82%E4%BD%95%E6%8A%8Aubuntu%E7%9A%84%E5%86%85%E5%AD%98%E4%BB%8E%E5%89%A9200m%E4%BC%98%E5%8C%96%E5%88%B0%E8%83%BD%E8%B7%91%E6%9C%8D%E5%8A%A1/images/index/index.png" alt="Featured image of post 1核1G云服务器“绝地求生”：如何把Ubuntu的内存从剩200M优化到能跑服务" />&lt;h1 id="实战-1核1g云服务器绝地求生如何把ubuntu的内存从剩200m优化到能跑服务">[实战] 1核1G云服务器“绝地求生”：如何把Ubuntu的内存从剩200M优化到能跑服务？
&lt;/h1>&lt;p>&lt;strong>【前言：年轻人的第一台云服务器】&lt;/strong>&lt;/p>
&lt;p>趁着云厂商搞活动，你是不是也入手了一台 &lt;strong>1核 1G&lt;/strong> 的“入门级”云服务器？&lt;/p>
&lt;p>你满怀期待地装上了最新的 Ubuntu LTS，准备大干一场（建博客、跑脚本、练Linux）。结果刚连上 SSH，随手敲了一个 &lt;code>free -h&lt;/code>，当场心凉了一半：&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>Total: 980Mi | Used: 700Mi | Free: 200Mi&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;p>还没跑任何业务，系统纯待机就吃掉了近 800M 内存，只剩下 200M 还能干嘛？跑个 &lt;code>apt update&lt;/code> 都怕卡死，更别提装 MySQL 了。&lt;/p>
&lt;p>别急着重装系统，在 1G 内存的极限环境下，我们需要掌握一些 &lt;strong>Linux 精细化运维&lt;/strong> 的技巧。本文将手把手教你如何榨干这台服务器的每一滴性能。&lt;/p>
&lt;hr>
&lt;p>&lt;strong>【第一阶段：ICU 急救（配置 Swap）】&lt;/strong>&lt;/p>
&lt;p>剩下 200M 内存最大的风险是什么？是 &lt;strong>OOM (Out Of Memory)&lt;/strong>。一旦内存耗尽，Linux 内核会启动 OOM Killer，随机杀掉占用内存最高的进程（通常就是你的数据库或 Web 服务）。&lt;/p>
&lt;p>&lt;strong>Swap（虚拟内存）&lt;/strong> 是小内存服务器的救命稻草。虽然硬盘读写比内存慢几个数量级，但它能保证系统“卡顿”而不是“宕机”。&lt;/p>
&lt;p>&lt;strong>操作步骤：&lt;/strong>&lt;/p>
&lt;ol>
&lt;li>&lt;strong>创建 2G 的 Swap 文件&lt;/strong>（一般设置为物理内存的 1-2 倍）：&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">sudo fallocate -l 2G /swapfile
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="2">
&lt;li>&lt;strong>设置权限并格式化&lt;/strong>：&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">sudo chmod &lt;span class="m">600&lt;/span> /swapfile
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo mkswap /swapfile
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="3">
&lt;li>&lt;strong>启用 Swap&lt;/strong>：&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">sudo swapon /swapfile
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="4">
&lt;li>&lt;strong>设置开机自启&lt;/strong>（重要，否则重启失效）：&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="nb">echo&lt;/span> &lt;span class="s1">&amp;#39;/swapfile none swap sw 0 0&amp;#39;&lt;/span> &lt;span class="p">|&lt;/span> sudo tee -a /etc/fstab
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="5">
&lt;li>&lt;strong>调整 Swappiness（使用倾向）&lt;/strong>：
默认值是 60，意味着内存用到 40% 就开始用 Swap。对于 1G 内存，我们希望尽量用物理内存，满了再用 Swap，防止频繁 IO 卡死系统。建议设为 10。&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">sudo sysctl vm.swappiness&lt;span class="o">=&lt;/span>&lt;span class="m">10&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>永久生效（写入配置文件）：&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="nb">echo&lt;/span> &lt;span class="s1">&amp;#39;vm.swappiness=10&amp;#39;&lt;/span> &lt;span class="p">|&lt;/span> sudo tee -a /etc/sysctl.conf
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;blockquote>
&lt;p>&lt;strong>效果：&lt;/strong> 现在你拥有了 1G 内存 + 2G 虚拟内存，至少不用担心程序一启动就暴毙了。&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;p>&lt;strong>【第二阶段：卸载“内存刺客” Snapd】&lt;/strong>&lt;/p>
&lt;p>如果你用的是 Ubuntu，那么内存占用高的罪魁祸首通常是 &lt;strong>Snap&lt;/strong>。&lt;/p>
&lt;p>Ubuntu 官方为了推行 Snap 包管理，默认在后台运行 &lt;code>snapd&lt;/code> 服务，并挂载了一堆 loop device。这在 16G 内存的电脑上没感觉，但在 1G 的服务器上简直是“吸血鬼”。&lt;/p>
&lt;p>&lt;strong>优化方案：斩草除根&lt;/strong>&lt;/p>
&lt;p>如果你不强依赖 snap 安装软件（建议服务器端全用 apt 或 docker），请直接卸载它。&lt;/p>
&lt;p>&lt;strong>第一步：停止服务&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">sudo systemctl stop snapd
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo systemctl disable snapd
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>第二步：彻底卸载（耗时稍长，耐心等待）&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">sudo apt autoremove --purge snapd -y
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>第三步：阻止它自动回来（可选）&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">sudo apt-mark hold snapd
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;blockquote>
&lt;p>&lt;strong>效果：&lt;/strong> 这一步通常能释放 &lt;strong>50M - 100M&lt;/strong> 的纯物理内存，且 &lt;code>df -h&lt;/code> 列表瞬间清爽了。&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;p>&lt;strong>【第三阶段：关闭非必要系统服务】&lt;/strong>&lt;/p>
&lt;p>Ubuntu Server 为了通用性，开了很多你可能根本用不上的服务。&lt;/p>
&lt;p>&lt;strong>1. 关闭自动更新 (Unattended Upgrades)&lt;/strong>
自动更新会在后台静默运行 apt，极度消耗 IO 和内存。小内存机器建议改为手动定期维护。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">sudo systemctl stop unattended-upgrades
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo systemctl disable unattended-upgrades
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>2. 移除 Cloud-init&lt;/strong>
如果是云服务器，&lt;code>cloud-init&lt;/code> 仅在第一次创建实例时有用（用于注入 SSH Key、设置 hostname 等）。之后它就是个累赘。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">sudo touch /etc/cloud/cloud-init.disabled
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo apt purge cloud-init -y
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>3. 限制系统日志&lt;/strong>
&lt;code>systemd-journald&lt;/code> 可能会占用大量内存做日志缓存。
编辑 &lt;code>/etc/systemd/journald.conf&lt;/code>，修改或添加：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-ini" data-lang="ini">&lt;span class="line">&lt;span class="cl">&lt;span class="na">SystemMaxUse&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">50M&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>然后重启服务：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">sudo systemctl restart systemd-journald
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;p>&lt;strong>【第四阶段：软件选型的智慧】&lt;/strong>&lt;/p>
&lt;p>在 1G 内存上，软件的选择比优化更重要。&lt;strong>不要试图挑战物理定律。&lt;/strong>&lt;/p>
&lt;p>&lt;strong>1. 数据库：告别 MySQL 8.0&lt;/strong>
MySQL 8.0 默认配置启动空载就要 400M+ 内存，加上系统本身，直接爆内存。&lt;/p>
&lt;ul>
&lt;li>&lt;strong>青铜方案&lt;/strong>：使用 &lt;strong>MariaDB&lt;/strong>，并修改 &lt;code>my.cnf&lt;/code>，将 &lt;code>innodb_buffer_pool_size&lt;/code> 调低至 64M 或 128M。&lt;/li>
&lt;li>&lt;strong>王者方案&lt;/strong>：使用 &lt;strong>SQLite&lt;/strong>。如果你的业务是个人博客（Typecho, Hexo）、简单的 CMS 或测试项目，SQLite 是文件型数据库，&lt;strong>0 内存常驻&lt;/strong>，性能在低并发下甚至优于 MySQL。&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>2. Web 服务器：Nginx 是唯一真神&lt;/strong>
不要用 Apache，它的进程模型比较吃资源。Nginx 或 Caddy 是小内存服务器的最佳拍档。&lt;/p>
&lt;p>&lt;strong>3. 编程语言环境&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Java&lt;/strong>: 尽量避开。JVM 是内存黑洞。&lt;/li>
&lt;li>&lt;strong>Python/Node&lt;/strong>: 勉强可以，控制依赖数量。&lt;/li>
&lt;li>&lt;strong>Go/Rust&lt;/strong>: 完美适配，编译后的二进制文件占用极小。&lt;/li>
&lt;li>&lt;strong>PHP&lt;/strong>: 可以用，但需要调整 &lt;code>php-fpm&lt;/code> 配置，限制 &lt;code>pm.max_children&lt;/code> 为 5 左右，防止并发来了把内存撑爆。&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>&lt;strong>【终极方案：换个“瘦”点的系统】&lt;/strong>&lt;/p>
&lt;p>如果经过上述优化，Ubuntu 依然让你感到捉襟见肘，那么问题可能不在你，而在 Ubuntu。&lt;/p>
&lt;p>Ubuntu 是一个“胖”系统，为了易用性塞了太多东西。如果你的目标是 &lt;strong>极致省资源&lt;/strong>，建议重装系统：&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>推荐：Debian 11/12&lt;/strong>
Debian 是 Ubuntu 的上游，极其稳定且纯净。同样的 1G 配置，Debian 11 启动后内存占用通常只有 &lt;strong>70M - 120M&lt;/strong>。这直接给你省出了 600M+ 的空间！&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>极限：Alpine Linux&lt;/strong>
空载仅需 &lt;strong>10M&lt;/strong> 内存。但它是基于 musl libc 的，命令习惯和软件兼容性（特别是 glibc 依赖）需要一定门槛，适合 Docker 容器化部署。&lt;/p>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>&lt;strong>【总结】&lt;/strong>&lt;/p>
&lt;p>&lt;strong>1核 1G 并不是电子垃圾&lt;/strong>，它依然可以跑得很欢快。&lt;/p>
&lt;ol>
&lt;li>&lt;strong>先加 Swap&lt;/strong>，保命要紧。&lt;/li>
&lt;li>&lt;strong>卸载 Snap&lt;/strong>，释放资源。&lt;/li>
&lt;li>&lt;strong>精简服务&lt;/strong>，关掉自动更新。&lt;/li>
&lt;li>如果可能，&lt;strong>重装成 Debian&lt;/strong>。&lt;/li>
&lt;/ol>
&lt;p>只要配置得当，这台小机器跑一个日均 IP 1000 的博客、挂个探针、跑个签到脚本依然是绰绰有余的。&lt;/p>
&lt;h1 id="选型指南-1-核-1g-云服务器装-ubuntudebian-还是-centos">[选型指南] 1 核 1G 云服务器，装 Ubuntu、Debian 还是 CentOS？
&lt;/h1>&lt;p>这是一个为你定制的博客文章，专门针对那些在 &lt;strong>“云服务器装什么系统”&lt;/strong> 这个问题上纠结的用户。&lt;/p>
&lt;p>这篇文章延续了之前的硬核实战风格，重点对比了主流发行版在**小内存（1 核 1G/2G）**场景下的表现，帮你做出最理性的选择。&lt;/p>
&lt;hr>
&lt;p>&lt;strong>前言：你的起跑线决定了终点&lt;/strong>&lt;/p>
&lt;p>当你花 99 块钱买了一台 1 核 1G 的入门级云服务器时，你其实正站在一个岔路口。&lt;/p>
&lt;p>很多人觉得：“反正都是 Linux，随便装一个不就行了？”
&lt;strong>大错特错。&lt;/strong>&lt;/p>
&lt;p>在 16G 内存的电脑上，系统本身占 500M 还是 100M 你感觉不到区别；但在 1G 内存的服务器上，这 &lt;strong>400M 的差距&lt;/strong>，就是“能不能跑得动 Docker&amp;quot;或者“数据库会不会半夜崩溃”的生死线。&lt;/p>
&lt;p>今天我们就来一场 &lt;strong>Linux 发行版大乱斗&lt;/strong>，看看谁才是小内存 VPS 的“真命天子”。&lt;/p>
&lt;hr>
&lt;p>&lt;strong>选手一：Ubuntu Server (特别是 20.04/22.04)&lt;/strong>&lt;/p>
&lt;p>&lt;strong>标签：&lt;/strong> &lt;code>网红&lt;/code> &lt;code>资源大户&lt;/code> &lt;code>生态最好&lt;/code>&lt;/p>
&lt;p>Ubuntu 无疑是目前最流行的发行版。它的社区极其强大，你遇到任何问题，百度/谷歌搜出来的教程 80% 都是基于 Ubuntu 的。&lt;/p>
&lt;ul>
&lt;li>&lt;strong>优点：&lt;/strong>
&lt;ul>
&lt;li>教程多，遇到报错容易解决。&lt;/li>
&lt;li>PPA 软件源丰富，想装最新版 Node.js 或 Golang 非常容易。&lt;/li>
&lt;li>开箱即用，预装了 UFW、Sudo 等工具。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>缺点（致命）：&lt;/strong>
&lt;ul>
&lt;li>&lt;strong>胖。&lt;/strong> 真的很胖。&lt;/li>
&lt;li>为了推广自家的 Snap 包管理，强制后台运行 Snapd 守护进程，加上 Cloud-init 等云服务组件，&lt;strong>空载启动内存占用常年在 400MB - 600MB&lt;/strong>。&lt;/li>
&lt;li>对于 1G 内存的机器，系统吃掉一半，剩下一半你还想跑 MySQL？做梦。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>适合人群：&lt;/strong> 内存 ≥ 4GB 的土豪，或者极其依赖某些 Ubuntu 独占教程的新手。&lt;/p>
&lt;hr>
&lt;p>&lt;strong>选手二：Debian (推荐 11/12)&lt;/strong>&lt;/p>
&lt;p>&lt;strong>标签：&lt;/strong> &lt;code>极简&lt;/code> &lt;code>稳定&lt;/code> &lt;code>省内存的神&lt;/code>&lt;/p>
&lt;p>Debian 是 Ubuntu 的“爸爸”（Ubuntu 基于 Debian 开发）。它去掉了 Ubuntu 那些花里胡哨的商业推广服务，保留了最纯粹的 Linux 核心。&lt;/p>
&lt;ul>
&lt;li>&lt;strong>优点：&lt;/strong>
&lt;ul>
&lt;li>&lt;strong>极度省内存。&lt;/strong> Debian 11 Server 空载启动仅需 &lt;strong>70MB - 120MB&lt;/strong>。相比 Ubuntu，它直接为你省出了 300M+ 的“纯利润”。&lt;/li>
&lt;li>&lt;strong>极其稳定。&lt;/strong> Debian 的稳定分支是以“稳如老狗”著称的，服务器跑几年不重启是常态。&lt;/li>
&lt;li>&lt;strong>无缝迁移。&lt;/strong> 命令和 Ubuntu 99% 通用（都是 &lt;code>apt&lt;/code>，都是 &lt;code>systemd&lt;/code>），你会用 Ubuntu 就会用 Debian。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>缺点：&lt;/strong>
&lt;ul>
&lt;li>默认软件库的版本策略偏保守（比较旧），但可以通过添加源解决。&lt;/li>
&lt;li>极其纯净，可能需要你手动 &lt;code>apt install sudo&lt;/code> 或 &lt;code>apt install ufw&lt;/code>（但这其实是优点）。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>适合人群：&lt;/strong> &lt;strong>1 核 1G / 2G 用户的首选。&lt;/strong> 懂点基础 Linux 的人。&lt;/p>
&lt;hr>
&lt;p>&lt;strong>选手三：CentOS (及 AlmaLinux / Rocky Linux)&lt;/strong>&lt;/p>
&lt;p>&lt;strong>标签：&lt;/strong> &lt;code>企业级&lt;/code> &lt;code>老派&lt;/code> &lt;code>正在消亡&lt;/code>&lt;/p>
&lt;p>曾经的服务器霸主，互联网公司的标配。但自从 RedHat 宣布 &lt;strong>CentOS 7 停止维护&lt;/strong> 且 CentOS 8 转为“上游测试版（Stream）”后，它的地位就在急剧下降。&lt;/p>
&lt;ul>
&lt;li>&lt;strong>现状：&lt;/strong>
&lt;ul>
&lt;li>&lt;strong>CentOS 7：&lt;/strong> 太老了，内核老，软件老，且已停止维护，&lt;strong>不推荐&lt;/strong>。&lt;/li>
&lt;li>&lt;strong>CentOS Stream：&lt;/strong> 激进的测试版，不适合生产环境。&lt;/li>
&lt;li>&lt;strong>AlmaLinux / Rocky Linux：&lt;/strong> CentOS 的完美替代品，原汁原味的企业级 RHEL 体验。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>资源占用：&lt;/strong> 介于 Debian 和 Ubuntu 之间，空载约 &lt;strong>200MB - 300MB&lt;/strong>。&lt;/li>
&lt;li>&lt;strong>缺点：&lt;/strong>
&lt;ul>
&lt;li>包管理器 &lt;code>yum/dnf&lt;/code> 的速度体感上比 &lt;code>apt&lt;/code> 慢。&lt;/li>
&lt;li>很多个人开发者的软件（如某些一键脚本、面板）现在优先适配 Debian/Ubuntu 系，CentOS 支持度在下降。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>适合人群：&lt;/strong> 公司生产环境要求（必须兼容 RHEL）、正在学习红帽认证（RHCE）的同学。&lt;strong>个人小鸡不推荐。&lt;/strong>&lt;/p>
&lt;hr>
&lt;p>&lt;strong>选手四：Alpine Linux&lt;/strong>&lt;/p>
&lt;p>&lt;strong>标签：&lt;/strong> &lt;code>极端&lt;/code> &lt;code>微型&lt;/code> &lt;code>容器专家&lt;/code>&lt;/p>
&lt;p>这是一个走极端路线的系统。它不是基于常见的 GNU 库（glibc），而是基于 musl libc。&lt;/p>
&lt;ul>
&lt;li>&lt;strong>优点：&lt;/strong>
&lt;ul>
&lt;li>&lt;strong>小到离谱。&lt;/strong> 空载内存占用仅 &lt;strong>5MB - 15MB&lt;/strong>。&lt;/li>
&lt;li>镜像体积极小，下载秒完。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>缺点（劝退）：&lt;/strong>
&lt;ul>
&lt;li>&lt;strong>兼容性地狱。&lt;/strong> 因为缺少 glibc，很多常见的二进制程序（如标准的 JDK、某些编译好的 Python 库）无法直接运行，会报错“文件不存在”。&lt;/li>
&lt;li>命令不同。它用 &lt;code>apk&lt;/code> 安装软件，没有 &lt;code>systemd&lt;/code>，很多习惯要改。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>适合人群：&lt;/strong> Docker 深度玩家（作为容器底包）、极端资源匮乏环境、Linux 老鸟。&lt;strong>新手慎入。&lt;/strong>&lt;/p>
&lt;hr>
&lt;p>&lt;strong>总结：一张图告诉你怎么选&lt;/strong>&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align: left">特性&lt;/th>
&lt;th style="text-align: left">&lt;strong>Ubuntu 20/22&lt;/strong>&lt;/th>
&lt;th style="text-align: left">&lt;strong>Debian 11/12&lt;/strong>&lt;/th>
&lt;th style="text-align: left">&lt;strong>CentOS 7/Alma&lt;/strong>&lt;/th>
&lt;th style="text-align: left">&lt;strong>Alpine&lt;/strong>&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align: left">&lt;strong>空载内存&lt;/strong>&lt;/td>
&lt;td style="text-align: left">400MB+ (胖)&lt;/td>
&lt;td style="text-align: left">&lt;strong>80MB - 120MB (优)&lt;/strong>&lt;/td>
&lt;td style="text-align: left">200MB+ (中)&lt;/td>
&lt;td style="text-align: left">10MB (神)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">&lt;strong>命令习惯&lt;/strong>&lt;/td>
&lt;td style="text-align: left">&lt;code>apt&lt;/code> (主流)&lt;/td>
&lt;td style="text-align: left">&lt;code>apt&lt;/code> (同上)&lt;/td>
&lt;td style="text-align: left">&lt;code>yum/dnf&lt;/code>&lt;/td>
&lt;td style="text-align: left">&lt;code>apk&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">&lt;strong>软件新旧&lt;/strong>&lt;/td>
&lt;td style="text-align: left">新&lt;/td>
&lt;td style="text-align: left">稳 (偏旧)&lt;/td>
&lt;td style="text-align: left">旧/稳&lt;/td>
&lt;td style="text-align: left">新&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">&lt;strong>上手难度&lt;/strong>&lt;/td>
&lt;td style="text-align: left">⭐&lt;/td>
&lt;td style="text-align: left">⭐⭐&lt;/td>
&lt;td style="text-align: left">⭐⭐⭐&lt;/td>
&lt;td style="text-align: left">⭐⭐⭐⭐⭐&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">&lt;strong>1G 机器推荐&lt;/strong>&lt;/td>
&lt;td style="text-align: left">❌ 不推荐&lt;/td>
&lt;td style="text-align: left">✅ &lt;strong>强烈推荐&lt;/strong>&lt;/td>
&lt;td style="text-align: left">⭕ 勉强可用&lt;/td>
&lt;td style="text-align: left">⚠️ 仅限专家&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>&lt;strong>最终建议&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>如果你手里拿着 &lt;strong>1 核 1G&lt;/strong> 的服务器，&lt;strong>请无脑安装 Debian 11 或 12&lt;/strong>。
&lt;ul>
&lt;li>理由：它能让你用 Ubuntu 的操作习惯，享受到极致的资源利用率。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>如果你是去公司上班，公司要求用啥你就用啥（通常是 CentOS 或 Rocky）。&lt;/li>
&lt;li>如果你是玩 Docker 微服务架构，可以尝试 Alpine。&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>别再让操作系统吃掉你 40% 的性能了，换个 Debian，给你的业务留点活路吧。&lt;/strong>&lt;/p>
&lt;hr>
&lt;p>&lt;em>觉得有用？点赞收藏，下次重装系统不迷路。&lt;/em>&lt;/p>
&lt;h1 id="服务器带宽测试完全指南场景方法与单位换算">服务器带宽测试完全指南：场景、方法与单位换算
&lt;/h1>&lt;p>测试服务器带宽，通常分两种场景：&lt;/p>
&lt;ol>
&lt;li>&lt;strong>想看综合表现：&lt;/strong> 比如连接国内（电信/联通/移动）快不快，连接海外快不快。&lt;/li>
&lt;li>&lt;strong>想看瞬时峰值：&lt;/strong> 就像家里测速一样，看最大能跑多少。&lt;/li>
&lt;/ol>
&lt;p>以下是几种最常用、最硬核的测试方法（按推荐程度排序）：&lt;/p>
&lt;hr>
&lt;p>&lt;strong>方法一：使用“一键测速脚本” (最推荐，VPS 玩家必备)&lt;/strong>&lt;/p>
&lt;p>这是 Linux 服务器圈子最常用的方法。这些脚本会自动测试服务器连接全球（包括中国大陆三网）的上传和下载速度，并生成漂亮的报告。&lt;/p>
&lt;p>&lt;strong>推荐脚本 1：Hyperspeed (测速速度快，节点多，但是注意，没有配置的情况下可能会有中文乱码)&lt;/strong>&lt;/p>
&lt;p>这是一个专注于网络测速的脚本，它会测试国内三网和国际主要节点的带宽。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">bash &amp;lt;&lt;span class="o">(&lt;/span>curl -Lso- https://bench.im/hyperspeed&lt;span class="o">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>推荐脚本 2：Superbench (经典老牌)&lt;/strong>&lt;/p>
&lt;p>不仅测网速，还能顺便把你的 CPU 型号、磁盘 I/O 读写速度一起测了。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">wget -qO- --no-check-certificate https://raw.githubusercontent.com/oooldking/script/master/superbench.sh &lt;span class="p">|&lt;/span> bash
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>如何看结果？&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Upload Speed (上行带宽):&lt;/strong> 这是最重要的。决定了你的服务器给用户发数据的速度（比如你建站，用户打开网页的速度）。&lt;/li>
&lt;li>&lt;strong>Download Speed (下行带宽):&lt;/strong> 决定了你服务器下载文件的速度。&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>&lt;strong>方法二：使用 Speedtest 命令行版 (最准确的单点测试)&lt;/strong>&lt;/p>
&lt;p>如果你只关心“这一刻我的最大带宽是多少”，用 Ookla 官方的 Speedtest 工具最准。&lt;/p>
&lt;p>&lt;strong>1. 安装 Speedtest：&lt;/strong>&lt;/p>
&lt;p>Debian/Ubuntu 默认源里的版本比较老，建议用下面的方式安装 Python 版，轻量方便。&lt;/p>
&lt;p>先安装 pip（如果还没有的话）：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">apt update
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">apt install python3-pip -y
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>安装 speedtest-cli：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">pip3 install speedtest-cli
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>2. 开始测速：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>简单测速（自动找最近节点）：&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">speedtest-cli
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>&lt;strong>生成图片链接（方便发给朋友看）：&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">speedtest-cli --share
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>&lt;strong>方法三：实时监控 (看着流量跑)&lt;/strong>&lt;/p>
&lt;p>如果你正在下载东西，或者想看着服务器当前的实时带宽占用，可以用 &lt;code>nload&lt;/code>。它像个仪表盘一样。&lt;/p>
&lt;p>&lt;strong>1. 安装：&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">apt install nload -y
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>2. 运行：&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">nload
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;strong>Incoming:&lt;/strong> 进来的流量（下载）&lt;/li>
&lt;li>&lt;strong>Outgoing:&lt;/strong> 出去的流量（上传）&lt;/li>
&lt;li>按键盘上的左右箭头键可以在不同网卡之间切换。&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>&lt;strong>⚠️ 新手必看的“带宽单位”坑&lt;/strong>&lt;/p>
&lt;p>&lt;strong>千万别搞混了 &lt;code>Mbps&lt;/code> 和 &lt;code>MB/s&lt;/code>！&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>商家卖给你的带宽通常是 &lt;strong>Mbps&lt;/strong> (Megabits per second, 小写的 b)。&lt;/li>
&lt;li>你在浏览器/迅雷里看到的速度通常是 &lt;strong>MB/s&lt;/strong> (Megabytes per second, 大写的 B)。&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>换算公式：除以 8&lt;/strong>&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align: left">商家标称带宽&lt;/th>
&lt;th style="text-align: left">理论最高下载速度 (MB/s)&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align: left">&lt;strong>1 Mbps&lt;/strong>&lt;/td>
&lt;td style="text-align: left">128 KB/s (慢到令人发指)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">&lt;strong>5 Mbps&lt;/strong>&lt;/td>
&lt;td style="text-align: left">640 KB/s (勉强看标清视频)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">&lt;strong>10 Mbps&lt;/strong>&lt;/td>
&lt;td style="text-align: left">1.25 MB/s&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">&lt;strong>30 Mbps&lt;/strong>&lt;/td>
&lt;td style="text-align: left">3.75 MB/s (轻量级应用够用)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">&lt;strong>100 Mbps&lt;/strong>&lt;/td>
&lt;td style="text-align: left">12.5 MB/s&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">&lt;strong>1 Gbps&lt;/strong>&lt;/td>
&lt;td style="text-align: left">125 MB/s&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>&lt;strong>实战判断：&lt;/strong>&lt;/p>
&lt;p>如果你买的是 30Mbps 的服务器，你用 &lt;code>nload&lt;/code> 看到 Outgoing 跑到 &lt;strong>3.5MB/s&lt;/strong> 左右，说明带宽已经跑满了。&lt;/p></description></item><item><title>Server Probe</title><link>https://www.zata.cc/p/server-probe/</link><pubDate>Thu, 25 Sep 2025 11:52:44 +0800</pubDate><guid>https://www.zata.cc/p/server-probe/</guid><description>&lt;img src="https://www.zata.cc/p/server-probe/images/index/index.png" alt="Featured image of post Server Probe" />&lt;p>这是一种在IT运维和网站管理中非常常见的工具，对于了解和维护服务器的健康状态至关重要。&lt;/p>
&lt;h3 id="一什么是服务器探针">一、什么是服务器探针？
&lt;/h3>&lt;p>服务器探针，可以理解为安装在服务器上的一个“眼睛”或“健康监测器”。它本质上是一个软件程序或脚本，部署在你的服务器上，用于实时地、自动化地收集服务器的各种状态信息和性能数据。&lt;/p>
&lt;p>这些探针收集到的数据，通常会以一个直观的、可视化的网页界面呈现出来，让服务器管理员（即使是不懂复杂命令行的用户）也能一目了然地了解服务器的当前运行状况。&lt;/p>
&lt;p>你可以把它想象成汽车的仪表盘。仪表盘显示了车速、油量、发动机转速、水温等关键信息，让你知道汽车是否在正常运行。服务器探针就扮演着同样的角色，只不过它监测的是服务器的CPU、内存、硬盘、网络等核心资源。&lt;/p>
&lt;h3 id="二为什么需要服务器探针">二、为什么需要服务器探针？
&lt;/h3>&lt;p>如果没有探针，管理员想要了解服务器状态，就必须登录到服务器后台，手动敲击各种Linux或Windows命令（如 &lt;code>top&lt;/code>, &lt;code>free&lt;/code>, &lt;code>df&lt;/code>, &lt;code>netstat&lt;/code> 等）来查看零散的信息。这个过程非常繁琐、低效，而且不直观。&lt;/p>
&lt;p>服务器探针解决了以下几个核心痛点：&lt;/p>
&lt;ol>
&lt;li>&lt;strong>数据可视化与集中管理&lt;/strong>：将复杂、抽象的命令行数据转换成图表、百分比等易于理解的图形界面，方便快速诊断问题。如果你有多台服务器，探针可以将它们的状态集中到一个面板上进行监控。&lt;/li>
&lt;li>&lt;strong>实时监控与性能分析&lt;/strong>：7x24小时不间断地监控服务器的各项指标。通过观察数据的历史趋势，可以分析服务器的性能瓶颈，例如，是在每天的某个固定时间段CPU负载过高，还是内存占用持续不下。&lt;/li>
&lt;li>&lt;strong>故障预警与快速定位&lt;/strong>：可以设置阈值报警。例如，当CPU使用率连续5分钟超过90%时，或者当硬盘空间低于10%时，探针可以通过邮件、短信或即时通讯工具（如钉钉、Telegram）发送警报。这使得管理员能在问题恶化、影响业务之前就介入处理。&lt;/li>
&lt;li>&lt;strong>降低技术门槛&lt;/strong>：让不熟悉服务器命令的网站开发者或初级运维人员也能轻松掌握服务器的运行状态，进行一些基础的判断。&lt;/li>
&lt;/ol>
&lt;h3 id="三服务器探针主要监测哪些核心指标">三、服务器探针主要监测哪些核心指标？
&lt;/h3>&lt;p>一个功能完善的服务器探针通常会监测以下几类关键数据：&lt;/p>
&lt;p>&lt;strong>1. 系统核心资源 (Hardware &amp;amp; OS)&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>CPU 使用率 (CPU Usage)&lt;/strong>：显示当前CPU的负载情况，包括单核和多核的使用率、用户使用、系统使用、空闲比例等。CPU负载过高是导致服务器响应缓慢的最常见原因。&lt;/li>
&lt;li>&lt;strong>内存使用情况 (Memory Usage)&lt;/strong>：显示物理内存（RAM）和交换内存（Swap）的总量、已用量、剩余量。内存耗尽会导致系统运行缓慢甚至崩溃。&lt;/li>
&lt;li>&lt;strong>硬盘空间与I/O (Disk Space &amp;amp; I/O)&lt;/strong>：监测硬盘的分区、总容量、已用空间和可用空间。同时，也会监测硬盘的读写速度（I/O），这是衡量数据存取性能的关键。&lt;/li>
&lt;li>&lt;strong>系统负载 (System Load)&lt;/strong>：通常用 &lt;code>Load Average&lt;/code> 表示，它是一个衡量系统繁忙程度的指标，分别显示过去1分钟、5分钟和15分钟的平均负载。如果这个数值持续高于CPU核心数，说明系统处于超负荷状态。&lt;/li>
&lt;li>&lt;strong>在线时长 (Uptime)&lt;/strong>：服务器从上次开机或重启后，连续运行了多长时间。这是衡量服务器稳定性的一个重要指标。&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>2. 网络状态 (Network Status)&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>实时网速 (Real-time Network Speed)&lt;/strong>：显示服务器当前的上行和下行带宽速度，单位通常是 Mbps 或 MB/s。&lt;/li>
&lt;li>&lt;strong>总流量统计 (Total Traffic Data)&lt;/strong>：统计自开机以来或过去一段时间内（如月度）的总流出和流入流量。这对于管理服务器的带宽成本非常重要。&lt;/li>
&lt;li>&lt;strong>网络连接信息 (Network Connections)&lt;/strong>：显示当前服务器上有哪些网络连接（TCP/UDP），以及它们的来源IP和端口，有助于排查网络攻击或异常连接。&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>3. 软件与服务环境 (Software &amp;amp; Services)&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>操作系统信息&lt;/strong>：显示操作系统的名称、版本、内核版本等。&lt;/li>
&lt;li>&lt;strong>服务器软件&lt;/strong>：显示Web服务器软件（如 Nginx, Apache）、数据库（如 MySQL, PostgreSQL）和编程语言环境（如 PHP, Python, Java）的版本信息。&lt;/li>
&lt;li>&lt;strong>进程管理 (Process Management)&lt;/strong>：可以列出当前正在运行的进程，以及它们对CPU和内存的占用情况，方便找出消耗资源最多的“罪魁祸首”。&lt;/li>
&lt;/ul>
&lt;h3 id="四常见的服务器探针类型与产品">四、常见的服务器探针类型与产品
&lt;/h3>&lt;p>服务器探针主要分为两类：&lt;/p>
&lt;p>&lt;strong>1. 开源轻量级探针 (脚本类)&lt;/strong>&lt;/p>
&lt;p>这类探针通常是一个或一组脚本文件（如PHP、Python、Shell脚本），部署简单，资源占用极小，功能聚焦于核心指标的展示。非常适合个人开发者和中小型网站使用。&lt;/p>
&lt;ul>
&lt;li>&lt;strong>代表产品&lt;/strong>：
&lt;ul>
&lt;li>
&lt;p>&lt;strong>ServerStatus (服盘)&lt;/strong>：一个优秀的开源项目，采用客户端/服务器模式，可以在一个主控端网页上集中监控多台服务器的状态，界面美观，支持状态预警。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>雅黑探针 / an Eris Prober&lt;/strong>：非常经典的PHP探针，界面简洁，上传一个PHP文件即可使用，流传甚广。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>哪吒监控 (Nezha Monitor)&lt;/strong>：功能强大的开源监控面板，同样支持多服务器、多地点监控，并且集成了报警和后台管理功能，是目前非常受欢迎的选项。&lt;/p>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>2. 商业化/企业级监控系统&lt;/strong>&lt;/p>
&lt;p>这类系统功能极为强大和全面，不仅限于基础的探针监测，还包括了日志分析、应用性能监控（APM）、故障告警、自动化运维等复杂功能，适用于大型企业和对稳定性要求极高的业务。&lt;/p>
&lt;ul>
&lt;li>&lt;strong>代表产品&lt;/strong>：
&lt;ul>
&lt;li>&lt;strong>Zabbix&lt;/strong>：非常强大和灵活的开源企业级监控解决方案，但配置和部署相对复杂。&lt;/li>
&lt;li>&lt;strong>Prometheus + Grafana&lt;/strong>：这是一对黄金组合。Prometheus负责收集和存储时序数据，Grafana负责将数据进行可视化展示。这是云原生时代最主流的监控方案之一。&lt;/li>
&lt;li>&lt;strong>Datadog / New Relic&lt;/strong>：商业SaaS监控服务，开箱即用，功能强大，UI精美，但价格昂贵。&lt;/li>
&lt;li>&lt;strong>云厂商自带监控&lt;/strong>：阿里云的“云监控”、腾讯云的“云监控”等，如果你使用它们的云服务器，这些自带的监控工具通常是首选，因为它们与云平台生态结合得最好。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="总结">总结
&lt;/h3>&lt;p>总而言之，服务器探针是一个连接“服务器物理状态”与“管理员”之间的桥梁。它将冰冷、复杂的后台数据，翻译成直观、易懂的图文信息，极大地简化了服务器的管理和维护工作。&lt;/p>
&lt;ul>
&lt;li>对于&lt;strong>个人站长或开发者&lt;/strong>来说，一个轻量级的开源探针（如哪吒监控、ServerStatus）就足以满足日常需求。&lt;/li>
&lt;li>对于&lt;strong>中大型企业&lt;/strong>来说，则需要部署更专业、更全面的监控系统（如Zabbix, Prometheus），以确保业务的高可用性和稳定性。&lt;/li>
&lt;/ul>
&lt;p>选择合适的服务器探针，是保障线上服务稳定运行的第一步，也是运维工作中不可或缺的一环。&lt;/p></description></item><item><title>bash命令使用教程</title><link>https://www.zata.cc/p/bash%E5%91%BD%E4%BB%A4%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/</link><pubDate>Fri, 18 Jul 2025 17:41:56 +0800</pubDate><guid>https://www.zata.cc/p/bash%E5%91%BD%E4%BB%A4%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/</guid><description>&lt;img src="https://www.zata.cc/p/bash%E5%91%BD%E4%BB%A4%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/images/index/index.png" alt="Featured image of post bash命令使用教程" />&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># ==================================&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 常用 BASH 命令精简版&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># ==================================&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">export&lt;/span> &lt;span class="nv">all_proxy&lt;/span>&lt;span class="o">=&lt;/span>socks5h://127.0.0.1:7898 &lt;span class="c1"># 设置全局代理，包括 wget, curl 等&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># --- 文件和目录管理 (File &amp;amp; Directory Management) ---&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ls -l &lt;span class="c1"># 以长格式列出文件和目录&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">cd&lt;/span> /path/to/dir &lt;span class="c1"># 切换目录&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">pwd&lt;/span> &lt;span class="c1"># 显示当前工作目录路径&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">mkdir new_dir &lt;span class="c1"># 创建新目录&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">rm file.txt &lt;span class="c1"># 删除文件&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">rm -r old_dir &lt;span class="c1"># 递归删除目录及其内容&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">cp &lt;span class="nb">source&lt;/span> dest &lt;span class="c1"># 复制文件或目录&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">mv old_name new_name &lt;span class="c1"># 移动或重命名文件/目录&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">touch file.txt &lt;span class="c1"># 创建空文件或更新时间戳&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">find . -name &lt;span class="s2">&amp;#34;*.log&amp;#34;&lt;/span> &lt;span class="c1"># 在当前目录及子目录中查找.log文件&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">cat file.txt &lt;span class="c1"># 查看整个文件内容&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">less file.log &lt;span class="c1"># 分页查看文件内容 (按 &amp;#39;q&amp;#39; 退出)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">head -n &lt;span class="m">20&lt;/span> file.txt &lt;span class="c1"># 查看文件前20行&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">tail -n &lt;span class="m">20&lt;/span> file.txt &lt;span class="c1"># 查看文件后20行&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">tail -f file.log &lt;span class="c1"># 实时跟踪文件更新&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># --- 文本处理 (Text Processing) ---&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">grep &lt;span class="s2">&amp;#34;pattern&amp;#34;&lt;/span> file.log &lt;span class="c1"># 在文件中搜索模式&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ps aux &lt;span class="p">|&lt;/span> grep &lt;span class="s2">&amp;#34;nginx&amp;#34;&lt;/span> &lt;span class="c1"># 管道示例：查找nginx进程&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sed &lt;span class="s1">&amp;#39;s/old/new/g&amp;#39;&lt;/span> file.txt &lt;span class="c1"># 替换文件中的文本&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">awk &lt;span class="s1">&amp;#39;{print $1, $3}&amp;#39;&lt;/span> data.txt &lt;span class="c1"># 提取并打印指定列&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sort file.txt &lt;span class="p">|&lt;/span> uniq -c &lt;span class="c1"># 排序并统计不重复的行&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">wc -l file.txt &lt;span class="c1"># 计算文件的行数&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># --- 系统监控与进程管理 (System &amp;amp; Process Management) ---&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ps aux &lt;span class="c1"># 显示所有用户的详细进程信&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">top &lt;span class="c1"># 动态显示进程活动 (按 &amp;#39;q&amp;#39; 退出)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">htop &lt;span class="c1"># 交互式进程查看器 (top的增强版)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">kill&lt;/span> &lt;span class="m">12345&lt;/span> &lt;span class="c1"># 终止指定PID的进程&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">pkill &lt;span class="s2">&amp;#34;process_name&amp;#34;&lt;/span> &lt;span class="c1"># 根据名称终止进程&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">df -h &lt;span class="c1"># 显示磁盘空间使用情况 (人类可读格式)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">du -sh /path/to/dir &lt;span class="c1"># 显示指定目录的总大小&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">free -m &lt;span class="c1"># 显示内存使用情况 (以MB为单位)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">uptime &lt;span class="c1"># 显示系统运行时间&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># --- 网络 (Networking) ---&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ping google.com &lt;span class="c1"># 测试网络连通性&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ip addr show &lt;span class="c1"># 显示网络接口信息 (ifconfig的替代品)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ss -tuln &lt;span class="c1"># 显示监听中的TCP/UDP端口 (netstat的替代品)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">curl -I http://example.com &lt;span class="c1"># 获取URL的HTTP头部信息&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">wget http://example.com/file.zip &lt;span class="c1"># 下载文件&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># --- 权限管理 (Permissions) ---&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">chmod +x script.sh &lt;span class="c1"># 为脚本添加执行权限&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">chown user:group file.txt &lt;span class="c1"># 更改文件所有者和组&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo &lt;span class="nb">command&lt;/span> &lt;span class="c1"># 以超级用户身份执行命令&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># --- 重定向 (Redirection) ---&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">command&lt;/span> &amp;gt; file.txt &lt;span class="c1"># 将输出重定向到文件 (覆盖)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">command&lt;/span> &amp;gt;&amp;gt; file.txt &lt;span class="c1"># 将输出追加到文件末尾&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">command&lt;/span> &amp;lt; file.txt &lt;span class="c1"># 将文件内容作为命令的输入&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">command&lt;/span> 2&amp;gt; error.log &lt;span class="c1"># 将标准错误重定向到文件&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="如何把文件夹里的所有文件移动到同级目录">如何把文件夹里的所有文件移动到同级目录
&lt;/h2>&lt;p>有时候我们想把一个文件夹（比如文件夹A）里的所有文件，移动到它的同级目录（也就是它的上一级目录）。可以按照下面的步骤操作：&lt;/p>
&lt;ol>
&lt;li>打开终端。&lt;/li>
&lt;li>进入文件夹A的上一级目录：
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="nb">cd&lt;/span> /路径/到/文件夹A的上一级目录
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>执行下面的命令，把文件夹A里的所有文件移动到当前目录：
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">mv 文件夹A/* .
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>这里，&lt;code>文件夹A/*&lt;/code> 表示文件夹A里的所有文件，&lt;code>.&lt;/code> 表示当前目录。&lt;/li>
&lt;/ol>
&lt;p>&lt;strong>注意：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>这个命令只会移动文件夹A里的文件，不会移动隐藏文件（以.开头的文件）和子文件夹。&lt;/li>
&lt;li>如果有同名文件，可能会被覆盖，请提前检查。&lt;/li>
&lt;li>移动完成后，文件夹A会变空，可以用 &lt;code>rmdir 文件夹A&lt;/code> 删除它。&lt;/li>
&lt;/ul></description></item><item><title>linux使用教程</title><link>https://www.zata.cc/p/linux%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/</link><pubDate>Sun, 16 Mar 2025 17:16:02 +0800</pubDate><guid>https://www.zata.cc/p/linux%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/</guid><description>&lt;img src="https://www.zata.cc/p/linux%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/images/index/index.png" alt="Featured image of post linux使用教程" />&lt;h2 id="服务器配置">服务器配置
&lt;/h2>&lt;h3 id="ubuntu-初始化配置">Ubuntu 初始化配置
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">## 1.设置密码并更新软件包&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo passwd
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo apt update &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> sudo apt upgrade -y
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">## 2. 安装ssh-server&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo apt install openssh-server
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">## 3.配置ssh&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">vim /etc/ssh/sshd_config
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 常见配置项示例&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Port &lt;span class="m">22&lt;/span> &lt;span class="c1"># SSH 端口&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">PermitRootLogin no &lt;span class="c1"># 禁止 root 登录&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">PasswordAuthentication yes &lt;span class="c1"># 允许密码认证&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">AllowUsers myuser &lt;span class="c1"># 允许特顶用户登录&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Port &lt;span class="m">2222&lt;/span> &lt;span class="c1">#修改端口，减少扫描攻击&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">## 4.重启ssh服务&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo systemctl restart ssh
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">## 5.创建用户(避免直接使用root账号)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">adduser myuser
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">usermod -aG sudo myuser
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">## 6. 连接服务器&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ssh root@服务器IP地址 -p &lt;span class="o">[&lt;/span>你自己设置的端口&lt;span class="o">]&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="一些问题和解决方案">一些问题和解决方案
&lt;/h2>&lt;h3 id="linux-下更改当前文件夹及所有内容所有者为-zata-用户">Linux 下更改当前文件夹及所有内容所有者为 zata 用户
&lt;/h3>&lt;p>&lt;strong>目标&lt;/strong>&lt;br>
将当前文件夹及其下所有文件和子文件夹的所有者更改为 &lt;code>zata&lt;/code> 用户。&lt;/p>
&lt;p>&lt;strong>步骤&lt;/strong>&lt;/p>
&lt;ol>
&lt;li>&lt;strong>打开终端&lt;/strong>：按 &lt;code>Ctrl + Alt + T&lt;/code>，使用 &lt;code>cd /path/to/your/folder&lt;/code> 进入目标文件夹，确认路径：&lt;code>pwd&lt;/code>。&lt;/li>
&lt;li>&lt;strong>更改所有者&lt;/strong>：
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">sudo chown -R zata .
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>.&lt;/code> 表示当前文件夹，&lt;code>-R&lt;/code> 递归更改所有内容。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>（可选）设置权限&lt;/strong>：只给 &lt;code>zata&lt;/code> 读写权限：
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">sudo chmod -R &lt;span class="m">700&lt;/span> .
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>&lt;strong>验证更改&lt;/strong>：检查所有者和权限：
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">ls -la
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ol>
&lt;p>&lt;strong>注意事项&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>确认 &lt;code>zata&lt;/code> 用户存在：&lt;code>id zata&lt;/code>。若不存在，创建：&lt;code>sudo adduser zata&lt;/code>。&lt;/li>
&lt;li>备份数据，避免误操作。&lt;/li>
&lt;li>（可选）分配组：&lt;code>sudo chown -R zata:groupname .&lt;/code>。&lt;/li>
&lt;/ul>
&lt;h3 id="bash-ping-command-not-found--问题">bash: ping: command not found 问题
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">apt-get update
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">apt install iputils-ping
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">apt install net-tools
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>SSH使用教程</title><link>https://www.zata.cc/p/ssh%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/</link><pubDate>Fri, 14 Mar 2025 00:23:43 +0800</pubDate><guid>https://www.zata.cc/p/ssh%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/</guid><description>&lt;img src="https://www.zata.cc/p/ssh%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/images/index/index.png" alt="Featured image of post SSH使用教程" />&lt;h2 id="-ssh常用命令">☆ SSH常用命令
&lt;/h2>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 连接远程服务器 &lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ssh username@hostname &lt;span class="o">[&lt;/span>-p port&lt;span class="o">]&lt;/span> &lt;span class="o">[&lt;/span>-i private_key&lt;span class="o">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">#远程服务器上跑了 PostgreSQL（默认端口 5432），但不允许外网直接连接。用这条命令后，你可以在本地用数据库客户端连接：&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ssh -L 5433:127.0.0.1:5432 root@远程IP
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 复制公钥到远程服务器&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ssh-copy-id username@hostname &lt;span class="o">[&lt;/span>-p port&lt;span class="o">]&lt;/span> &lt;span class="o">[&lt;/span>-i private_key&lt;span class="o">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Generate ED25519 key (recommended)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ssh-keygen -t ed25519 -C &lt;span class="s2">&amp;#34;your_email@example.com&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 删除已知主机记录&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ssh-keygen -R &amp;lt;IP address&amp;gt;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Edit SSH config file&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">nano ~/.ssh/config
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Copy file from local to remote&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">scp localfile.txt username@hostname:/path/to/destination/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Copy file from remote to local&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">scp username@hostname:/path/to/file /var/www/local_dir/destination/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Copy directory recursively&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">scp -r localdir/ username@hostname:/path/to/destination/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Copy with specific port&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">scp -P &lt;span class="m">2222&lt;/span> localfile.txt username@hostname:/path/to/destination/
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="ssh安装">SSH安装
&lt;/h2>&lt;ol>
&lt;li>ubuntu&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">sudo apt update &lt;span class="c1"># 更新仓库&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo apt install openssh-server &lt;span class="c1"># 安装openssh&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">vi /etc/ssh/sshd_config &lt;span class="c1"># 进入配置文件，找到port=22那行，取消注释 ，如果想要root登陆，可以取消PermitRootLogin注释并修改为yes&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo service ssh restart &lt;span class="c1"># 重启服务，然后就可以连接了，有时候为了安全，上一步的root登陆是不允许的，root用户连不上，可以用普通用户登录再切换到root &lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="1-ssh-连接命令">1. SSH 连接命令
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 基本连接&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ssh username@hostname
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 通过代理连接&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ssh -o &lt;span class="s2">&amp;#34;ProxyCommand nc -X 5 -x 127.0.0.1:7897 %h %p&amp;#34;&lt;/span> root@107.172.234.205
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 指定端口连接&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ssh -p &lt;span class="m">2222&lt;/span> username@hostname
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 使用密钥连接&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ssh -i /path/to/private_key username@hostname
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="2-ssh-密钥管理">2. SSH 密钥管理
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 生成 SSH 密钥对&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ssh-keygen -t rsa -b &lt;span class="m">4096&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 复制公钥到远程服务器&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ssh-copy-id username@hostname &lt;span class="c1"># 如果是windows可以看问题：在Windows客户机上实现类似ssh-copy-id功能即下次不需要输入密码&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 或者， （有些时候上吗会出错）ssh-keygen -R &amp;lt;IP address&amp;gt; to delete history record&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">cat ~/.ssh/id_ed25519.pub &lt;span class="p">|&lt;/span> ssh root@&amp;lt;IP address&amp;gt; &lt;span class="s2">&amp;#34;mkdir -p ~/.ssh &amp;amp;&amp;amp; chmod 700 ~/.ssh &amp;amp;&amp;amp; cat &amp;gt;&amp;gt; ~/.ssh/authorized_keys &amp;amp;&amp;amp; chmod 600 ~/.ssh/authorized_keys&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 查看已知主机&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">cat ~/.ssh/known_hosts
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>(在Windows客户机上实现类似ssh-copy-id功能即下次不需要输入密码)[#在Windows客户机上实现类似ssh-copy-id功能即下次不需要输入密码]&lt;/p>
&lt;h3 id="3ssh传输文件">3.SSH传输文件
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 1、从服务器上下载文件&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">scp&lt;/span> &lt;span class="n">username&lt;/span>&lt;span class="nd">@servername&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">path&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">filename&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">var&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">www&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local_dir&lt;/span>&lt;span class="err">（&lt;/span>&lt;span class="n">本地目录&lt;/span>&lt;span class="err">）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># 例如scp root@192.168.0.101:/var/www/test.txt 把192.168.0.101上的/var/www/test.txt 的文件下载到/var/www/local_dir（本地目录）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 2、上传本地文件到服务器&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">scp&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">path&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">filename&lt;/span> &lt;span class="n">username&lt;/span>&lt;span class="nd">@servername&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">path&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 例如scp /var/www/test.php root@192.168.0.101:/var/www/ 把本机/var/www/目录下的test.php文件上传到192.168.0.101这台服务器上的/var/www/目录中&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 3、从服务器下载整个目录&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">scp&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="n">r&lt;/span> &lt;span class="n">username&lt;/span>&lt;span class="nd">@servername&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">var&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">www&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">remote_dir&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="err">（&lt;/span>&lt;span class="n">远程目录&lt;/span>&lt;span class="err">）&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">var&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">www&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local_dir&lt;/span>&lt;span class="err">（&lt;/span>&lt;span class="n">本地目录&lt;/span>&lt;span class="err">）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 例如:scp -r root@192.168.0.101:/var/www/test /var/www/ &lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 4、上传目录到服务器&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">scp&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="n">r&lt;/span> &lt;span class="n">local_dir&lt;/span> &lt;span class="n">username&lt;/span>&lt;span class="nd">@servername&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="n">remote_dir&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 例如：scp -r test root@192.168.0.101:/var/www/ 把当前目录下的test目录上传到服务器的/var/www/ 目录 &lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="4-ssh-端口转发">4. SSH 端口转发
&lt;/h3>&lt;p>&lt;span style="color :red"> 注意必须要提前配置公网服务器的ssh配置文件 可见ssh问题中的“通过 SSH 反向隧道将本地前后端暴露到公网” &lt;/span>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 本地端口转发&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ssh -L local_port:target_host:target_port username@hostname
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 远程端口转发&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ssh -R remote_port:target_host:target_port username@hostname
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">#不发送任何命令，只用来建立连接。没有这个参数，会在 SSH 服务器打开一个 Shell。会在前台打开&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ssh -R &amp;lt;服务器端口&amp;gt;:localhost:22 -N root@&amp;lt;服务器地址&amp;gt;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 将SSH命令放到后台，如果想要停止需要杀死进程 （ 比较常用 ）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ssh -R &amp;lt;服务器端口&amp;gt;:localhost:22 -Nf root@&amp;lt;服务器地址&amp;gt;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 动态端口转发（SOCKS代理）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ssh -D local_port username@hostname
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 基本格式&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ssh &lt;span class="o">[&lt;/span>选项&lt;span class="o">]&lt;/span> username@hostname
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 常用选项说明&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">-L &lt;span class="o">[&lt;/span>本地IP:&lt;span class="o">]&lt;/span>本地端口:目标IP:目标端口 &lt;span class="c1"># 本地端口转发&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">-R &lt;span class="o">[&lt;/span>远程IP:&lt;span class="o">]&lt;/span>远程端口:目标IP:目标端口 &lt;span class="c1"># 远程端口转发&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">-D &lt;span class="o">[&lt;/span>本地IP:&lt;span class="o">]&lt;/span>本地端口 &lt;span class="c1"># 动态端口转发(SOCKS代理)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 重要的辅助选项&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">-N &lt;span class="c1"># 不执行远程命令，仅用于端口转发&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">-f &lt;span class="c1"># 后台运行&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">-C &lt;span class="c1"># 压缩数据传输&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">-q &lt;span class="c1"># 安静模式，减少日志输出&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">-v &lt;span class="c1"># 详细模式，用于调试&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">-vv &lt;span class="c1"># 更详细的模式&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">-4 &lt;span class="c1"># 仅使用 IPv4&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">-6 &lt;span class="c1"># 仅使用 IPv6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 连接相关选项&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">-p 端口 &lt;span class="c1"># 指定 SSH 服务器端口&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">-i 密钥 &lt;span class="c1"># 指定私钥文件路径&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="5-ssh-配置管理">5. SSH 配置管理
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 编辑 SSH 配置文件&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">vim ~/.ssh/config
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 配置文件示例&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Host myserver
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> HostName hostname
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> User username
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Port &lt;span class="m">2222&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> IdentityFile ~/.ssh/id_rsa
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="常见用途对比">常见用途对比：
&lt;/h3>&lt;ol>
&lt;li>&lt;strong>安全性&lt;/strong>&lt;/li>
&lt;/ol>
&lt;ul>
&lt;li>密码登录：便捷但相对不安全&lt;/li>
&lt;li>密钥登录：更安全，推荐使用&lt;/li>
&lt;/ul>
&lt;ol start="2">
&lt;li>&lt;strong>传输方式&lt;/strong>&lt;/li>
&lt;/ol>
&lt;ul>
&lt;li>&lt;code>scp&lt;/code>：简单直接，适合临时传输&lt;/li>
&lt;li>&lt;code>rsync&lt;/code>：支持增量传输，适合大量文件同步&lt;/li>
&lt;/ul>
&lt;ol start="3">
&lt;li>&lt;strong>端口转发&lt;/strong>&lt;/li>
&lt;/ol>
&lt;ul>
&lt;li>本地转发：访问远程内网服务&lt;/li>
&lt;li>远程转发：让远程访问本地服务&lt;/li>
&lt;li>动态转发：创建 SOCKS 代理&lt;/li>
&lt;/ul>
&lt;ol start="4">
&lt;li>&lt;strong>连接管理&lt;/strong>&lt;/li>
&lt;/ol>
&lt;ul>
&lt;li>普通连接：一次性使用&lt;/li>
&lt;li>配置文件：适合经常连接的服务器&lt;/li>
&lt;/ul>
&lt;h3 id="使用建议">使用建议：
&lt;/h3>&lt;ol>
&lt;li>优先使用密钥认证&lt;/li>
&lt;li>重要服务器建议修改默认 22 端口&lt;/li>
&lt;li>经常连接的服务器建议配置 &lt;code>~/.ssh/config&lt;/code>&lt;/li>
&lt;li>大文件传输建议使用 &lt;code>rsync&lt;/code> 而不是 &lt;code>scp&lt;/code>&lt;/li>
&lt;li>注意保护好私钥文件的安全&lt;/li>
&lt;/ol>
&lt;p>这些命令和用法覆盖了日常 SSH 使用的大部分场景，建议根据实际需求选择合适的命令使用。&lt;/p>
&lt;h2 id="ubuntu-下-ssh-服务的启动停止和管理方法">Ubuntu 下 SSH 服务的启动、停止和管理方法：
&lt;/h2>&lt;p>安装 SSH 服务&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 安装 OpenSSH 服务器&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo apt update
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo apt install openssh-server
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol>
&lt;li>service 命令（传统方式）&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 启动&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo service ssh start
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 停止&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo service ssh stop
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 重启&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo service ssh restart
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 查看状态&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo service ssh status
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="2">
&lt;li>/etc/init.d 脚本方式&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 启动&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo /etc/init.d/ssh start
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 停止&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo /etc/init.d/ssh stop
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 重启&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo /etc/init.d/ssh restart
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 查看状态&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo /etc/init.d/ssh status
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="3">
&lt;li>systemctl 命令（现代 systemd 方式）&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 启动&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo systemctl start sshd
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 停止&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo systemctl stop sshd
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 重启&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo systemctl restart sshd
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 查看状态&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo systemctl status sshd
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="4">
&lt;li>直接启动 sshd 进程&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 直接启动 sshd&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo /usr/sbin/sshd
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 使用特定配置文件启动&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo /usr/sbin/sshd -f /path/to/sshd_config
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>不同系统的区别：&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Ubuntu/Debian&lt;/strong> 系统中服务名通常是 &lt;code>ssh&lt;/code>&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">sudo service ssh start
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="2">
&lt;li>&lt;strong>CentOS/RHEL&lt;/strong> 系统中服务名通常是 &lt;code>sshd&lt;/code>&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">sudo service sshd start
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>注意事项：&lt;/p>
&lt;ol>
&lt;li>现代 Linux 系统推荐使用 &lt;code>systemctl&lt;/code> 命令&lt;/li>
&lt;li>&lt;code>service&lt;/code> 命令在新系统中实际上是 &lt;code>systemctl&lt;/code> 的封装&lt;/li>
&lt;li>&lt;code>/etc/init.d&lt;/code> 脚本方式是最传统的方法，但仍被支持&lt;/li>
&lt;li>直接启动 &lt;code>sshd&lt;/code> 进程通常用于调试目的&lt;/li>
&lt;/ol>
&lt;p>选择哪种方式主要取决于：&lt;/p>
&lt;ul>
&lt;li>系统版本&lt;/li>
&lt;li>个人习惯&lt;/li>
&lt;li>具体需求（如调试）&lt;/li>
&lt;/ul>
&lt;p>所有这些方法都能达到相同的目的，只是使用的方式不同。&lt;/p>
&lt;ol start="3">
&lt;li>SSH 配置文件位置&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 主配置文件&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo vim /etc/ssh/sshd_config
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 常见配置项示例&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Port &lt;span class="m">22&lt;/span> &lt;span class="c1"># SSH 端口&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">PermitRootLogin no &lt;span class="c1"># 禁止 root 登录&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">PasswordAuthentication yes &lt;span class="c1"># 允许密码认证&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="4">
&lt;li>检查 SSH 服务&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 检查 SSH 是否正在运行&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ps aux &lt;span class="p">|&lt;/span> grep ssh
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 检查 SSH 端口是否开放&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo netstat -tulpn &lt;span class="p">|&lt;/span> grep ssh
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 检查防火墙是否允许 SSH&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo ufw status
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="5">
&lt;li>防火墙设置&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 允许 SSH 连接&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo ufw allow ssh
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 允许特定端口（如果修改了默认端口）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo ufw allow 2222/tcp
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>常见问题解决：&lt;/p>
&lt;ol>
&lt;li>&lt;strong>服务无法启动&lt;/strong>&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 查看详细日志&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo journalctl -u ssh
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 检查配置文件语法&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo sshd -t
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="2">
&lt;li>&lt;strong>权限问题&lt;/strong>&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 修复 SSH 目录权限&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo chmod &lt;span class="m">755&lt;/span> /etc/ssh
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo chmod &lt;span class="m">600&lt;/span> /etc/ssh/ssh_host_*_key
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo chmod &lt;span class="m">644&lt;/span> /etc/ssh/ssh_host_*_key.pub
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>安全建议：&lt;/p>
&lt;ol>
&lt;li>&lt;strong>基本安全配置&lt;/strong>&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 编辑 SSH 配置文件&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo vim /etc/ssh/sshd_config
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 推荐的安全设置&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">PermitRootLogin no
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">PasswordAuthentication no
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">MaxAuthTries &lt;span class="m">3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Protocol &lt;span class="m">2&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="2">
&lt;li>&lt;strong>使用密钥认证&lt;/strong>&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 在客户端生成密钥对&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ssh-keygen -t rsa -b &lt;span class="m">4096&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 将公钥复制到服务器&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ssh-copy-id username@server_ip
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>常用维护命令：&lt;/p>
&lt;ol>
&lt;li>&lt;strong>查看连接状态&lt;/strong>&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 查看当前 SSH 连接&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">who
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">w
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 查看 SSH 登录日志&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo cat /var/log/auth.log &lt;span class="p">|&lt;/span> grep ssh
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="2">
&lt;li>&lt;strong>配置文件备份&lt;/strong>&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 备份 SSH 配置&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>记住，每次修改 SSH 配置文件后，都需要重启 SSH 服务才能生效：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">sudo systemctl restart ssh
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这些是 Ubuntu 下管理 SSH 服务的基本操作，建议在修改配置时先备份，并保持一个可用的连接会话，以防配置错误导致无法连接。&lt;/p>
&lt;h1 id="ssh-使用指南">SSH 使用指南
&lt;/h1>&lt;h3 id="使用公网linux服务器为windows电脑做内网穿透">使用公网Linux服务器为Windows电脑做内网穿透
&lt;/h3>&lt;h4 id="方法一使用frp推荐稳定可靠">方法一：使用FRP（推荐，稳定可靠）
&lt;/h4>&lt;p>FRP (Fast Reverse Proxy) 是一款专为此类场景设计的工具，功能强大，支持断线重连，适合长期稳定使用。&lt;/p>
&lt;ol>
&lt;li>服务端配置 (Linux公网服务器)&lt;/li>
&lt;/ol>
&lt;p>下载并解压FRP:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-Bash" data-lang="Bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 前往 https://github.com/fatedier/frp/releases 找最新版Linux amd64链接&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">wget &lt;span class="o">[&lt;/span>最新版frp的linux_amd64.tar.gz链接&lt;span class="o">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">tar -zxvf frp_*.tar.gzcd frp_*/
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>配置 frps.ini:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-TOML" data-lang="TOML">&lt;span class="line">&lt;span class="cl">&lt;span class="c"># frps.ini[common]bind_port = 7000 # 用于和客户端通信的端口token = your_secure_password # 连接凭证，请务必修改dashboard_port = 7500 # [可选] 状态仪表盘端口dashboard_user = admin # [可选] 仪表盘用户名dashboard_pwd = admin_password # [可选] 仪表盘密码&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>开放服务器防火墙:&lt;/p>
&lt;p>确保开放 7000 端口以及你计划用于转发的端口（如下文的 7001）和仪表盘端口 7500。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-Bash" data-lang="Bash">&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># firewalld示例&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo firewall-cmd --add-port&lt;span class="o">=&lt;/span>7000/tcp --permanent
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo firewall-cmd --add-port&lt;span class="o">=&lt;/span>7001/tcp --permanent
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo firewall-cmd --reload
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>运行服务端:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-Bash" data-lang="Bash">&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">./frps -c ./frps.ini
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>建议设置为 systemd 服务以实现开机自启和后台运行。&lt;/p>
&lt;ol start="2">
&lt;li>客户端配置 (Windows内网电脑)&lt;/li>
&lt;/ol>
&lt;p>下载并解压FRP: 前往FRP的GitHub Releases页面，下载对应的 windows_amd64.zip 版本并解压。&lt;/p>
&lt;p>配置 frpc.ini (以穿透远程桌面为例):&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-TOML" data-lang="TOML">&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"># frpc.ini[common]server_addr = 你的服务器公网IPserver_port = 7000token = your_secure_password # 必须和服务端一致[rdp]type = tcplocal_ip = 127.0.0.1local_port = 3389 # Windows远程桌面默认端口remote_port = 7001 # 从公网访问的端口&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>运行客户端: 打开CMD或PowerShell运行：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"># 进入frp目录
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">.\frpc.exe -c .\frpc.ini
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>建议使用 nssm 等工具将其注册为Windows服务，实现开机自启。&lt;/p>
&lt;ol start="3">
&lt;li>如何连接&lt;/li>
&lt;/ol>
&lt;p>在任何电脑上打开“远程桌面连接”(mstsc)，计算机名处输入：你的服务器公网IP:7001。&lt;/p>
&lt;h4 id="方法二使用ssh反向隧道轻便快捷">方法二：使用SSH反向隧道（轻便快捷）
&lt;/h4>&lt;p>利用SSH内置功能，无需额外软件，适合临时、快速的连接。&lt;/p>
&lt;ol>
&lt;li>服务端配置 (Linux公网服务器)&lt;/li>
&lt;/ol>
&lt;p>编辑SSH配置文件，允许公网访问隧道端口：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-Bash" data-lang="Bash">&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo vim /etc/ssh/sshd_config
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 找到或添加 GatewayPorts 并设置为 yes：&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">GatewayPorts yes
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>重启SSH服务：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-Bash" data-lang="Bash">&lt;span class="line">&lt;span class="cl">sudo systemctl restart sshd
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="2">
&lt;li>客户端操作 (Windows内网电脑)&lt;/li>
&lt;/ol>
&lt;p>打开PowerShell或CMD，执行以下命令：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-PowerShell" data-lang="PowerShell">&lt;span class="line">&lt;span class="cl">&lt;span class="c"># -fN 表示后台运行且不执行远程命令，只做隧道# 格式: ssh -fN -R [服务器端口]:[本地IP]:[本地端口] [用户名]@[服务器IP]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">ssh&lt;/span> &lt;span class="n">-fN&lt;/span> &lt;span class="n">-R&lt;/span> &lt;span class="mf">7001&lt;/span>&lt;span class="err">:&lt;/span>&lt;span class="mf">127.0&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">0&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="mf">1&lt;/span>&lt;span class="err">:&lt;/span>&lt;span class="mf">3389&lt;/span> &lt;span class="n">your_user&lt;/span>&lt;span class="nv">@你的服务器公网IP&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>该命令会建立一个长连接隧道，关闭窗口则隧道断开。&lt;/p>
&lt;ol start="3">
&lt;li>如何连接&lt;/li>
&lt;/ol>
&lt;p>与FRP方式相同，在“远程桌面连接”中输入 你的服务器公网IP:7001。&lt;/p>
&lt;p>常见问题：localhost 不行但 127.0.0.1 可以？&lt;/p>
&lt;p>这是一个由于IPv6/IPv4解析优先级导致的问题。&lt;/p>
&lt;p>原因: localhost 可能被系统优先解析为IPv6的 ::1 地址，但你的目标服务（如远程桌面）仅在IPv4的 127.0.0.1 上监听。&lt;/p>
&lt;p>最佳解决方案: 无需排查，在所有配置（无论是FRP还是SSH）中，请始终使用 127.0.0.1 而不是 localhost。127.0.0.1 明确指向IPv4本地环回地址，能保证连接的准确性，是最简单、最可靠的做法。&lt;/p>
&lt;h3 id="通过-ssh-反向隧道将本地前后端暴露到公网">通过 SSH 反向隧道将本地前后端暴露到公网
&lt;/h3>&lt;ol>
&lt;li>
&lt;p>&lt;strong>准备公网服务器&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>获取公网服务器（如阿里云），记录 IP（如 &lt;code>203.0.113.1&lt;/code>）。&lt;/li>
&lt;li>确保安装 SSH 服务（OpenSSH）。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>配置公网服务器&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>编辑 &lt;code>/etc/ssh/sshd_config&lt;/code>，启用：
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">AllowTcpForwarding yes
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">GatewayPorts yes
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>重启 SSH：
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">sudo systemctl restart sshd
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>开放端口（如 3000、8000）：
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">sudo ufw allow &lt;span class="m">3000&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo ufw allow &lt;span class="m">8000&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>确保本地服务运行&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>前端：运行在 &lt;code>localhost:3000&lt;/code>（如 React）。&lt;/li>
&lt;li>后端：运行在 &lt;code>localhost:8000&lt;/code>（如 Flask）。&lt;/li>
&lt;li>确认本地可通过浏览器访问。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>配置 SSH 反向隧道&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>在本地运行：
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">ssh -R 3000:localhost:3000 -R 8000:localhost:8000 user@203.0.113.1
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>使用 &lt;code>autossh&lt;/code> 保持连接：
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">autossh -M &lt;span class="m">0&lt;/span> -R 3000:localhost:3000 -R 8000:localhost:8000 user@203.0.113.1
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>测试访问&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>访问 &lt;code>http://203.0.113.1:3000&lt;/code>（前端）和 &lt;code>http://203.0.113.1:8000&lt;/code>（后端）。&lt;/li>
&lt;li>确保前端 API 请求指向公网 IP（如 &lt;code>http://203.0.113.1:8000&lt;/code>）。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>可选：Nginx 优化&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>安装 Nginx：
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">sudo apt install nginx
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>配置 &lt;code>/etc/nginx/sites-available/default&lt;/code>：
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-nginx" data-lang="nginx">&lt;span class="line">&lt;span class="cl">&lt;span class="k">server&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kn">listen&lt;/span> &lt;span class="mi">80&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kn">server_name&lt;/span> &lt;span class="mi">203&lt;/span>&lt;span class="s">.0.113.1&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kn">location&lt;/span> &lt;span class="s">/&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="kn">proxy_pass&lt;/span> &lt;span class="s">http://localhost:3000&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kn">location&lt;/span> &lt;span class="s">/api/&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="kn">proxy_pass&lt;/span> &lt;span class="s">http://localhost:8000/&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>重启 Nginx：
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">sudo systemctl restart nginx
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>注意事项&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>保持本地电脑开机和网络稳定。&lt;/li>
&lt;li>配置 SSH 密钥认证提高安全性。&lt;/li>
&lt;li>检查防火墙和 CORS 设置。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ol>
&lt;h3 id="解决-ssh-连接远程主机超时未使用自动断开">解决 ssh 连接远程主机超时未使用自动断开
&lt;/h3>&lt;p>参考：https://blog.csdn.net/Gelomen/article/details/109121069&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-json" data-lang="json">&lt;span class="line">&lt;span class="cl">&lt;span class="err">这个问题可以通过配置&lt;/span> &lt;span class="err">SSH&lt;/span> &lt;span class="err">客户端来保持连接活跃。有以下几种解决方案：&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mi">1&lt;/span>&lt;span class="err">.&lt;/span> &lt;span class="err">修改&lt;/span> &lt;span class="err">SSH&lt;/span> &lt;span class="err">客户端配置文件（推荐方案）：&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">编辑&lt;/span> &lt;span class="err">~/.ssh/config&lt;/span> &lt;span class="err">文件（如果没有则创建），添加以下配置：&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="err">Host&lt;/span> &lt;span class="err">*&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="err">ServerAliveInterval&lt;/span> &lt;span class="mi">60&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="err">ServerAliveCountMax&lt;/span> &lt;span class="mi">3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">这个配置的含义是：&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">-&lt;/span> &lt;span class="err">ServerAliveInterval&lt;/span> &lt;span class="mi">60&lt;/span>&lt;span class="err">:&lt;/span> &lt;span class="err">每&lt;/span>&lt;span class="mi">60&lt;/span>&lt;span class="err">秒发送一次心跳包&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">-&lt;/span> &lt;span class="err">ServerAliveCountMax&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="err">:&lt;/span> &lt;span class="err">如果连续&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="err">次心跳包没有响应，则断开连接&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mi">2&lt;/span>&lt;span class="err">.&lt;/span> &lt;span class="err">在建立&lt;/span> &lt;span class="err">SSH&lt;/span> &lt;span class="err">连接时直接指定参数：&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="err">ssh&lt;/span> &lt;span class="err">-o&lt;/span> &lt;span class="err">ServerAliveInterval=&lt;/span>&lt;span class="mi">60&lt;/span> &lt;span class="err">-o&lt;/span> &lt;span class="err">ServerAliveCountMax=&lt;/span>&lt;span class="mi">3&lt;/span> &lt;span class="err">user@remote-server&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mi">3&lt;/span>&lt;span class="err">.&lt;/span> &lt;span class="err">如果是在使用&lt;/span> &lt;span class="err">SSH&lt;/span> &lt;span class="err">隧道，可以这样：&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="err">ssh&lt;/span> &lt;span class="err">-N&lt;/span> &lt;span class="err">-f&lt;/span> &lt;span class="err">-o&lt;/span> &lt;span class="err">ServerAliveInterval=&lt;/span>&lt;span class="mi">60&lt;/span> &lt;span class="err">-o&lt;/span> &lt;span class="err">ServerAliveCountMax=&lt;/span>&lt;span class="mi">3&lt;/span> &lt;span class="err">-L&lt;/span> &lt;span class="err">local-port:remote-host:remote-port&lt;/span> &lt;span class="err">user@remote-server&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mi">4&lt;/span>&lt;span class="err">.&lt;/span> &lt;span class="err">如果你是服务器管理员，也可以通过修改服务器端的&lt;/span> &lt;span class="err">SSH&lt;/span> &lt;span class="err">配置（/etc/ssh/sshd_config）来实现：&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="err">ClientAliveInterval&lt;/span> &lt;span class="mi">60&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="err">ClientAliveCountMax&lt;/span> &lt;span class="mi">3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">修改服务器配置后需要重启&lt;/span> &lt;span class="err">SSH&lt;/span> &lt;span class="err">服务：&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="err">sudo&lt;/span> &lt;span class="err">systemctl&lt;/span> &lt;span class="err">restart&lt;/span> &lt;span class="err">sshd&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">推荐使用第一种方案（修改客户端配置文件），因为：&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mi">1&lt;/span>&lt;span class="err">.&lt;/span> &lt;span class="err">只需配置一次，永久生效&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mi">2&lt;/span>&lt;span class="err">.&lt;/span> &lt;span class="err">对所有&lt;/span> &lt;span class="err">SSH&lt;/span> &lt;span class="err">连接都有效&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mi">3&lt;/span>&lt;span class="err">.&lt;/span> &lt;span class="err">不需要每次手动输入参数&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">注意：设置的时间间隔不要太短（比如小于&lt;/span>&lt;span class="mi">30&lt;/span>&lt;span class="err">秒），否则可能会增加不必要的网络开销。&lt;/span>&lt;span class="mi">60&lt;/span>&lt;span class="err">秒通常是一个比较好的选择。&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="服务器安装ssh服务-linux--windows">服务器安装ssh服务 (linux &amp;amp; windows)
&lt;/h3>&lt;ol>
&lt;li>linux&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">sudo apt update &lt;span class="c1"># 更新仓库&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo apt install openssh-server &lt;span class="c1"># 安装openssh&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo service ssh restart &lt;span class="c1"># 重启服务，然后就可以连接了，有时候root用户连不上，可以用普通用户登录再切换到root&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="2">
&lt;li>windows
参考： &lt;a class="link" href="https://blog.csdn.net/weixin_72910567/article/details/132414264" target="_blank" rel="noopener"
>https://blog.csdn.net/weixin_72910567/article/details/132414264&lt;/a>
&lt;img src="https://www.zata.cc/p/ssh%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/images/index/image-1.png"
width="851"
height="480"
srcset="https://www.zata.cc/p/ssh%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/images/index/image-1_hu14578937242918924772.png 480w, https://www.zata.cc/p/ssh%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/images/index/image-1_hu3635559005492360674.png 1024w"
loading="lazy"
alt="安装openssh服务"
class="gallery-image"
data-flex-grow="177"
data-flex-basis="425px"
>&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 1. 在设置-应用和功能里安装openssh服务&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 2. 查看是否安装成功&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Get-WindowsCapability -Online &lt;span class="p">|&lt;/span> ? Name -like &lt;span class="s1">&amp;#39;OpenSSH*&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 3. 开启服务&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">net start sshd
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 4. 设置开机自启动&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Set-Service -Name sshd -StartupType &lt;span class="s1">&amp;#39;Automatic&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="在windows客户机上实现类似ssh-copy-id功能即下次不需要输入密码">在Windows客户机上实现类似ssh-copy-id功能即下次不需要输入密码
&lt;/h3>&lt;h4 id="问题背景">问题背景
&lt;/h4>&lt;p>Windows 的 CMD 或 PowerShell 默认不支持 &lt;code>ssh-copy-id&lt;/code> 命令。本教程介绍如何在 Windows 上将 SSH 公钥复制到远程服务器（IP: 192.168.110.150，端口: 6001）以实现无密码登录。&lt;/p>
&lt;hr>
&lt;h4 id="方法-1手动复制-ssh-公钥">方法 1：手动复制 SSH 公钥
&lt;/h4>&lt;ol>
&lt;li>&lt;strong>检查本地 SSH 密钥&lt;/strong>：
&lt;ul>
&lt;li>查看公钥：&lt;code>type %USERPROFILE%\.ssh\id_rsa.pub&lt;/code>&lt;/li>
&lt;li>如无密钥，生成：&lt;code>ssh-keygen -t rsa -b 4096&lt;/code>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>登录远程服务器&lt;/strong>：
&lt;ul>
&lt;li>运行：&lt;code>ssh -p 6001 root@192.168.110.150&lt;/code>&lt;/li>
&lt;li>确保 &lt;code>~/.ssh&lt;/code> 目录存在：&lt;code>mkdir -p ~/.ssh &amp;amp;&amp;amp; chmod 700 ~/.ssh&lt;/code>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>复制公钥&lt;/strong>：
&lt;ul>
&lt;li>在 Windows 复制公钥内容：&lt;code>type %USERPROFILE%\.ssh\id_rsa.pub&lt;/code>&lt;/li>
&lt;li>在远程服务器编辑：&lt;code>vi ~/.ssh/authorized_keys&lt;/code>，粘贴公钥，保存。&lt;/li>
&lt;li>设置权限：&lt;code>chmod 600 ~/.ssh/authorized_keys&lt;/code>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>测试无密码登录&lt;/strong>：
&lt;ul>
&lt;li>运行：&lt;code>ssh -p 6001 root@192.168.110.150&lt;/code>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ol>
&lt;hr>
&lt;h4 id="方法-2使用-powershell-模拟-ssh-copy-id">方法 2：使用 PowerShell 模拟 ssh-copy-id
&lt;/h4>&lt;ol>
&lt;li>&lt;strong>确保 OpenSSH 客户端已安装&lt;/strong>：
&lt;ul>
&lt;li>检查：&lt;code>ssh -V&lt;/code>&lt;/li>
&lt;li>未安装则在“设置 &amp;gt; 应用 &amp;gt; 可选功能”中添加 OpenSSH 客户端。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>复制公钥&lt;/strong>：
&lt;ul>
&lt;li>运行：&lt;code>Get-Content $env:USERPROFILE\.ssh\id_rsa.pub | ssh -p 6001 root@192.168.110.150 &amp;quot;cat &amp;gt;&amp;gt; ~/.ssh/authorized_keys&amp;quot;&lt;/code>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>验证权限&lt;/strong>：
&lt;ul>
&lt;li>登录服务器：&lt;code>ssh -p 6001 root@192.168.110.150&lt;/code>&lt;/li>
&lt;li>运行：&lt;code>chmod 700 ~/.ssh &amp;amp;&amp;amp; chmod 600 ~/.ssh/authorized_keys&lt;/code>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>测试无密码登录&lt;/strong>：
&lt;ul>
&lt;li>运行：&lt;code>ssh -p 6001 root@192.168.110.150&lt;/code>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ol>
&lt;hr>
&lt;h4 id="方法-3安装-git-bash-或-wsl">方法 3：安装 Git Bash 或 WSL
&lt;/h4>&lt;ol>
&lt;li>&lt;strong>使用 Git Bash&lt;/strong>：
&lt;ul>
&lt;li>安装 Git for Windows，打开 Git Bash。&lt;/li>
&lt;li>运行：&lt;code>ssh-copy-id -p 6001 root@192.168.110.150&lt;/code>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>使用 WSL&lt;/strong>：
&lt;ul>
&lt;li>安装 WSL：&lt;code>wsl --install&lt;/code>&lt;/li>
&lt;li>在 Ubuntu 中安装 openssh-client：&lt;code>sudo apt update &amp;amp;&amp;amp; sudo apt install openssh-client&lt;/code>&lt;/li>
&lt;li>运行：&lt;code>ssh-copy-id -p 6001 root@192.168.110.150&lt;/code>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ol>
&lt;hr>
&lt;h4 id="注意事项">注意事项
&lt;/h4>&lt;ul>
&lt;li>确保远程服务器允许密码登录或已配置 root 密码。&lt;/li>
&lt;li>公钥复制后，检查 &lt;code>~/.ssh/authorized_keys&lt;/code> 文件内容和权限。&lt;/li>
&lt;li>测试无密码登录是否成功，如失败，检查 SSH 配置文件 &lt;code>/etc/ssh/sshd_config&lt;/code> 和服务器防火墙设置。&lt;/li>
&lt;/ul>
&lt;h3 id="本地机器生成密钥并复制到远程服务器下次ssh连接就不需要输入密码">本地机器生成密钥并复制到远程服务器（下次ssh连接就不需要输入密码）
&lt;/h3>&lt;p>注意：
ssh-copy-id 是专门为linux系统适配的，windows系统不好用，需要手动复制公钥到.ssh文件夹下面的authorized_keys文件中&lt;/p>
&lt;h4 id="linux">linux
&lt;/h4>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 生成 SSH 密钥对&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ssh-keygen -t rsa -b &lt;span class="m">4096&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 复制公钥到远程服务器&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ssh-copy-id username@hostname
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 查看已知主机&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">cat ~/.ssh/known_hosts
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>如果是windows服务器，使用如下方式将公钥内容追加&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="nb">echo&lt;/span> &lt;span class="s2">&amp;#34;你的公钥内容&amp;#34;&lt;/span> &amp;gt;&amp;gt; 你的用户目录/.ssh/authorized_keys
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="windows-下关闭-ssh-后台连接的方法-在使用端口转发设置参数为-f时">Windows 下关闭 SSH 后台连接的方法 （在使用端口转发设置参数为-f时）
&lt;/h3>&lt;ol>
&lt;li>使用任务管理器：&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="c"># 打开任务管理器的方法：&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"># 1. Ctrl + Shift + Esc&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"># 2. 右键任务栏 -&amp;gt; 任务管理器&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"># 3. Ctrl + Alt + Delete -&amp;gt; 任务管理器&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"># 在&amp;#34;详细信息&amp;#34;或&amp;#34;进程&amp;#34;标签下找到 ssh.exe 进程并结束&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="2">
&lt;li>使用命令行查找和终止进程：&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="c"># PowerShell 命令&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"># 查看 SSH 进程&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">Get-Process&lt;/span> &lt;span class="n">ssh&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"># 终止所有 SSH 进程&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">Get-Process&lt;/span> &lt;span class="n">ssh&lt;/span> &lt;span class="p">|&lt;/span> &lt;span class="nb">Stop-Process&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"># 或者使用 CMD 命令&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"># 查看 SSH 进程&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">tasklist&lt;/span> &lt;span class="p">|&lt;/span> &lt;span class="n">findstr&lt;/span> &lt;span class="s2">&amp;#34;ssh&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"># 通过 PID 终止进程&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">taskkill&lt;/span> &lt;span class="p">/&lt;/span>&lt;span class="n">PID&lt;/span> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="n">进程ID&lt;/span>&lt;span class="p">&amp;gt;&lt;/span> &lt;span class="p">/&lt;/span>&lt;span class="n">F&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"># 终止所有 SSH 进程&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">taskkill&lt;/span> &lt;span class="p">/&lt;/span>&lt;span class="n">F&lt;/span> &lt;span class="p">/&lt;/span>&lt;span class="n">IM&lt;/span> &lt;span class="n">ssh&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">exe&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="3">
&lt;li>如果使用 Git Bash：&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 查看 SSH 进程&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ps aux &lt;span class="p">|&lt;/span> grep ssh
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 终止进程&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">kill&lt;/span> &amp;lt;进程ID&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>建议：&lt;/p>
&lt;ol>
&lt;li>在使用 &lt;code>-Nf&lt;/code> 启动 SSH 连接时，可以记录下进程 ID：&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 将进程 ID 保存到文件&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ssh -Nf ... &lt;span class="p">&amp;amp;&lt;/span> &lt;span class="nb">echo&lt;/span> &lt;span class="nv">$!&lt;/span> &amp;gt; ssh_pid.txt
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="2">
&lt;li>创建一个批处理文件来管理连接：&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-batch" data-lang="batch">&lt;span class="line">&lt;span class="cl">&lt;span class="p">@&lt;/span>&lt;span class="k">echo&lt;/span> off
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">REM start_ssh.bat&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ssh -Nf ... &lt;span class="p">&amp;amp;&lt;/span> &lt;span class="k">echo&lt;/span> &lt;span class="nv">%ERRORLEVEL%&lt;/span> &lt;span class="p">&amp;gt;&lt;/span> ssh_pid.txt
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">REM stop_ssh.bat&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">for&lt;/span> &lt;span class="k">/f&lt;/span> &lt;span class="se">%%&lt;/span>i &lt;span class="k">in&lt;/span> &lt;span class="p">(&lt;/span>ssh_pid.txt&lt;span class="p">)&lt;/span> &lt;span class="k">do&lt;/span> taskkill /PID &lt;span class="se">%%&lt;/span>i /F
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">del&lt;/span> ssh_pid.txt
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>腾讯云修改为root登录</title><link>https://www.zata.cc/p/%E8%85%BE%E8%AE%AF%E4%BA%91%E4%BF%AE%E6%94%B9root%E7%99%BB%E5%BD%95/</link><pubDate>Mon, 24 Feb 2025 00:00:00 +0000</pubDate><guid>https://www.zata.cc/p/%E8%85%BE%E8%AE%AF%E4%BA%91%E4%BF%AE%E6%94%B9root%E7%99%BB%E5%BD%95/</guid><description>&lt;img src="https://www.zata.cc/p/%E8%85%BE%E8%AE%AF%E4%BA%91%E4%BF%AE%E6%94%B9root%E7%99%BB%E5%BD%95/image/%E8%85%BE%E8%AE%AF%E4%BA%91%E4%BF%AE%E6%94%B9root%E7%99%BB%E5%BD%95/%E8%85%BE%E8%AE%AF%E4%BA%91%E4%BF%AE%E6%94%B9root%E7%99%BB%E5%BD%95.jpg" alt="Featured image of post 腾讯云修改为root登录" />&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">sudo passwd root
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo vim /etc/ssh/sshd_config
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 修改 PermitRootLogin yes&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo systemctl restart ssh
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">如果需要通过密钥登录root,最好使用ssh-copy-id, 我试过自己粘贴,很麻烦
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;img src="https://www.zata.cc/p/%E8%85%BE%E8%AE%AF%E4%BA%91%E4%BF%AE%E6%94%B9root%E7%99%BB%E5%BD%95/image/%E8%85%BE%E8%AE%AF%E4%BA%91%E4%BF%AE%E6%94%B9root%E7%99%BB%E5%BD%95/%E8%85%BE%E8%AE%AF%E4%BA%91%E4%BF%AE%E6%94%B9root%E7%99%BB%E5%BD%95.jpg"
width="1034"
height="684"
srcset="https://www.zata.cc/p/%E8%85%BE%E8%AE%AF%E4%BA%91%E4%BF%AE%E6%94%B9root%E7%99%BB%E5%BD%95/image/%E8%85%BE%E8%AE%AF%E4%BA%91%E4%BF%AE%E6%94%B9root%E7%99%BB%E5%BD%95/%E8%85%BE%E8%AE%AF%E4%BA%91%E4%BF%AE%E6%94%B9root%E7%99%BB%E5%BD%95_hu17536468502381269354.jpg 480w, https://www.zata.cc/p/%E8%85%BE%E8%AE%AF%E4%BA%91%E4%BF%AE%E6%94%B9root%E7%99%BB%E5%BD%95/image/%E8%85%BE%E8%AE%AF%E4%BA%91%E4%BF%AE%E6%94%B9root%E7%99%BB%E5%BD%95/%E8%85%BE%E8%AE%AF%E4%BA%91%E4%BF%AE%E6%94%B9root%E7%99%BB%E5%BD%95_hu2933229082023721869.jpg 1024w"
loading="lazy"
alt="alt text"
class="gallery-image"
data-flex-grow="151"
data-flex-basis="362px"
>&lt;/p></description></item></channel></rss>