[{"content":"购买密钥说明\r免费密钥关注公众号后台，**输入“口令”**即可获取每日免费密钥，如需长期密钥，可按下方购买。\n1、价格说明\r详见如下：\n购买时长 赠送时长 总计时长 对应价格 1天 1天 2天 1元 7天 7天 14天 3.2元 30天 30天 60天 12.6元 90天 90天 180天 29.8元 180天 180天 360天 32元 永久 永久 永久 59.9元 2、支付方式\r扫码支付对应金额后，支付后截图。\n3、添加微信，\r添加时请备注工具名称，比如“批量图片合并为视频”。\n4、发送购买信息\r发送“购买软件名称+支付方式+订单截图（含订单号）+购买天数”给客服。\n","date":"2025-11-23T00:00:00Z","permalink":"https://2060.net.cn/p/buy_key/","title":"密钥购买"},{"content":"通用数据入库Python源码\r使用条件：\n数据库中的列在Excel表中完全存在，但Excel表中的列会比数据库中的列要多，多出来的这些列可以直接忽略。\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 import pymysql as py import pandas as pd from sqlalchemy import create_engine, inspect from urllib.parse import quote_plus import time word=\u0026#39;table_name\u0026#39; #table_name修改为你自己的表名称 sheet_name=\u0026#39;sheet1\u0026#39; #你的sheet页名称 path=r\u0026#39;your_path\u0026#39; #你的excel表本地路径 path=path+\u0026#34;\\\\\u0026#34;+word+\u0026#34;.xlsx\u0026#34; # 运行开始时间 start_time = time.time() print(\u0026#39;开始时间：\u0026#39; + time.strftime(\u0026#34;%Y-%m-%d %H:%M:%S\u0026#34;, time.localtime(start_time))) print(\u0026#34;-\u0026#34;*30) # 读取内容 df=pd.read_excel(path) rows_before=df.shape[0] #行数 # 运行结束时间 end_time = time.time() print(\u0026#39;结束时间：\u0026#39; + time.strftime(\u0026#34;%Y-%m-%d %H:%M:%S\u0026#34;, time.localtime(end_time))) # 计算运行时长 duration = int(end_time - start_time) # 将秒数转换为\u0026#34;几小时几分几秒\u0026#34;的格式 hours = duration // 3600 minutes = (duration % 3600) // 60 seconds = duration % 60 # 输出格式化后的运行时长 print(f\u0026#34;读取完成，处理用时：{hours}小时 {minutes}分 {seconds}秒\u0026#34;) print(\u0026#34;\u0026#34;) excel_file1=path df1=pd.read_excel(excel_file1,sheet_name=sheet_name) password=\u0026#39;password\u0026#39; #你的数据库密码 # 创建MySQL引擎 engine = create_engine(f\u0026#39;mysql+pymysql://你的用户名:{quote_plus(password)}@你的IP地址:端口号/数据库名称\u0026#39;) # 获取数据库表的列名 inspector = inspect(engine) columns_to_insert = inspector.get_columns(\u0026#39;orders\u0026#39;) columns_to_insert = [col[\u0026#39;name\u0026#39;] for col in columns_to_insert] # 提取列名 # 筛选 DataFrame 中存在的列（忽略多余的列） columns_to_insert = [col for col in columns_to_insert if col in df1.columns] if not columns_to_insert: print(\u0026#34;数据库表中没有匹配的列，无法插入数据。\u0026#34;) else: df_to_insert = df1[columns_to_insert].copy() # 仅选择需要插入的列 # 插入数据到数据库 try: df_to_insert.to_sql(name=\u0026#39;orders\u0026#39;, con=engine, if_exists=\u0026#39;append\u0026#39;, index=False) print(f\u0026#34;{word}插入成功: {df_to_insert.shape[0]}行, {df_to_insert.shape[1]}列\u0026#34;) except Exception as e: print(f\u0026#34;数据插入失败，错误信息：{e}\u0026#34;) engine.dispose() # 运行结束时间 end_time1 = time.time() print(\u0026#39;结束时间：\u0026#39; + time.strftime(\u0026#34;%Y-%m-%d %H:%M:%S\u0026#34;, time.localtime(end_time1))) # 计算运行时长 duration1 = int(end_time1 - end_time) # 将秒数转换为\u0026#34;几小时几分几秒\u0026#34;的格式 hours = duration1 // 3600 minutes = (duration1 % 3600) // 60 seconds = duration1 % 60 print(\u0026#34;-\u0026#34;*30) # 输出格式化后的运行时长 print(f\u0026#34;{word}数据插入成功，用时：{hours}小时 {minutes}分 {seconds}秒\u0026#34;) ","date":"2025-11-20T00:00:00Z","permalink":"https://2060.net.cn/p/%E6%95%B0%E6%8D%AE%E5%85%A5%E5%BA%93/","title":"通用Python数据入库脚本"},{"content":"Anaconda最小化打包exe环境及方案\r一、最小化 Anaconda 虚拟环境\r1️⃣ 创建最简环境\r1 conda create -n pdf2word python=3.9 --no-default-packages --no-default-packages 能避免安装庞大的工具包（如 pip、setuptools 等默认依赖）。\n进入环境：\n1 conda activate pdf2word 2️⃣ 仅安装必要依赖\r创建一个 requirements.txt，\n1 2 pdf2docx==0.5.6 pymupdf==1.22.5 然后执行pip install -r requirements.txt\n🧰 二、打包成可执行文件（推荐：PyInstaller）\r1️⃣ 安装 PyInstaller\r1 pip install pyinstaller 2️⃣ 打包命令（最小化体积）\r1 pyinstaller --onefile --noconsole --clean --strip your_script.py 说明：\n--onefile：打包成单个 exe 文件 --noconsole：不弹出命令行窗口 --clean：清除缓存和临时文件 --strip：剔除符号表、调试信息，显著缩小体积 3️⃣ 得到的文件\r在 dist/ 目录中生成：\n1 2 dist/ └─ your_script.exe 🧩 三、进一步瘦身技巧\r✅ （可选）移除不必要的依赖模块\rPyInstaller 默认会将 pdf2docx 依赖的 lxml、PyQt5、PyMuPDF 全打进去，但其实不需要全部。\n你可以手动编辑生成的 .spec 文件（在打包后生成），找到：\n1 2 3 4 5 a = Analysis( [\u0026#39;your_script.py\u0026#39;], ... hiddenimports=[], ) 添加：\n1 excludes=[\u0026#39;PyQt5\u0026#39;, \u0026#39;numpy\u0026#39;, \u0026#39;matplotlib\u0026#39;, \u0026#39;pandas\u0026#39;, \u0026#39;PIL\u0026#39;] 然后重新打包：\n1 pyinstaller your_script.spec --clean --strip 如果打包后无法运行，检查排除的依赖包，是否有运行时需要的必备包也被排除掉了。\n🪶 四、用 UPX 再压缩（强烈推荐）\r安装 UPX：\nWindows 版本下载：https://upx.github.io/ 解压后将 upx.exe 加入 PATH。 然后执行：\n1 pyinstaller --onefile --noconsole --clean --strip --upx-dir \u0026#34;C:\\path\\to\\upx\u0026#34; your_script.py ⚡ UPX 通常能再压缩 50%～70% 的体积。 实测：原始 60MB → UPX 压缩后 10MB 左右。\n⚙️ 五、最终结果\r优化方式 打包后体积 默认打包 ~60MB --strip + 精简依赖 ~25MB + UPX 压缩 ✅ 5–8MB 六、给打包后的exe文件增加图标\r注意事项\rICO 文件格式 必须是标准 .ico 格式。 推荐大小：128×128 或 256×256 像素，包含多个尺寸（16×16、32×32、48×48、128×128），这样在不同缩放下都清晰。 将ico文件命名为app.ico，放在主目录下，如果脚本中存在图片调用，使用\u0026ndash;add-data添加图片，注意脚本中使用os和sys库调用图片位置，不然打包后可能会找不到图片。 使用以下命令进行打包： 1 2 3 4 5 6 7 pyinstaller --clean --onefile --noconsole ^ --icon=app.ico ^ --add-data \u0026#34;pic1.png;.\u0026#34; ^ --add-data \u0026#34;pic2.png;.\u0026#34; ^ --hidden-import=PIL --hidden-import=PIL._tkinter_finder ^ --hidden-import=PIL.Image --hidden-import=PIL.ImageTk ^ batch_pdf_to_word.py ","date":"2025-11-08T00:00:00Z","permalink":"https://2060.net.cn/p/exe%E6%89%93%E5%8C%85/","title":"Anaconda最小化打包exe环境及方案"},{"content":"PDF 转 Word 工具（支持批量转换）\r纯净无广告的pdf转word工具，离线、安全开箱即用，无需安装复杂环境。\n一、获取方式\r方式一（百度网盘链接）：https://pan.baidu.com/s/1h_l8Ol_Fr2xsr-4Vwo4-0g?pwd=in2h\n方式二：关注公众号【阿呆报告】后台，输入“口令”，即可获取当日免费密钥。\n📦 文件解压后直接运行，无需安装。\n二、功能介绍\r一键批量转换： 1️⃣ 选择存放 PDF 文件的文件夹路径； 2️⃣ 设置转换后 Word 文件的保存路径。\n点击 “开始转换” 按钮后， 程序会自动帮你批量处理所有文件， 几十上百个 PDF 也能一次搞定！\n1、实时进度 \u0026amp; 日志面板\r不用盲等 ⏳ 每个文件的转换进度都有 进度条显示， 还配有 日志窗口，实时记录转换状态。\n转换完成后可查看全部日志， 方便确认哪些文件已完成、哪些有问题。\n2、纯本地运行，数据更安全\r所有转换操作都在你自己的电脑中完成。 📂 不联网、不上传、不存云端， 无论是公司文件还是私人资料，都可放心使用。\n三、演示视频\r下载完成后，直接双击运行程序（版本不同界面可能略有差异）\n1️⃣ 在第一个输入框中选择 PDF 文件所在文件夹 2️⃣ 在第二个输入框中选择 Word 文件保存路径 3️⃣ 点击 “开始转换”\n您的浏览器不支持 video 标签。\r然后你就可以去喝杯咖啡 ☕，\r程序会自动帮你搞定一切～\r四、价格说明\r本工具完全免费，如果觉得好用可以给作者加个鸡腿~\n","date":"2025-11-08T00:00:00Z","permalink":"https://2060.net.cn/p/pdf2word/","title":"pdf转word封装脚本"},{"content":"在 layouts/partials/footer/custom.html 里添加以下 JS 代码，其中 s1 是网站创建日期。代码参考自这里 ，加上了小时和分钟的计算。\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 \u0026lt;!-- Add blog running time (with seconds) --\u0026gt; \u0026lt;script\u0026gt; // 网站创建日期（格式：年-月-日，可根据实际调整） const startDate = \u0026#39;2025-9-5\u0026#39;; // 转换为Date对象（处理不同浏览器的日期格式兼容性） const s1 = new Date(startDate.replace(/-/g, \u0026#34;/\u0026#34;)); // 计算并更新运行时间的函数 function updateRunningTime() { const s2 = new Date(); // 当前时间 const timeDifference = s2.getTime() - s1.getTime(); // 时间差（毫秒） // 计算天、时、分、秒（向下取整） const days = Math.floor(timeDifference / (1000 * 60 * 60 * 24)); const hours = Math.floor((timeDifference % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)); const minutes = Math.floor((timeDifference % (1000 * 60 * 60)) / (1000 * 60)); const seconds = Math.floor((timeDifference % (1000 * 60)) / 1000); // 新增秒级计算 // 格式化输出（补零为两位数，优化显示效果） const formattedTime = `${days}天 ${String(hours).padStart(2, \u0026#39;0\u0026#39;)}小时 ${String(minutes).padStart(2, \u0026#39;0\u0026#39;)}分钟 ${String(seconds).padStart(2, \u0026#39;0\u0026#39;)}秒`; // 更新页面元素内容（确保页面有id为runningdays的元素） const targetElement = document.getElementById(\u0026#39;runningdays\u0026#39;); if (targetElement) { targetElement.innerHTML = formattedTime; } } // 初始化执行一次 updateRunningTime(); // 每秒（1000毫秒）更新一次，实现实时秒级刷新 setInterval(updateRunningTime, 1000); \u0026lt;/script\u0026gt; 再在 layouts/partials/footer/footer.html 里添加以下代码：\n1 \u0026lt;div class=\u0026#34;running-time\u0026#34;\u0026gt;本站已稳定运行：\u0026lt;span id=\u0026#34;runningdays\u0026#34;\u0026gt;\u0026lt;/span\u0026gt;\u0026lt;/div\u0026gt; 在 assets/scss/partials/footer.scss 里添加风格样式，这里单独把计时的部分加粗，并改了颜色。\n1 2 3 4 5 6 7 8 9 .running-time { color: var(--card-text-color-secondary); font-weight: normal; .running-days { font-weight: bold; color: var(--emphasize-text-color); } } 上面的计时部分设置成 var(–emphasize-text-color)，这样能比较方便地在 assets/scss/partials/variables.scss 里设置暗色模式的颜色\n1 2 3 4 5 6 7 --accent-color-text: #fff; --body-text-color: #b0b0b0; --emphasize-text-color: #9e8f9f; // Add emphasize font color \u0026amp;[data-scheme=\u0026#34;dark\u0026#34;] { --emphasize-text-color: #d5cfc4; // Add emphasize font color for dark scheme } 本篇文章参考：KUL宝藏库修改。\n","date":"2025-11-05T00:00:00Z","permalink":"https://2060.net.cn/p/hugo%E4%B8%AA%E4%BA%BA%E5%8D%9A%E5%AE%A2%E6%B7%BB%E5%8A%A0%E8%BF%90%E8%A1%8C%E6%97%B6%E9%95%BF/","title":"Hugo页面底栏添加“网站运行时长”stack主题"},{"content":"日常必备工具合集\nanaconda：https://pan.baidu.com/s/1UnMsU0Qz8cQLTDgzEXq8HA?pwd=g3eg\ntypora：https://pan.baidu.com/s/1l3tBKyRGGgtQ8lcI1JuEMQ?pwd=y7ye\n免费本地视频录制工具：https://pan.baidu.com/s/12rwW-GYpzYuNYMpaEzAdZw?pwd=qwq2\n好用的服务器管理工具：XmanagerPower\nTableau：https://pan.baidu.com/s/1ryM_yYTyw5sH00QQ5zvlOQ?pwd=xp3i\n格式工厂：\n批量图片转视频工具：https://pan.baidu.com/s/1mQmsXsUaCHrTnZ-dyYpXFw?pwd=x4eu\npdf批量转word工具：https://pan.baidu.com/s/1h_l8Ol_Fr2xsr-4Vwo4-0g?pwd=in2h\nCherry Studio：\n压缩文件解压（开源安全免费7-zip）：https://pan.baidu.com/s/12bQGnPfoAfpCuVPGropFaw?pwd=f6xa\nDbeaver：\nNavicat15：\nEverything：\nMindManager：\nNeatReader：\npotplater：\nARCHPR解压密码破解：https://pan.baidu.com/s/1O1gCCNsApCTZBBWUkh8zlA?pwd=68nk\n对于简单的密码可以破解，密码长度多长，破解难度越大。\n数据恢复工具：Recoverit\n当数据不慎删除时，是可使用该工具恢复已删除的数据。\n电脑重装或电脑密码重置工具：微PE工具箱\n国产编码游戏脚本制作工具：易语言\nRPA自动化采集工具：影刀\n颜色拾取工具(ColorPix)：https://pan.baidu.com/s/1asDprJnm_djkKh2Vwe6lcw?pwd=ggxj\n电脑磁盘划分工具：DiskGenius\n可以直接使用的Python脚本：\n批量汇总Excel数据\n数据库连接\nODBC数据库连接插件：mysql-connector-odbc-noinstall\noffice软件安装工：Office Tool Plus\n快速网站搭建（hugo）：https://pan.baidu.com/s/183AUw_5rDSead1MzIjT9og?pwd=8fxu\ngithub desktop汉化工具：https://pan.baidu.com/s/1LFI-9ks4rYIOZQGbD5zgYA?pwd=tyv4\n","date":"2025-11-04T00:00:00Z","permalink":"https://2060.net.cn/p/%E5%8A%9E%E5%85%AC%E7%94%B5%E8%84%91%E8%A3%85%E6%9C%BA%E5%BF%85%E5%A4%87/","title":"日常办公必备工具合集"},{"content":"🧩 Windows 开启 Linux 子系统（WSL）详细指南\r很多小伙伴在 Windows 上想体验 Linux 环境，最方便的方式就是通过 WSL（Windows Subsystem for Linux）。下面带你一步步完成开启与安装。\n一、开启前的准备检查 ✅\r1️⃣ 按下 Win + R 键，输入：\n1 optionalfeatures 然后回车。\n2️⃣ 在弹出的 “Windows 功能” 窗口中，勾选以下两项：\n✅ 适用于 Linux 的 Windows 子系统 ✅ 虚拟机平台（有时显示为 “虚拟机监控程序平台”） ⚠️ 如果此处有修改，点击【确定】后务必重启电脑才能生效。\n二、开启 WSL 的完整流程 🪄\r1️⃣ 以管理员身份打开 PowerShell（右键「开始菜单」 → 「Windows PowerShell（管理员）」）\n2️⃣ 启用 WSL 功能\n1 dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart 3️⃣ 查看是否已有安装的 Linux 系统\n1 wsl -l -v （如果没有显示内容，说明尚未安装，可忽略）\n4️⃣ 安装 WSL 与 Linux 系统\n1 wsl --install 该命令将默认安装最新版 Ubuntu。 如果想安装其他系统，可以先查看可选列表：\n1 wsl --list --online 再执行安装命令，例如：\n1 wsl --install -d Ubuntu-24.04 📘 若安装过程中遇到问题，可参考微软官方文档： 安装 WSL | Microsoft Learn\n三、常见异常与重装方法 🧯\r若安装失败或系统损坏，可通过以下命令卸载并重装：\n1 wsl --unregister Ubuntu 若提示系统不存在也没关系，继续重新安装即可。\n四、首次登录设置 👤\r安装完成后，系统会自动打开 Linux 终端窗口。\n此时需要：\n输入一个 用户名（可自行修改默认值） 设置一个 密码（⚠️ 注意：输入密码时不会显示字符，这属于正常现象） 完成后，即可进入 Linux 系统开始使用！\n通过以上步骤，你就可以在 Windows 上愉快地使用 Linux 命令行环境了。 这不仅能满足开发测试需求，还能让你在同一台电脑上轻松切换 Windows 与 Linux 的世界。\n","date":"2025-10-22T00:00:00Z","image":"https://2060.net.cn/p/windows%E5%8F%8C%E7%B3%BB%E7%BB%9F/image_hu_388a15aa1bf07afd.png","permalink":"https://2060.net.cn/p/windows%E5%8F%8C%E7%B3%BB%E7%BB%9F/","title":"Win11开启Linux子系统教程"},{"content":"Anaconda安装说明\r安装包已放在百度网盘：百度网盘\n1、双击打开已下载的anaconda文件，根据提示点击“next”\r2、点击\u0026quot;I Agree\u0026quot;同意安装\r3、这里点击哪个都行，如果你电脑上有多个租户，可以选择第2个，如果没有直接默认第1个就行，然后点击\u0026quot;next\u0026quot;\r4、这里的路径建议不要选择C盘，在其他盘合适位置新建一个anaconda文件夹安装（注意：路径中不要有中文）\r5、这里全部勾选\r如果电脑中已存在Python，那么第二项不建议勾选，最好安装完成后单独配置，或者以后直接用anaconda管理Python，把原有Python卸载。\n6、安装完成后，如果出现这个界面，直接将两个框中的\u0026quot;✓\u0026ldquo;取消即可\r7、（可选）修改清华源，打开电脑cmd命令提示符框，依次运行下面5条命令\r这一步可选，目的是提高环境的下载速度\n1 2 3 4 5 conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud//pvtorch/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge conda config --set show_channel_urls yes 安装包已放在百度网盘：百度网盘\nAnaconda官网下载地址：https://www.anaconda.com/download\n安装过程中如有问题，也可以加小编微信。\n","date":"2025-09-28T00:00:00Z","image":"https://2060.net.cn/p/anaconda%E5%AE%89%E8%A3%85%E8%AF%B4%E6%98%8E/image_hu_d8bd6e690478853f.png","permalink":"https://2060.net.cn/p/anaconda%E5%AE%89%E8%A3%85%E8%AF%B4%E6%98%8E/","title":"Anaconda安装说明"},{"content":"儿童趣味识字\r对于我们做家长的来说，孩子当前的学习情况如何，知识量到底掌握了多少，这都是我们最关心的问题，\n但很多情况下我们没有办法自定义测试孩子对知识的掌握情况，\n我家小孩7岁，现在刚上大班，为了测试他认识了多少汉字，又防止他反感，于是我就做了这么一个html格式的应用，便于我测试他对汉字的掌握情况，\n当做完这个工具后，我发现，其实放在其他学科，这些也是可以通用的，只需要替换题库的内容即可：\n功能一：多学科适用\r无论是测试汉字，还是英语单词，又或者是数学题，只需要替换数据文件即可（具体的使用教程我同文件放在了一起，需要的自行获取【百度网盘】）\n【真实效果】\n我家孩子刚学完拼音和简单汉字，就是用它检测，等后面英语单词学起来，把题库换成英语单词，照样能测；数学题也适用，一物多用。\n功能二：自定题库\r可以根据孩子的教材和学习进度，自定义题库，测试内容完全贴合孩子的实际学习情况。\n把教材上的生字词、单词或数学公式导入进去，就能针对性地检测学习效果。\n我把这个工具分享给了我的朋友，朋友的孩子使用这个工具时，她直接把语文课本后生字表导入题库，使用效果也还是很明显的。\n【使用场景】\n每次单元学习结束后，用教材配套的题库进行全面检测，找出薄弱环节，有针对性地强化练习。\n功能三：简单易用\r这个界面操作非常简单，只需要准备一个Excel表格，导入题目，就能开始测试。\n任何家长都能轻松上手，界面友好，孩子操作起来也很简单。\n在平时的家庭作业辅导前，先用这个工具做个小测试，找准孩子的“知识缺口”，再针对性地进行辅导，事半功倍。\n每次看到孩子因为精准复习而进步，那种成就感是无法替代的。\n了解孩子真正掌握了什么，没掌握什么，才是辅导的第一步。\n如果你也有需要，不妨试一试，这个是完全免费的，希望对大家有所帮助~\n我已经将工具放在这里，需要的自行获取：百度网盘\n","date":"2025-09-11T00:00:00Z","image":"https://2060.net.cn/p/%E8%B6%A3%E5%91%B3%E8%AF%86%E5%AD%97/%E8%B6%A3%E5%91%B3%E8%AF%86%E5%AD%97_hu_fe28438a8eb22503.png","permalink":"https://2060.net.cn/p/%E8%B6%A3%E5%91%B3%E8%AF%86%E5%AD%97/","title":"轻松识字，快乐成长！让孩子爱上学习！"},{"content":"服务器安全配置重要步骤\r服务器安全不容忽视，一旦被黑，后果不堪设想。了解并实施这些关键的安全配置，哪怕有人拿到了你的root权限，也能有效防止他们为所欲为。\n如果你只是来找命令如何使用的，请跳过上面这段内容，直接看下面具体的命令配置即可；\n如果你是刚接触服务器，或者是刚做网站的小白，我希望你先看完前面这段话，不会浪费很多时间，应该会对你有所启发：\n首先你需要了解，为什么要修改这些关键的服务器安全配置？\n因为，当用户拿到root权限就可以访问与修改你服务器中任何内容，因此，可以做一些必要的设施，哪怕有其他人拿到了你服务器的root权限，也不能直接使用。\n你现在可能会感觉我的服务器没什么问题，谁会闲着没事攻击我？\n我能告诉你的就是，没有不可能，只有你想不到，这些都只能在你有一次被黑的经历后才会意识到安全的重要性，\n当然，我希望你永远都不会遇到。\n写给做博客网站小伙伴们的忠告：wordpress功能非常强大，但却非常臃肿，各种插件与系统更新维护将是你未来很大的一个问题，因此，如果你只是做个人博客，那么，我非常建议你了解一下hugo。\n接下来我会将我做的一些安全设置总结分享给你，希望对你有所帮助！\n1 2 3 4 5 6 7 8 下面的安全设置主要包括： 1、修改服务器SSH端口号； 2、创建非root用户，设置管理员权限； 3、指定某一特定用户可切换到root用户，其他用户不可切换到root，且切换到root用户时必须要使用密码； 4、禁用root用户直接使用SSH方式登录； 5、（可选）根据自己选择，可设置密钥登录或者密码登录； 6、（可选）如果有固定IP，可以设置只有在指定IP才可以登录； 7、设置登录失败次数锁定 我已将整篇内容放在这里，需要的可自行下载：百度网盘\n禁用root用户直接SSH登陆\r要设置禁止root用户直接SSH登录，并强制通过指定普通用户跳转到root，请按以下步骤操作：\n完整配置步骤\r1. 创建管理员用户（如果还没有）\r1 2 3 4 5 6 7 8 9 10 11 # 创建新用户（例如：newrtad，不建议使用admin等类似英语单词） sudo adduser newrtad # 设置密码（需要输入两次） sudo passwd \u0026lt;建议英文大写小子字母+特殊字符+数字组合，长度至少不要低于8位\u0026gt; # 将用户添加到sudo组（Ubuntu/Debian） sudo usermod -aG sudo newrtad # CentOS/RHEL系统使用wheel组 sudo usermod -aG wheel newrtad 2. 配置SSH禁止root登录\r编辑SSH配置文件：\n1 sudo nano /etc/ssh/sshd_config #如果命令失败，则检查服务器中是否有nano工具，如果没有则安装一下，也可以使用vim 修改或添加以下配置：\n1 2 3 4 5 6 7 8 9 10 11 # 修改SSH端口号(修改一个高位端口，然后测试使用新端口打开一个新的SSH窗口看能否正常链接，原端口先不要关，测试无问题后) port 51289 # 禁止root直接登录 PermitRootLogin no # 允许密码认证（如果使用密钥登录可设为no） PasswordAuthentication yes # 只允许指定用户登录（可选但推荐） AllowUsers newrtad 1 2 3 nano保存及退出命令： 保存：Ctrl+O 退出：Ctrl+X 重要提醒：\n修改SSH配置前务必保留一个root会话不退出 测试新配置成功后再关闭所有root会话 建议先在测试环境验证配置 3. 配置sudo权限（关键步骤）\r确保普通用户可以切换到root：\n1 2 # 编辑sudoers文件（安全操作） sudo visudo 在文件末尾添加：\n1 2 3 4 5 # 允许nertad用户无密码切换到root（可选，建议选下面需要输入密码的方式） newrtad ALL=(ALL) NOPASSWD: ALL # 或者要求输入密码（更安全） newrtad ALL=(ALL) ALL 4. 重启SSH服务\r1 2 3 4 5 # Ubuntu/Debian sudo systemctl restart sshd # CentOS/RHEL sudo systemctl restart sshd 5. 测试配置（重要！）\r不要关闭当前root会话，新开终端测试该用户是否能正常切换到root用户下：\n1 2 3 4 5 6 7 8 9 # 1. 用newrtad用户登录 ssh newrtad@your_server_ip # 2. 切换到root（两种方式） # 方式1：使用sudo（推荐） sudo su - # 方式2：使用su（需要root密码） su - 安全增强建议\r1. 禁用密码认证，使用SSH密钥\r1 2 3 4 5 6 7 8 # 在本地生成密钥（如果还没有） ssh-keygen -t rsa -b 4096 # 复制公钥到服务器 ssh-copy-id admin@your_server_ip # 修改SSH配置 sudo nano /etc/ssh/sshd_config 修改：\n1 2 PasswordAuthentication no PubkeyAuthentication yes 2. 限制SSH登录IP（可选）\r1 sudo nano /etc/hosts.allow 添加：\n1 sshd: 192.168.1.0/24, your_trusted_ip 3. 设置登录失败锁定\r1 sudo nano /etc/pam.d/sshd 在文件开头添加：\n1 auth required pam_tally2.so deny=3 unlock_time=600 onerr=fail 验证配置\r1 2 3 4 5 6 7 8 # 1. 检查SSH配置语法 sudo sshd -t # 2. 检查sudo权限 sudo -l -U newrtad # 3. 检查SSH服务状态 sudo systemctl status sshd 故障排除\r问题现象 解决方案 无法用newrtad登录 检查/etc/ssh/sshd_config中的AllowUsers 无法切换到root 检查/etc/sudoers中的权限配置 SSH连接被拒绝 检查防火墙：sudo ufw status 密码认证失败 确认PasswordAuthentication yes 最终安全配置示例\r1 2 3 4 5 6 7 8 # /etc/ssh/sshd_config Port 51289 PermitRootLogin no PasswordAuthentication no PubkeyAuthentication yes AllowUsers newrtad MaxAuthTries 3 LoginGraceTime 60 1 2 3 # /etc/sudoers newrtad ALL=(ALL) PASSWD: ALL Defaults:newrtad !requiretty 操作后测试清单\r✅ 用newrtad用户SSH登录成功 ✅ sudo su - 切换到root成功 ✅ root直接SSH登录被拒绝 ✅ 其他用户SSH登录被拒绝（如果设置了AllowUsers） ✅ SSH密钥认证正常工作（如果配置了） 重要提醒：\n修改SSH配置前务必保留一个root会话不退出 测试新配置成功后再关闭所有root会话 建议先在测试环境验证配置 定期备份SSH配置：sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak ","date":"2025-09-05T00:00:00Z","image":"https://2060.net.cn/p/%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%AE%89%E5%85%A8%E8%AE%BE%E7%BD%AE%E6%AD%A5%E9%AA%A4/image_hu_aa560c01f494c8f6.png","permalink":"https://2060.net.cn/p/%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%AE%89%E5%85%A8%E8%AE%BE%E7%BD%AE%E6%AD%A5%E9%AA%A4/","title":"服务器安全配置重要步骤"}]