首页
在线工具
统计
友链
Search
1
暴力破解忘记的zip,rar, pdf等文件密码
3,162 阅读
2
typecho添加打赏功能
1,736 阅读
3
躲避校园网客户端的检测实现移动热点开启
1,284 阅读
4
摸鱼人日历
1,264 阅读
5
创建自签名 ssl 证书
979 阅读
随笔杂记
Web建设
运维茶点
编程之路
网络配置指南
Huawei
网络安全
资源下载
生活中的点滴
登录
Search
标签搜索
HCNA
Python
Huawei
Linux
web
PC
Blog
windows
Network
Docker
HCNP
LOVE
Virus
eNSP
Zabbix
DNS
typecho
MySQL
k8s
HTTPS
TanHaX
累计撰写
76
篇文章
累计收到
76
条评论
首页
栏目
随笔杂记
Web建设
运维茶点
编程之路
网络配置指南
Huawei
网络安全
资源下载
生活中的点滴
页面
在线工具
统计
友链
搜索到
28
篇与
的结果
2025-05-22
Proxmox VE 挂载硬盘指南
Proxmox VE 挂载硬盘完全指南:从磁盘识别到 PVE 存储集成一、前期准备:硬件与环境检查1.1 物理硬盘连接确认裸机服务器:关闭服务器电源后,将新硬盘连接至 SATA/PCIe 接口,确保数据线和电源线稳固连接,开机后等待 BIOS 完成硬件自检。PVE 虚拟机:若为虚拟机添加硬盘,需在 PVE 管理界面进入虚拟机配置页,通过「硬件」→「添加」→「硬盘」选项配置,注意选择合适的总线类型(SATA/IDE/VirtIO)。1.2 系统连接与工具准备通过 SSH 连接至 PVE 服务器:ssh root@服务器IP -p 22确认系统工具已安装:apt-get update && apt-get install -y fdisk parted mkfs.ext4 btrfs-progs二、磁盘识别与状态检查2.1 查看系统已识别存储设备使用 lsblk 命令可直观查看系统磁盘结构:lsblk -f2.2 磁盘健康状态检测(选择)建议通过 smartctl 工具检查硬盘健康状态:smartctl -a /dev/sdb重点关注 "SMART overall-health self-assessment test result" 字段.三、磁盘分区与格式化操作3.1 交互式分区操作(fdisk)以创建单个主分区为例:fdisk /dev/sdb输入命令键序列n # 新建分区p # 主分区1 # 分区默认编号1回车 # 使用默认起始扇区回车 # 使用全部磁盘空间w # 保存并退出3.2 快速分区(适合全磁盘使用)若无需细分磁盘,可直接使用 parted 工具创建单分区:parted /dev/sdb mklabel gpt parted /dev/sdb mkpart primary ext4 0% 100%3.3 格式化文件系统根据使用场景选择文件系统:EXT4(通用场景):mount -t ext4 /dev/sdc1 /mnt/pve/sdb1或mkfs.ext4 -L "PVE_Storage" /dev/sdb1卷标设置-L "PVE_Storage"BTRFS(PVE 推荐,支持快照):mkfs.btrfs -f /dev/sdb1XFS(大文件优化):mkfs.xfs -L "LargeFiles" /dev/sdb1四、磁盘挂载与永久化配置4.1 创建挂载点目录建议在 /mnt 下创建专用目录:mkdir -p /mnt/pve/sdb14.2 临时挂载(测试用)mount /dev/sdb1 /mnt/pve/sdb14.3 永久挂载配置编辑 fstab 文件实现开机自动挂载:vi /etc/fstab添加以下内容(根据文件系统类型选择)ext4 配置/dev/sdb1 /mnt/pve/sdb1 ext4 defaults,nofail 0 0BTRFS 配置/dev/sdb1 /mnt/pve/sdb1 btrfs defaults,nofail 0 0📌 注意:添加 nofail 选项可避免因磁盘未就绪导致系统启动失败。4.4 加载配置并验证1. 加载所有fstab 条目mount -a2. 重载系统配置systemctl daemon-reload五、集成到 PVE 存储管理系统5.1 通过 Web 界面添加存储登录 PVE Web 管理界面(https:// 服务器 IP:8006)。进入「数据中心」→「存储」→「添加」→「目录」。配置参数:存储 ID:自定义(如 disk_storage)。目录路径:填写挂载点 /mnt/pve/sdb1。可用空间检查:勾选「启用」。内容类型:根据需求选择(虚拟机镜像 / 容器 / ISO 等)。5.2 验证存储集成成功添加后,可在存储列表中看到新设备,点击「内容」可查看已存储的虚拟机文件。六、高级操作与优化技巧6.1 BTRFS 特性与 PVE 结合创建 BTRFS 子卷优化存储管理:btrfs subvolume create /mnt/pve/sdb1/vmsbtrfs subvolume create /mnt/sdb1/template/iso在 PVE 中指定子卷存储路径:创建虚拟机时选择「存储」→「高级」→「子卷路径」。6.2 磁盘配额管理针对 BTRFS 文件系统设置空间限制:btrfs quota enable /mnt/pve/sdb1 quota limit 50GB /mnt/pve/sdb1/vms6.3 性能优化参数根据硬盘类型调整挂载参数:机械硬盘:添加 discard 参数启用 TRIM(SSD 适用)。SSD 硬盘:添加 noatime,nodiratime 参数减少写入:/dev/sdb1 /mnt/pve/sdb1 ext4 defaults,noatime,nodiratime 0 0七、常见问题与解决方案7.1 磁盘未识别问题检查硬件连接后执行:echo "- - -" > /sys/class/scsi_host/host0/scan(更新 SCSI 设备)。查看内核日志:dmesg | grep sdb,排查驱动加载问题。7.2 挂载权限错误若提示权限不足,检查目录属主:chown root:root /mnt/pve_storage 。PVE 虚拟机存储需确保目录权限为 755 或更高。7.3 fstab 配置错误修复 fstab 格式错误:fsck -f /dev/sdb1 。临时绕过 fstab 启动:开机时按 e 进入 GRUB 编辑模式,在内核参数后添加 init=/bin/bash 。八、实践总结重要数据备份:操作前对系统盘进行快照(PVE 中可通过「数据中心」→「快照」功能实现)。磁盘命名规范:在 fstab 中建议使用 UUID 而非设备名挂载,避免磁盘顺序变化导致错误:UUID=1a2b3c4d-5e6f /mnt/pve/sdb1 ext4 defaults 0 0定期健康检查:设置 cron 任务定期执行 smartctl 检测硬盘状态。
2025年05月22日
24 阅读
0 评论
1 点赞
2025-01-30
Debian 12 上的生产级部署 Zabbix 指南:从环境搭建到性能优化
Zabbix 7.0 在 Debian 12 上的生产级部署指南:从环境搭建到性能优化在现代 IT 运维体系中,Zabbix 作为开源监控解决方案的标杆,以其强大的监控能力和灵活的扩展性备受青睐。本文将详细介绍如何在 Debian 12 系统上部署 Zabbix 7.0 版本,涵盖从环境准备到性能优化的全流程,帮助运维人员快速搭建企业级监控平台。一、环境准备与仓库配置1.1 系统要求说明Zabbix 7.0 对硬件资源的基本要求如下:CPU:至少 2 核(中型监控环境建议 4 核以上)内存:4GB+(建议根据监控节点数量调整,每 100 个节点增加 1GB)存储:50GB+ SSD(数据库 IO 性能对监控响应至关重要)系统:Debian 12(bullseye)或更高版本1.2 添加官方仓库Zabbix 官方为 Debian 系统提供了稳定的软件仓库,通过以下命令添加:下载Zabbix 7.0仓库配置文件wget https://repo.zabbix.com/zabbix/7.0/debian/pool/main/z/zabbix-release/zabbix-release_latest_7.0+debian12_all.deb安装仓库配置包和刷新APT包索引dpkg -i zabbix-release_latest_7.0+debian12_all.deb apt update注意:执行dpkg -i时可能会提示依赖关系,可通过apt --fix-broken install解决二、数据库部署与安全配置2.1 MariaDB 数据库安装Zabbix 推荐使用 MariaDB 作为后端数据库,执行以下命令安装:安装MariaDB服务器apt install mariadb-server -y启动数据库服务并设置开机自启systemctl start mariadb systemctl enable mariadb运行安全初始化脚本mysql_secure_installation在 mysql_secure_installation 过程中,需要完成以下配置:设置 root 用户密码移除匿名用户访问禁止 root 用户远程登录删除测试数据库2.2 创建 Zabbix 专用数据库为确保数据隔离与安全,需为 Zabbix 创建独立数据库:登录MariaDB(使用刚才设置的root密码)mysql -uroot -p创建Zabbix数据库(使用utf8mb4字符集支持全字符集)CREATE DATABASE zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;创建专用数据库用户(请替换为强密码)CREATE USER 'zabbix'@'localhost' IDENTIFIED BY 'password';授予完整权限并刷新权限表GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'localhost'; SET GLOBAL log_bin_trust_function_creators = 1; FLUSH PRIVILEGES; QUIT;安全建议:密码应包含大小写字母、数字和特殊字符,长度不少于 12 位三、Zabbix 核心组件安装3.1 安装完整组件集通过 APT 包管理器安装 Zabbix 所需的全部组件:apt install zabbix-server-mysql zabbix-frontend-php zabbix-apache-conf zabbix-sql-scripts zabbix-agent -y该命令将安装以下组件:zabbix-server-mysql:Zabbix 服务器核心,处理监控数据收集zabbix-frontend-php:Web 管理界面,基于 PHP 开发zabbix-apache-conf:Apache 服务器配置文件zabbix-sql-scripts:数据库初始化脚本zabbix-agent:客户端代理程序,安装在被监控主机上四、数据库初始化与架构部署4.1 导入 Zabbix 数据库结构解压并导入数据库架构(输入zabbix用户密码)zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix4.2 恢复数据库安全设置导入完成后,关闭函数创建权限以增强安全性:mysql -u root -p SET GLOBAL log_bin_trust_function_creators = 0; FLUSH PRIVILEGES; QUIT;五、Zabbix 服务器与前端配置5.1 配置数据库连接修改 Zabbix 服务器配置文件,指向刚才创建的数据库:vim /etc/zabbix/zabbix_server.conf找到以下参数并修改(确保密码与数据库用户一致):# 数据库主机地址 DBHost=localhost # 数据库名称 DBName=zabbix # 数据库用户名 DBUser=zabbix # 数据库密码(请替换为实际设置的密码) DBPassword=password # 数据库端口(默认3306,若修改过请调整) DBPort=33065.2 PHP 运行环境配置Zabbix 前端基于 PHP 开发,需配置正确的时区和性能参数:vim /etc/php/8.2/apache2/php.ini主要修改以下内容:# 设置服务器时区(中国地区使用上海时区) date.timezone = Asia/Shanghai # 调整PHP内存限制(建议生产环境设置为256M以上) memory_limit = 256M # 设置最大执行时间(避免复杂报表加载超时) max_execution_time = 300 # 设置最大输入时间 max_input_time = 300 # 设置post数据最大大小 post_max_size = 16M5.3 Apache 配置优化Zabbix 提供的 Apache 配置文件可进一步优化:vim /etc/zabbix/apache.conf可添加以下性能优化参数:# 调整PHP FastCGI缓冲区大小 <IfModule mod_fcgid.c> FcgidBufferSize 128k FcgidMaxRequestLen 16777216 </IfModule> # 启用压缩提高页面加载速度 <IfModule mod_deflate.c> AddOutputFilterByType DEFLATE text/html text/css text/javascript application/javascript DeflateCompressionLevel 6 </IfModule>六、服务启动与部署验证6.1 启动 Zabbix 相关服务完成配置后,启动所有相关服务并设置开机自启:systemctl restart zabbix-server zabbix-agent apache2 systemctl enable zabbix-server zabbix-agent apache26.2 验证 Web 管理界面在浏览器中访问以下地址:http://服务器IP/zabbix首次访问会进入安装向导,需要完成以下步骤:如进入web首页时显示语言问题可以看我另一篇语言解决文章检查系统环境(确保 PHP 配置符合要求输入数据库连接信息(与配置文件一致)设置 Zabbix 服务器信息(可保持默认)创建管理员账户(默认账号:Admin,密码:zabbix)七、生产环境优化建议7.1 数据库性能优化在 MariaDB 配置文件/etc/mysql/mariadb.conf.d/50-server.cnf中添加:[mysqld] # 调整innodb缓冲池大小(建议设置为物理内存的50-70%) innodb_buffer_pool_size = 2G # 调整日志文件大小 innodb_log_file_size = 128M # 禁用DNS解析,提高连接速度 skip_name_resolve = ON # 优化查询缓存 query_cache_type = 1query_cache_size = 128M # 调整连接数(根据服务器性能设置) max_connections = 5007.2 Zabbix 服务器参数优化修改 Zabbix 服务器配置文件 /etc/zabbix/zabbix_server.conf:# 进程数配置(根据CPU核心数调整) StartPollers=50 StartPollersUnreachable=10 StartTrappers=20 StartPingers=10 StartDiscoverers=5 StartHTTPPollers=5 # 数据库连接池大小 DBMaxConnect=20 # 历史数据保存天数(默认90天,可根据需求调整) HistoryStoragePeriod=90 TrendStoragePeriod=3657.3 安全加固措施修改 Web 管理界面默认路径(提高安全性):mv /etc/zabbix/apache.conf /etc/zabbix/apache.conf.bak vim /etc/zabbix/apache.conf在文件中添加:Alias /monitor /usr/share/zabbix <Directory /usr/share/zabbix> # 原有配置... </Directory>访问路径变为http://服务器IP/monitor配置防火墙规则(使用 ufw):ufw allow 80/tcp ufw allow 10050/tcp # Zabbix Agent端口 ufw allow 10051/tcp # Zabbix Server端口 ufw enable八、常见问题排查8.1 服务启动失败检查 Zabbix 服务器日志:tail -f /var/log/zabbix/zabbix_server.log常见错误:数据库连接失败,需确认zabbix_server.conf中的密码正确内存不足问题:查看系统日志dmesg | grep -i oom8.2 Web 界面显示异常检查 PHP 错误日志:tail -f /var/log/apache2/error.log时区设置错误:确保php.ini中的date.timezone正确内存不足:增加php.ini中的memory_limit值8.3 数据采集延迟查看 Zabbix 服务器状态:zabbix_server -V检查数据库负载:top命令查看 MySQL 进程占用调整zabbix_server.conf中的进程数参数
2025年01月30日
13 阅读
0 评论
0 点赞
2024-12-08
麒麟系统修改忘记的密码
如果你在使用麒麟系统时忘记了密码,可以使用以下两种方法来重置密码。方法一:通过救援模式修改密码进入GRUB启动界面:开机时,当屏幕显示GRUB启动菜单时,选择第三项“高级选项”。在下一级菜单中,选择“救援模式”(Recovery Mode),然后按回车键。在root权限下修改密码:进入救援模式后,系统会启动到一个命令行界面,此时你已经获得了root权限。输入passwd命令,然后按回车键。系统会提示你输入新密码,输入并确认新密码后,密码即修改成功。方法二:通过单用户模式修改密码进入GRUB启动编辑界面:开机或重启时,当屏幕显示GRUB启动菜单时,按下“e”键进入编辑模式。屏幕上会显示GRUB的配置项,找到以“linux” 开头的那一行。编辑启动参数:在该行末尾添加init=/bin/bash console=tty0 或 rw init=/bin/bash,确保整个命令行的语法正确。修改完成后,按Ctrl+x键启动系统,此时系统会进入单用户模式。在单用户模式下修改密码:进入单用户模式后,系统会启动到一个命令行界面。输入passwd 用户名命令(替换用户名为你的实际用户名),然后按回车键。系统会提示你输入并确认新密码。注意,为了增强安全性,新密码应至少包含3种特殊字符。修改密码完成后,使用电源键重启系统。
2024年12月08日
466 阅读
0 评论
9 点赞
2024-09-06
KMS激活Windows/Office
KMS 激活服务,slmgr 命令激活 Windows 系统、Office激活步骤(管理员命令执行)设置服务 slmgr /skms kms.03k.org安装密钥 slmgr /ipk <版本对应秘钥>激活系统 slmgr /ato查看激活状态 slmgr -dlvKMS 服务器KMS 服务器1KMS 服务器2可用服务kms.03k.org 维护 CNAME 指向有效的服务telnet kms.03k.org 1688 测试服务是否可用tcping kms.03k.org 1688密钥Microsoft - KMS 客户端激活GitHub - kms-client-activation-keys.mdWindows Server(LTSC 版本)Windows Server 2025操作系统版本KMS 客户端安装密钥Windows Server 2025 StandardTVRH6-WHNXV-R9WG3-9XRFY-MY832Windows Server 2025 DatacenterD764K-2NDRG-47T6Q-P8T8W-YP6DFWindows Server 2025 Azure EditionXGN3F-F394H-FD2MY-PP6FD-8MCRCWindows Server 2022操作系统版本KMS 客户端安装密钥Windows Server 2022 DatacenterWX4NM-KYWYW-QJJR4-XV3QB-6VM33Windows Server 2022 Datacenter Azure EditionNTBV8-9K7Q8-V27C6-M2BTV-KHMXVWindows Server 2022 StandardVDYBN-27WPP-V4HQT-9VMD4-VMK7HWindows Server 2019操作系统版本KMS 客户端安装密钥Windows Server 2019 DatacenterWMDGN-G9PQG-XVVXX-R3X43-63DFGWindows Server 2019 StandardN69G4-B89J2-4G8F4-WWYCC-J464CWindows Server 2019 EssentialsWVDHN-86M7X-466P6-VHXV7-YY726Windows Server 2016操作系统版本KMS 客户端安装密钥Windows Server 2016 DatacenterCB7KF-BWN84-R7R2Y-793K2-8XDDGWindows Server 2016 StandardWC2BQ-8NRM3-FDDYY-2BFGV-KHKQYWindows Server 2016 EssentialsJCKRF-N37P4-C2D82-9YXRT-4M63BWindows Server (半年频道版本)Windows Server 版本 20H2、2004、1909、1903 和 1809操作系统版本KMS 客户端安装密钥Windows Server Datacenter6NMRW-2C8FM-D24W7-TQWMY-CWH2DWindows Server StandardN2KJX-J94YW-TQVFB-DG9YT-724CCWindows 11 和 Windows 10 (半年频道版本)操作系统版本KMS 客户端安装密钥Windows 10/11 专业版W269N-WFGWX-YVC9B-4J6C9-T83GXWindows 10/11 专业版 NMH37W-N47XK-V7XM9-C7227-GCQG9Windows 10/11 专业工作站NRG8B-VKK3Q-CXVCJ-9G2XF-6Q84JWindows 10/11 专业工作站 N9FNHH-K3HBT-3W4TD-6383H-6XYWFWindows 10/11 专业教育版6TP4R-GNPTD-KYYHQ-7B7DP-J447YWindows 10/11 专业教育版 NYVWGF-BXNMC-HTQYQ-CPQ99-66QFCWindows 10/11 教育版NW6C2-QMPVW-D7KKK-3GKT6-VCFB2Windows 10/11 教育版 N2WH4N-8QGBV-H22JP-CT43Q-MDWWJWindows 10/11 企业版NPPR9-FWDCX-D2C8J-H872K-2YT43Windows 10/11 企业版 NDPH2V-TTNVB-4X9Q3-TJR4H-KHJW4Windows 10/11 企业版 GYYVX9-NTFWV-6MDM3-9PT4T-4M68BWindows 10/11 企业版 G N44RPN-FTY23-9VTTB-MP9BX-T84FVWindows 10 (LTSC/LTSB 版本)Windows 10 LTSC 2019操作系统版本KMS 客户端安装密钥Windows 10 企业版 LTSC 2019M7XTQ-FN8P6-TTKYV-9D4CC-J462DWindows 10 企业版 N LTSC 201992NFX-8DJQP-P6BBQ-THF9C-7CG2HWindows 10 LTSB 2016操作系统版本KMS 客户端安装密钥Windows 10 企业版 LTSB 2016DCPHK-NFMTC-H88MJ-PFHPY-QJ4BJWindows 10 企业版 N LTSB 2016QFFDN-GRT3P-VKWWX-X7T3R-8B639Windows 10 LTSB 2015操作系统版本KMS 客户端安装密钥Windows 10 企业版 2015 LTSBWNMTR-4C88C-JK8YV-HQ7T2-76DF9Windows 10 企业版 2015 LTSB N2F77B-TNFGY-69QQF-B8YKP-D69TJ早期版本的 Windows ServerWindows Server 版本 1803操作系统版本KMS 客户端安装密钥Windows Server Datacenter2HXDN-KRXHB-GPYC7-YCKFJ-7FVDGWindows Server StandardPTXN8-JFHJM-4WC78-MPCBR-9W4KRWindows Server 版本 1709操作系统版本KMS 客户端安装密钥Windows Server Datacenter6Y6KB-N82V8-D8CQV-23MJW-BWTG6Windows Server StandardDPCNP-XQFKJ-BJF7R-FRC8D-GF6G4Windows Server 2012 R2操作系统版本KMS 客户端安装密钥Windows Server 2012 R2 Server StandardD2N9P-3P6X9-2R39C-7RTCD-MDVJXWindowsServer 2012 R2 DatacenterW3GGN-FT8W3-Y4M27-J84CP-Q3VJ9WindowsServer 2012 R2 EssentialsKNC87-3J2TX-XB4WP-VCPJV-M4FWMWindows Server 2012操作系统版本KMS 客户端安装密钥Windows Server 2012BN3D2-R7TKB-3YPBD-8DRP2-27GG4Windows Server 2012 N8N2M2-HWPGY-7PGT9-HGDD8-GVGGYWindows Server 2012 单语言版2WN2H-YGCQR-KFX6K-CD6TF-84YXQWindows Server 2012 特定国家/地区版4K36P-JN4VD-GDC6V-KDT89-DYFKPWindows Server 2012 Server StandardXC9B7-NBPP2-83J2H-RHMBY-92BT4Windows Server 2012 MultiPoint StandardHM7DN-YVMH3-46JC3-XYTG7-CYQJJWindows Server 2012 MultiPoint PremiumXNH6W-2V9GX-RGJ4K-Y8X6F-QGJ2GWindows Server 2012 Datacenter48HP8-DN98B-MYWDG-T2DCC-8W83PWindows Server 2008 R2操作系统版本KMS 客户端安装密钥Windows Server 2008 R2 Web 版6TPJF-RBVHG-WBW2R-86QPH-6RTM4Windows Server 2008 R2 HPC 版TT8MH-CG224-D3D7Q-498W2-9QCTXWindowsServer 2008 R2 StandardYC6KT-GKW9T-YTKYR-T4X34-R7VHCWindowsServer 2008 R2 企业版489J6-VHDMP-X63PK-3K798-CPX3YWindowsServer 2008 R2 Datacenter74YFP-3QFB3-KQT8W-PMXWJ-7M648面向基于 Itanium 系统的 Windows Server 2008 R2GT63C-RJFQ3-4GMB6-BRFB9-CB83VWindows Server 2008操作系统版本KMS 客户端安装密钥Windows Web Server 2008WYR28-R7TFJ-3X2YQ-YCY4H-M249DWindows Server 2008 StandardTM24T-X9RMF-VWXK6-X8JC9-BFGM2不带 Hyper-V 的 Windows Server 2008 StandardW7VD6-7JFBR-RX26B-YKQ3Y-6FFFJWindows Server 2008 企业版YQGMW-MPWTJ-34KDK-48M3W-X4Q6V不带 Hyper-V 的 Windows Server 2008 企业版39BXF-X8Q23-P2WWT-38T2F-G3FPGWindows Server 2008 HPCRCTX3-KWVHP-BR6TB-RB6DM-6X7HPWindows Server 2008 Datacenter7M67G-PC374-GR742-YH8V4-TCBY3不带 Hyper-V 的 Windows Server 2008 Datacenter22XQ2-VRXRG-P8D42-K34TD-G3QQC面向基于 Itanium 系统的 Windows Server 20084DWFP-JF3DJ-B7DTH-78FJB-PDRHK早期版本的 WindowsWindows 8.1操作系统版本KMS 客户端安装密钥Windows 8.1 专业版GCRJD-8NW9H-F2CDX-CCM8D-9D6T9Windows 8.1 专业版 NHMCNV-VVBFX-7HMBH-CTY9B-B4FXYWindows 8.1 企业版MHF9N-XY6XB-WVXMC-BTDCT-MKKG7Windows 8.1 企业版 NTT4HM-HN7YT-62K67-RGRQJ-JFFXWWindows 8操作系统版本KMS 客户端安装密钥Windows 8 专业版NG4HW-VH26C-733KW-K6F98-J8CK4Windows 8 专业版 NXCVCF-2NXM9-723PB-MHCB7-2RYQQWindows 8 企业版32JNW-9KQ84-P47T8-D8GGY-CWCK7Windows 8 企业版 NJMNMF-RHW7P-DMY6X-RF3DR-X2BQTWindows 7操作系统版本KMS 客户端安装密钥Windows 7 专业版FJ82H-XT6CR-J8D7P-XQJJ2-GPDD4Windows 7 专业版 NMRPKT-YTG23-K7D7T-X2JMM-QY7MGWindows 7 专业版 EW82YF-2Q76Y-63HXB-FGJG9-GF7QXWindows7 企业版33PXH-7Y6KF-2VJC9-XBBR8-HVTHHWindows 7 企业版 NYDRBP-3D83W-TY26F-D46B2-XCKRJWindows 7 企业版 EC29WB-22CC8-VJ326-GHFJW-H9DH4激活说明KMS 激活有 180 天期限,此期限称为激活有效间隔若要保持激活状态,您的系统必须通过至少每 180 天连接一次 KMS 服务器来续订激活默认情况下,系统每 7 天自动进行一次激活续订尝试在续订客户端激活之后,激活有效间隔重新开始综上所述,只要您不超过 180 天以上无法连接互联网,系统会自行续期保持激活状态Office(VOL 版本)激活步骤(管理员命令执行)进入安装目录 cd "C:\Program Files (x86)\Microsoft Office\Office16"32 位默认一般为 C:\Program Files (x86)\Microsoft Office\Office1664 位默认一般为 C:\Program Files\Microsoft Office\Office16Office16 是 Office 2016Office15 是 Office 2013Office14 是 Office 2010打开以上所说的目录,应该有个 OSPP.VBS 文件注册 KMS 服务 cscript ospp.vbs /sethst:skms.netnr.eu.org激活 Office cscript ospp.vbs /actOffice 密钥列表https://docs.microsoft.com/en-us/DeployOffice/vlactivation/gvlksHelphttps://teddysun.com/530.htmlhttp://kms.cangshui.nethttps://blog.03k.org/post/kms.html
2024年09月06日
145 阅读
0 评论
4 点赞
2024-04-15
解决 eNSP 错误代码 40 或使用 VirtualBox 无法为虚拟机 AR_Base 打开新任务的问题
最近遇到了 eNSP 无法正常启动设备的问题,错误代码显示为“40”。尝试了官方提供的解决方法,但都没有效果。在这里持续记录一下 eNSP 无法正常启动的解决方案1. 关闭 ”虚拟机平台“首先,打开控制面板,或者按下 Windows + R 组合键打开“运行”对话框,输入 control 后按下回车。在控制面板中,选择查看方式为“小图标”,然后打开“程序和功能”。在左上角的菜单中,选择 “启用或关闭 Windows 功能”。确保选项中的 虚拟机平台 没有被勾选。如果已经勾选了,取消勾选并重启电脑。重启后,看看问题是否已经解决了。
2024年04月15日
649 阅读
1 评论
8 点赞
2024-03-20
Python 扫描局域网存活设备
大无语了临近考试还在这里本末倒置的瞎搞!写这个没有什么技术含量的小工具,望各位大佬多担待一下。最近朋友的出租屋的网络出现多个DHCP服务器, 路由器有时候动态获取错误地址,所以使用 Python 编写了这个简单小工具以便了解局域网中哪些 IP 地址正在被使用和其主机名和MAC地址等信息(获取主机名和MAC还有点问题)。目前计划这个扫描工具实现以下功能:{timeline}{timeline-item color="#19be6b"}手动设置或者自动获取本地IP信息;{/timeline-item}{timeline-item color="#19be6b"}对指定或自动生成的子网内所有主机进行扫描,判断主机是否存活,并提取主机名、MAC地址和在线状态;{/timeline-item}{timeline-item color="#ed4014"}检测存活主机的端口使用状态;{/timeline-item}{timeline-item color="#ed4014"}手动设置检测超时时间;{/timeline-item}{timeline-item color="#ed4014"}手动设置线程;{/timeline-item}{/timeline}{lamp/}import ipaddress import socket import subprocess def scan_local_network(subnet=None): if subnet is None: local_ip = socket.gethostbyname(socket.gethostname()) subnet = ipaddress.ip_network(local_ip+'/24', strict=False) live_hosts = [] total_hosts = sum(1 for _ in subnet.hosts()) scanned_hosts = 0 for host in subnet.hosts(): scanned_hosts += 1 host = str(host) ping_process = subprocess.Popen(['ping', '-n', '1', '-w', '100', host], stdout=subprocess.PIPE, stderr=subprocess.PIPE) ping_output, _ = ping_process.communicate() if "TTL=" in ping_output.decode('gbk'): live_hosts.append((host, ping_output.decode('gbk'))) print(f"扫描进度:{scanned_hosts}/{total_hosts}", end='\r') return live_hosts def parse_ping_output(output): result = { "hostname": "", "mac_address": "", "status": "Offline" } # 提取主机名 for line in output.splitlines(): if line.startswith("Reply from"): hostname = line.split(" ")[2] result["hostname"] = hostname.replace(":", "") break # 提取 MAC 地址 for line in output.splitlines(): if line.startswith("MAC Address"): mac_address = line.split(":")[1].strip() result["mac_address"] = mac_address break # 判断端口状态 if "unreachable" not in output: result["status"] = "Online" return result def main(): # ASCII ascii_art = """ .--, .--, ( ( \.---./ ) ) '.__/o o\__.' {= ^ =} > - < / \\ // \\\\ //| . |\\\\ "'\ /'"_.-~^`'-. \ _ /--' ` ___)( )(___ (((__) (__))) ............................................. ping值稳定测精准 TanHaX 网络通畅似流云舒。 """ print(ascii_art) print("欢迎使用局域网IP扫描工具!") subnet = input("请输入要扫描的网段(例如 192.168.1.0/24),或 按回车键默认使用本地网段:") if subnet: try: subnet = ipaddress.ip_network(subnet, strict=False) live_hosts = scan_local_network(subnet) except ValueError: print("输入的网段格式不正确!") else: live_hosts = scan_local_network() if live_hosts: print("\n以下IP地址在使用中:") for host, output in live_hosts: parsed_data = parse_ping_output(output) print(f"[IP] {host} [Hostname] {parsed_data['hostname']} [MAC] {parsed_data['mac_address']} [Status] {parsed_data['status']}") print("扫描完成!") else: print("未发现任何活跃的主机。") if __name__ == "__main__": main()
2024年03月20日
211 阅读
0 评论
3 点赞
2024-02-21
安装程序时出现“Windows要求已数字签名的驱动程序”的问题
在为客户安装公司产品时,经常会在旧版微软系统上遇到 “Windows要求已数字签名的驱动程序” 的问题。在这里记录一下解决方法:由于微软宣布将停止支持SHA-1签署的数字签名证书,改为使用SHA-2。但部分旧版微软系统本身并不支持SHA-2,这将导致在这些系统上,大量更新证书的软件无法正常使用。更新补丁 在微软官方网站下载并安装最新的补丁程序 KB976932,以确保系统能够支持最新的数字签名证书。使用火绒安全补丁工具 您还可以选择使用火绒官方推出的修复工具:火绒安全-SHA-2代码签名补丁修复工具,此工具可以解决数字签名相关的问题。
2024年02月21日
317 阅读
0 评论
1 点赞
2024-02-20
优化 Python 批量备份交换机配置-重构部分功能
在游水的时候看到 @winty 大佬 被 @aa7088414 大佬重构的代码后 感觉可以再优化那么一丢丢。主要修改以下几点:代码结构整理:对原始代码进行了逻辑重构和优化,将部分重复代码提取成函数进行复用,简化代码结构。错误处理:在连接设备时添加了异常处理,并记录连接失败的设备信息。文件操作:使用了os.makedirs替换了os.path.join和os.makedirs组合,同时对异常进行了处理。数据读取:使用openpyxl库的iter_rows方法直接获取单元格值,避免了通过循环逐一获取单元格值的冗余操作。日志记录:使用logging库记录了操作日志,并对错误进行详细记录。代码细节:对变量和字典键值等进行了类型转换和判空处理。import json import logging import time from datetime import datetime import os import re from netmiko import ConnectHandler, exceptions from openpyxl import load_workbook # 取消以下注释开启调试模式 # logging.basicConfig(level=logging.DEBUG) # 读取excel内设备列表信息 def check_and_get_dev_list(filename, sheet_name): excel_information = [] wb = load_workbook(filename) sh = wb[sheet_name] # 获取最大行数 rows = list(sh.iter_rows(values_only=True)) sheet_header = [cell for cell in rows[0]] data = [dict(zip(sheet_header, row)) for row in rows[1:]] # 去除ip为空的数据 data = [i for i in data if i.get('ip') is not None] return data # 获取excel数据并整合成dev字典 def get_dev(): res = check_and_get_dev_list('./resource.xlsx', 'Sheet1') devices = [] for i in res: if i['protocol'] == 'telnet': i['type'] = i['type'] + '_telnet' dev = { 'device_type': str(i['type']), 'host': str(i['ip']), 'username': str(i['username']), 'password': str(i['password']), 'secret': str(i['enpassword']) if i['enpassword'] else None, 'port': str(i['port']), 'session_log': 'session.log' } devices.append(dev) return devices def get_cmds(): with open("./dis_cmds.conf", 'r', encoding='utf-8') as f: js = json.load(f) return js def devices_confbak(devices=None): if devices is None: devices = [] current_date = datetime.now().strftime("%Y-%m-%d") path = f'./conf_bak/{current_date}' try: os.makedirs(path, exist_ok=True) except OSError as e: logging.error(f"Failed to create directory: {path}, error: {e}") failed_ips = [] for dev in devices: try: with ConnectHandler(**dev) as conn: print('\n----------成功登录到:' + dev['host'] + '----------') if dev['secret'] and dev['secret'] != "None": try: conn.enable() except Exception as e: logging.error("enable登录失败: %s", e) pwd = f"{path}/{dev['host']}" os.makedirs(pwd, exist_ok=True) dis_cmds = get_cmds() for cmd_string_dict in dis_cmds: print(f"正在获取:{cmd_string_dict['name']}") time.sleep(0.1) output = None for dev_type, command in cmd_string_dict.items(): if dev['device_type'].startswith(dev_type): output = conn.send_command(command_string=command) if output is None: print(f"error:未找到设备类型为{dev['device_type']}的{cmd_string_dict['name']}预设命令,请检查并修改dis_cmds.conf文件") continue fname = f"{dev['host']}_{cmd_string_dict['name']}.txt" file_path = f"{pwd}/{fname}" with open(file_path, mode='w', encoding='utf8') as f: try: f.write(output) print(f"备份{fname}成功!") except PermissionError: print("*****-无写入权限,请将文件夹赋予读写权限-*****") except (exceptions.NetmikoAuthenticationException, exceptions.NetmikoTimeoutException, exceptions.ReadTimeout) as e: logging.error(f"连接设备{dev['host']}失败: {e}") failed_ips.append(dev['host']) except Exception as e: logging.error(f"发生了意料外的错误:{e}") failed_ips.append(dev['host']) if failed_ips: print("\n以下设备连接失败,请检查:") for ip in failed_ips: print(ip) return 0 def devices_autocheck(devices='', cmd=''): results = [] try: for device in devices: with ConnectHandler(**device) as conn: conn.enable() print('正在巡检:' + device['host'] + ' ...') result = [device['host'], device['device_type']] for item in cmd: if 'cisco_ios' in device['device_type']: output = conn.send_command(command_string=str(item['cisco'])) elif any(x in device['device_type'] for x in ['huawei', 'hp_comware']): conn.send_command(command_string='sys', expect_string=']') output = conn.send_command(command_string=str(item['huawei'])) result.append(output) results.append(result) except (exceptions.NetmikoAuthenticationException, exceptions.NetmikoTimeoutException, exceptions.ReadTimeout) as e: logging.error(f"连接设备{device['host']}失败: {e}") return results def get_mem(memstr, devtype=''): if 'cisco' in devtype: total_match = re.search(r'Processor Pool Total:\s+(\d+)', memstr) used_match = re.search(r'Used:\s+(\d+)', memstr) if total_match and used_match: total = int(total_match.group(1)) used = int(used_match.group(1)) percentage = used / total * 100 return f"{percentage:.0f}%" elif 'huawei' in devtype: match = re.search(r"Memory Using Percentage Is:\s*(\d+)%", memstr) if match: return match.group(1) + '%' return "No match found." def get_cpu(cpustr, devtype=''): if 'cisco' in devtype: match = re.search(r"CPU utilization for five seconds: (\d+)%", cpustr) if match: return match.group(1) + '%' elif 'huawei' in devtype: match = re.search(r"\b(\d+(\.\d+)?)%.*?\bMax", cpustr) if match: return match.group(1) + '%' return "No match found." if __name__ == '__main__': while True: print("\n##############################################\n") print("1:批量备份交换机信息与配置") print("2:批量巡检交换机设备") print("0:退出") option = input("请输入需要的操作编号:") if option == '1': dev = get_dev() devices_confbak(devices=dev) continue elif option == '2': cmds = [ {'cisco': 'show clock', 'huawei': 'display clock'}, {'cisco': 'show env power', 'huawei': 'display power'}, {'cisco': 'show env fan', 'huawei': 'display fan'}, {'cisco': 'show env temperature status', 'huawei': 'display environment'}, {'cisco': 'show processes cpu', 'huawei': 'display cpu-usage'}, {'cisco': 'show processes memory', 'huawei': 'display memory-usage'}, ] dev = get_dev() checkres = devices_autocheck(dev, cmds) for res in checkres: print('\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++') print(res[0] + '-巡检结果:') print('\n时钟:\n' + res[2]) print('电源:\n' + res[3]) print('风扇:\n' + res[4]) if 'Unrecognized command' in res[5]: print('温度:\n该设备不支持获取此数据!') else: print('温度:\n' + res[5]) print('CPU利用率:\n' + get_cpu(res[6], res[1])) print('内存利用率:\n' + get_mem(res[7], res[1])) print('\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++') continue elif option == '0': break else: print("请输入正确的编号!") 注:python 的版本为3.9以下是配套的文件dis_cmds.conf(修改时引号必须为英文双引号):[ {"name": "查看版本", "hp_comware": "display version", "huawei": "display version", "cisco_ios": "show version"}, {"name": "查看时间", "hp_comware": "display clock", "huawei": "display clock", "cisco_ios": "show clock"}, {"name": "查看序列号", "hp_comware": "display device ma", "huawei": "display device manufacture-info", "cisco_ios": "show inventory"}, {"name": "查看风扇", "hp_comware": "display fan", "huawei": "display fan", "cisco_ios": "show environment"}, {"name": "查看电源状态", "hp_comware": "display power", "huawei": "display power", "cisco_ios": "show environment power"}, {"name": "查看CPU利用率", "hp_comware": "display cpu-usage", "huawei": "display cpu-usage", "cisco_ios": "show processes cpu"}, {"name": "查看内存利用率", "hp_comware": "display memory", "huawei": "display memory-usage", "cisco_ios": "show processes memory"}, {"name": "查看VLAN配置", "hp_comware": "display vlan", "huawei": "display vlan", "cisco_ios": "show vlan"}, {"name": "查看二层接口状态", "hp_comware": "display interface brief", "huawei": "display interface brief", "cisco_ios": "show interfaces switchport"}, {"name": "查看三层接口IP", "hp_comware": "display ip interface brief", "huawei": "display ip interface brief", "cisco_ios": "show ip interface brief"}, {"name": "查看ACL控制列表", "hp_comware": "display acl", "huawei": "display acl all", "cisco_ios": "show access-lists"}, {"name": "查看路由表", "hp_comware": "display ip routing-table", "huawei": "display ip routing-table", "cisco_ios": "show ip route"}, {"name": "查看ARP表", "hp_comware": "display arp", "huawei": "display arp", "cisco_ios": "show arp"}, {"name": "查看MAC表", "hp_comware": "display mac-address", "huawei": "display mac-address", "cisco_ios": "show mac address-table"}, {"name": "查看日志", "hp_comware": "display logbuffer", "huawei": "display logbuffer", "cisco_ios": "show logging"}, {"name": "查看所有配置", "hp_comware": "display current-configuration", "huawei": "display current-configuration", "cisco_ios": "show running-config"} ]{cloud title="交换机批量备份_源码" type="lz" url="https://tanghan.lanzoul.com/ixtqL1ou6mla" password="ao5m"/}
2024年02月20日
113 阅读
0 评论
0 点赞
2024-02-19
解决 Debian 中的域名解析问题 - Temporary failure in name resolution
在新部署的镜像中更新软件源时遇到域名解析问题。1. 检查域名解析故障当遇到域名解析问题时,首先要确保网络连接正常工作。可以通过打开其他网页或使用其他网络工具来确认网络连接是否正常。2. 查看系统的 DNS 配置检查以下两个文件来查看系统的 DNS 配置:/etc/apt/sources.list 文件:检查 dns-nameservers 配置项,确保设置为可靠的、能够解析域名的 DNS 服务器地址。/etc/resolv.conf 文件:检查 nameserver 配置项,同样确保设置为可靠的 DNS 服务器地址。可以使用公共 DNS 服务器,如 Google DNS(8.8.8.8)或国内的公共 DNS(114.114.114.114)。3. 重启网络服务如果修改了 DNS 配置或者发现配置正确无误,但仍然无法解析域名,可以尝试重启网络服务。使用以下命令重启网络服务:systemctl restart networking通过执行以上步骤,您应该能够解决域名解析问题。如果问题仍然存在,可能需要进一步检查网络设置或尝试其他解决方法。
2024年02月19日
663 阅读
0 评论
1 点赞
2024-01-31
使用 Docker 快速搭建开发环境
1. 前期安装docker 这里就不写了,可以看往前写的文章!2. 安装开发环境这里可以根据需求来选择开发语言1. 安装C/C++开发环境sudo apt install build-essential这将安装编译C/C++程序所需的基本工具,包括gcc、g++等。2. 安装Java开发环境sudo apt install default-jdk这将安装默认的OpenJDK Java开发工具包。3. 安装Python开发环境sudo apt install python3 python3-pip这将安装Python 3及其包管理器pip。4. 安装Go语言开发环境sudo apt install golang-go这将安装Go语言的编译器和工具。3. 使用Docker部署开发环境C/C++环境:sudo docker run -it gccJava环境:sudo docker run -it openjdkPython环境:sudo docker run -it pythonGo语言环境:sudo docker run -it golang4. 在Docker容器中比如使用C语言开发:经过上述的搭建现在你可以在Docker容器中进行C语言开发了。你可以使用任何喜欢的文本编辑器编写C代码,例如Vim、Emacs或Nano。使用gcc编译器来编译和运行C代码,例如:gcc -o hello hello.c ./hello{lamp/}注:一般情况下 vim 是没有安装的,可以使用 Nano 来写1. 在Docker容器中安装Nano编辑器:在终端中运行以下命令以安装Nano编辑器:apt update apt install nano2. 使用Nano编辑器打开hello.c文件:运行以下命令以使用Nano编辑器打开hello.c文件:nano hello.c3. 在Nano编辑器中进行C代码编写:使用键盘导航键移动光标到正确位置,开始编写C代码。编写完毕后,按Ctrl + O保存文件,回车键ENTER确定,然后按Ctrl + X退出Nano编辑器。4. 编译和运行C代码:使用gcc编译器来编译和运行C代码,例如:gcc -o hello hello.c ./hello
2024年01月31日
132 阅读
0 评论
1 点赞
1
2
3