标签: Linux

  • Chromedriver 安装全平台指南

    Chromedriver 是用于驱动 Chrome 浏览器的 WebDriver,广泛用于自动化测试与网页数据抓取。本文提供各操作系统下安装 Chromedriver 的步骤。

    一、 各版本下载地址

    你可以在该页面查找与你本地 Chrome 浏览器版本对应的 chromedriver。

    https://googlechromelabs.github.io/chrome-for-testing/#stable

    macOS安装

    # 下载Chromedriver
    curl -O https://storage.googleapis.com/chrome-for-testing-public/136.0.7103.114/mac-x64/chromedriver-mac-x64.zip
    
    # 解压
    unzip chromedriver-mac-x64.zip
    
    # 安装到系统路径
    sudo cp chromedriver /usr/local/bin/
    
    # 设置可执行权限
    sudo chmod +x /usr/local/bin/chromedriver
    
    # 验证安装是否成功
    chromedriver --version

    Windows x64安装

    # 下载 Chromedriver:
    https://storage.googleapis.com/chrome-for-testing-public/136.0.7103.94/win64/chromedriver-win64.zip
    
    # 解压 chromedriver-win64.zip 至任意目录,例如:
    C:\tools\chromedriver
    
    # 添加环境变量:
    将 chromedriver.exe 所在目录添加至系统环境变量 Path。
    
    操作路径:
    此电脑 → 属性 → 高级系统设置 → 环境变量 → 编辑 Path
    
    # 验证是否安装成功:
    打开命令提示符(Win + R,输入 cmd)后执行:
    
    chromedriver --version

    Linux 安装

    # 下载Chromedriver
    
    wget https://storage.googleapis.com/chrome-for-testing-public/136.0.7103.94/linux64/chromedriver-linux64.zip
    
    # 解压
    unzip chromedriver-linux64.zip
    
    # 安装到系统路径
    sudo cp chromedriver /usr/local/bin/
    
    # 设置可执行权限
    sudo chmod +x /usr/local/bin/chromedriver
    
    # 验证安装是否成功
    chromedriver --version
  • 使用 opkssh 实现 OpenID 身份验证与 SSH 连接

    opkssh 是一个结合 OpenID 身份验证和 SSH 连接的工具,它能简化 SSH 密钥的管理,并提升 SSH 连接的安全性。与传统的 SSH 密钥验证方式不同,opkssh 通过 OpenID 身份验证来生成 SSH 密钥,使得用户的身份验证更加灵活与安全。

    1. 安装 opkssh

    opkssh 可以在 Windows、macOS 和 Linux 系统上使用。下面是详细的安装步骤:

    在 Windows 上安装 opkssh

    1. 打开 PowerShell 或命令提示符。
    2. 执行以下命令,下载并安装 opkssh:
    curl https://github.com/openpubkey/opkssh/releases/latest/download/opkssh-windows-amd64.exe -o opkssh.exe
    1. 下载完成后,你将获得 opkssh.exe 文件。你可以将它放在任何你想要的目录下,并通过命令行运行它。

    在 macOS 上安装 opkssh

    1. 打开终端。
    2. 执行以下命令,下载并安装 opkssh:
    curl -L https://github.com/openpubkey/opkssh/releases/latest/download/opkssh-osx-amd64 -o opkssh; chmod +x opkssh
    1. 这将下载 opkssh 文件并授予执行权限。你可以将其移动到 /usr/local/bin/ 目录,方便在终端中全局使用。

    在 Linux 上安装 opkssh

    Linux 系统支持多种架构。根据你的系统架构(x86_64 或 ARM64),选择相应的安装命令。

    • 对于 x86_64 架构的 Linux 系统:
    curl -L https://github.com/openpubkey/opkssh/releases/latest/download/opkssh-linux-amd64 -o opkssh; chmod +x opkssh
    • 对于 ARM64 架构的 Linux 系统:
    curl -L https://github.com/openpubkey/opkssh/releases/latest/download/opkssh-linux-arm64 -o opkssh; chmod +x opkssh

    安装完成后,你可以将 opkssh 文件移动到 /usr/local/bin/ 目录,或将其保留在当前目录。

    2. 使用 opkssh 进行身份验证与 SSH 登录

    安装完成后,你可以开始使用 opkssh 进行身份验证和 SSH 连接。

    登录并生成 SSH 密钥

    1. 在终端或命令行中运行以下命令:
    opkssh login
    1. 该命令将打开一个浏览器窗口,要求你选择一个 OpenID 提供商并完成身份验证。你可以选择 Google、GitHub 等常见的 OpenID 提供商来进行登录。
    2. 登录成功后,opkssh 会在你的本地系统中生成一个 SSH 公钥文件,默认位置是 ~/.ssh/id_ecdsa。这个密钥对应的是你的 OpenID Token,凭此可以通过 SSH 连接到服务器。

    默认 SSH 密钥过期时间

    生成的 SSH 密钥默认会在 24 小时后过期。到期后,你需要重新运行 opkssh login 来生成新的密钥。

    使用 SSH 登录

    一旦密钥生成成功,你可以像使用传统 SSH 密钥一样使用它来登录到远程服务器。执行以下命令:

    ssh [email protected]

    使用 SFTP 进行文件传输

    你还可以使用 opkssh 生成的 SSH 密钥进行 SFTP 文件传输:

    sftp [email protected]

    3. 自定义 SSH 密钥名称

    opkssh 允许你为生成的密钥指定自定义名称,方便管理。

    登录时指定自定义密钥名称

    如果你希望使用特定名称的密钥,可以在执行 opkssh login 时指定密钥名称:

    opkssh login -i opkssh_server_group1

    使用自定义密钥进行 SSH 连接

    在使用 SSH 时,你可以通过 -i 参数指定自定义的密钥文件。假设你使用了 opkssh_server_group1 作为密钥名称,可以执行以下命令:

    ssh -o "IdentitiesOnly=yes" -i ~/.ssh/opkssh_server_group1.pub -i ~/.ssh/opkssh_server_group1 [email protected]

    这里的 -o "IdentitiesOnly=yes" 参数会确保 SSH 仅使用指定的密钥进行身份验证,避免使用其他默认密钥进行干扰。

    4. 在服务器端安装和配置 opkssh

    为了让你的服务器支持使用 opkssh 进行身份验证,你需要在服务器上安装并配置它。

    安装 opkssh 在服务器上

    1. 登录到你的服务器。
    2. 使用以下命令安装 opkssh:
    wget -qO- "https://raw.githubusercontent.com/openpubkey/opkssh/main/scripts/install-linux.sh" | sudo bash

    这条命令会自动下载并安装 opkssh,并将其放置在 /usr/local/bin/ 目录中,同时配置 SSH 服务以支持 opkssh 作为附加的身份验证机制。

    允许单个用户使用 opkssh 登录

    如果你想允许某个用户(例如 [email protected])通过 OpenID 进行身份验证并作为 root 登录到服务器,可以执行以下命令:

    sudo opkssh add root [email protected] google

    允许用户组使用 opkssh 登录

    如果你希望允许某个用户组(例如 ssh-users)中的所有成员通过 OpenID 进行身份验证并作为 root 登录,可以使用以下命令:

    sudo opkssh add root oidc:groups:ssh-users google
  • Multipass使用cloud-init 启动 Ubuntu 24.04 虚拟机

    使用 Multipass 启动一台基于 Ubuntu 24.04 的虚拟机,并通过 cloud-init.yaml 实现自动化配置。配置内容包括创建用户、禁用 root 和密码登录、启用 SSH 公钥认证,确保系统安全且易于远程管理。只需一条命令即可快速部署完成,非常适合开发和测试场景使用。

    1. 创建 cloud-config.yaml

    生成 SSH 密钥对(或准备好现有公钥):

    ssh-keygen -t ed25519 -C "liqixin@vm"

    公钥会保存在 ~/.ssh/id_ed25519.pub 中。

    创建一个名为 cloud-config.yaml 的文件:

    # cloud-config.yaml
    users:
      - name: liqixin
    sudo: ALL=(ALL) NOPASSWD:ALL
    shell: /bin/bash
    lock_passwd: true
    ssh_authorized_keys:
      - ssh-ed25519 AAAA liqixin@vm
    
    disable_root: true
    ssh_pwauth: false

    请把 ssh-ed25519 AAAA... 替换成你自己的公钥内容(~/.ssh/id_ed25519.pub 里的内容)。

    2. 启动 VM

    在 cloud-config 文件所在目录,运行以下命令:

    multipass launch 24.04 \
      --name liqixin-vm \
      --cpus 1 \
      --memory 1G \
      --disk 10G \
      --cloud-init cloud-config.yaml

    这会:

    • 下载 Ubuntu 24.04(首次执行会下载镜像)
    • 创建名为 liqixin-vm 的虚拟机
    • 启动时自动创建 liqixin 用户,并配置好免密 SSH 登录

    3. 通过 SSH 登录

    Multipass 默认会自动配置主机与 VM 的网络连接,你可以用以下方式连接:

    multipass info liqixin-vm

    输出中找到 IP 地址,例如:

    liqixin-vm:
      ...
      IPv4: 192.168.64.3

    然后用你的私钥直接 SSH 登录:

    ssh -i ~/.ssh/id_ed25519 [email protected]

    首次连接需要确认 fingerprint,之后就可以直接连了。

    4. 清理 / 删除 VM

    如果以后不需要这个 VM,可以这样清理:

    multipass delete liqixin-vm
    multipass purge
  • 云服务器的黑洞路由配置

    一、 什么是黑洞路由

    黑洞路由是一种网络配置方法,旨在将特定的网络流量引导到一个不存在的目标地址,导致这些流量被丢弃,仿佛进入了一个“黑洞”一样。这种技术通常被用于丢弃不需要的流量,或作为防御手段来应对网络攻击。

    在黑洞路由中,管理员通过配置路由表,将目标 IP 地址或 IP 段指向一个虚拟的“黑洞”地址,这个地址通常是一个不存在的地址或一个空地址。当网络流量被引导到这个黑洞地址时,它们将被直接丢弃,而不会被转发到实际的目标。

    黑洞路由在网络安全方面尤为重要,尤其是在对抗 分布式拒绝服务攻击(DDoS) 等恶意流量时。

    二、 黑洞路由的应用场景

    1. 防御分布式拒绝服务攻击(DDoS)

    背景:

    DDoS 攻击通过向目标网络或服务器发送大量恶意流量,迅速使其瘫痪,无法为正常用户提供服务。

    应用:

    通过设置黑洞路由,将攻击流量引导到“黑洞”地址,避免这些流量占用带宽,从而保护其他正常流量。例如,网络管理员可以通过添加黑洞路由来丢弃所有来自特定 IP 段的攻击流量,确保攻击不会对系统造成负面影响。

    案例:

    某在线服务提供商在遭遇大规模 DDoS 攻击时,立即将攻击来源的 IP 地址段引导到黑洞,从而成功减轻了攻击负担,保护了其正常的用户流量。

    2. 隔离受感染的主机或网络

    背景:

    网络中的设备可能会被病毒或恶意软件感染,成为攻击的源头。为了避免这些设备对其他主机造成威胁,可以通过黑洞路由将其流量隔离。

    应用:

    当发现某台设备或主机被感染时,可以设置黑洞路由将它的流量丢弃,避免它继续传播恶意流量或参与更大的攻击。

    案例:

    某公司发现内网中的一台计算机已经被勒索病毒感染,导致它向外发送大量垃圾流量。管理员通过黑洞路由将这台主机的所有流量引导到黑洞,有效隔离了感染主机,防止了病毒蔓延。

    3. 过滤不需要的流量或垃圾流量

    背景:

    许多网络流量可能是垃圾流量,来自无用的请求或恶意的爬虫,这些流量不仅浪费带宽,还可能影响正常服务的响应速度。

    应用:

    管理员可以设置黑洞路由,丢弃来自不需要的 IP 地址或流量类型。这种方法对于防止无意义的访问或爬虫流量尤为有效。

    案例:

    某网站为了防止爬虫和无效请求消耗带宽,在发现大量来自某些 IP 地址的恶意爬虫流量后,快速通过黑洞路由将这些 IP 阻断,从而保证正常用户的访问不受影响。

    4. 网络重定向和流量控制

    背景:

    在某些情况下,管理员可能希望控制流量的走向,或者强制执行某些安全策略,防止流量访问不安全的目标。

    应用:

    可以通过设置黑洞路由来引导特定流量到“黑洞”,从而控制哪些流量可以进入网络。例如,在企业内部网络中,可以使用黑洞路由来阻止员工访问某些危险的外部网站或 IP 地址。

    案例:

    某企业使用黑洞路由禁止员工访问特定的社交媒体网站,以避免员工在工作时间浪费过多时间,同时降低因不安全网站带来的潜在风险。

    5. IP 地址封禁

    背景:

    当发现某些 IP 地址是恶意的攻击源时,可能需要对这些 IP 进行封禁,防止它们继续发起攻击或进行其他不良行为。

    应用:

    黑洞路由可以被用于封禁特定 IP 地址或 IP 地址段,确保这些恶意源的流量不会进入目标网络。

    案例:

    一个在线游戏平台遭遇了来自某个国家的大规模暴力破解攻击,攻击者通过多个 IP 地址发起登录尝试。管理员通过设置黑洞路由,迅速将这些 IP 地址段的流量丢弃,防止了攻击对游戏服务器的影响。

    6. 流量监控与分析

    背景:

    有时需要对某些流量进行监控和分析,以便检测异常行为或进行故障排查。

    应用:

    可以将流量通过黑洞路由引导到特定地址,来检测是否有异常流量或网络行为,从而帮助网络管理员识别问题。

    案例:

    在某次流量审计中,网络管理员发现了一些异常的流量模式,怀疑可能是恶意活动。为了进一步分析,管理员将这些可疑流量引导到黑洞,从而有效隔离了这些流量并避免了对正常流量的干扰。

    7. 网络故障和故障转移管理

    背景:

    在分布式网络环境中,某些网络节点可能会出现故障,导致流量无法正常路由。此时需要一种快速的手段来避免流量流向故障节点。

    应用:

    黑洞路由可用于将故障节点的流量丢弃,避免错误的流量路径导致其他节点的负担增加。

    案例:

    某企业的外部路由节点发生故障,导致无法正常访问外部资源。管理员通过黑洞路由将所有经过该节点的流量丢弃,防止故障的流量影响到网络中的其他设备和服务。

    8. 临时流量丢弃

    背景:

    有时在系统维护期间,管理员需要暂时丢弃某些流量,以避免在维护过程中受到干扰。

    应用:

    通过黑洞路由,管理员可以在维护过程中临时将不需要的流量引导到黑洞,从而保护网络的正常运行。

    案例:

    某个大型网站在进行例行维护时,管理员通过黑洞路由临时丢弃所有来自外部的流量,以保证维护过程不被外部请求打断。维护结束后,恢复正常流量路由。

    三、 黑洞路由配置示例

    需要配置黑洞路由的条件
    • 防御 DDoS 攻击:当检测到来自特定 IP 地址段的 DDoS 攻击流量时,可以通过黑洞路由将这些流量丢弃,从而防止攻击占用带宽和系统资源。
    • 隔离感染主机:如果网络中某台设备被恶意软件感染,可能会发起大量恶意流量,管理员可以通过黑洞路由将其流量丢弃,防止对其他设备造成危害。
    • 阻止垃圾流量:当网站或服务器受到大量无效请求(如爬虫、扫描器)干扰时,管理员可以配置黑洞路由,将这些不需要的流量丢弃,保障网络的正常运行。
    • 故障恢复或冗余路径管理:如果某个网络节点发生故障或不再有效,黑洞路由可以用于暂时丢弃流量,避免流量被错误地路由到故障节点。
    • IP 封禁:某些 IP 地址在进行恶意行为(如暴力破解)时,管理员可以通过配置黑洞路由直接丢弃这些 IP 的流量,防止其继续攻击。

    1. Windows 配置

    1. 添加黑洞路由
      例如,黑洞路由将所有来自 192.168.1.0/24 网络的流量丢弃:
    route add 192.168.1.0 mask 255.255.255.0 0.0.0.0
    1. 添加永久黑洞路由
      如果需要在系统重启后保留黑洞路由,可以使用 -p 选项:
    route add 192.168.1.0 mask 255.255.255.0 0.0.0.0 -p
    1. 删除黑洞路由
      如果不再需要黑洞路由,可以删除指定的路由规则:
    route delete 192.168.1.0
    1. 查看当前路由表
      通过查看路由表,可以确认是否已配置黑洞路由:
    route print

    2. Linux 配置

    1. 添加黑洞路由
      例如,将 192.168.1.0/24 的流量引导到黑洞:
    ip route add blackhole 192.168.1.0/24
    1. 添加永久黑洞路由
      如果需要保持黑洞路由在重启后仍然有效,可以添加 permanent 标志(在某些 Linux 发行版中,可能需要将配置写入路由表配置文件中以实现永久生效):
    ip route add blackhole 192.168.1.0/24 permanent
    1. 删除黑洞路由
      如果需要删除已配置的黑洞路由,可以使用:
    ip route del blackhole 192.168.1.0/24
    1. 查看当前路由表
      使用以下命令查看当前的路由表,并检查是否存在黑洞路由:
    ip route show | grep blackhole

  • Docker安装wiki.js知识共享平台

    通过 Docker 部署 Wiki.js 可以帮助团队快速建立起知识共享平台,Wiki.js 是一个现代化的、功能强大的 Wiki 引擎,基于 Node.js 开发,支持多种数据库(如 PostgreSQL 和 MySQL)。它提供了丰富的功能,包括实时协作、Markdown 支持、权限管理、搜索功能等,非常适合团队内部使用,帮助知识共享和文档管理。

    1. 安装Docker

    curl -fsSL https://get.docker.com -o get-docker.sh
    sh get-docker.sh

    2. 使用 Docker 部署 Wiki.js

    需要创建一个 docker-compose.yaml 文件,用于定义 Docker 服务的配置。

    nano docker-compose.yaml

    文件内容如下:

    services:
    
      db:
        image: postgres:15-alpine
        environment:
          POSTGRES_DB: wiki
          POSTGRES_PASSWORD: wikijsrocks
          POSTGRES_USER: wikijs
        logging:
          driver: none
        restart: unless-stopped
        volumes:
          - db-data:/var/lib/postgresql/data
    
      wiki:
        image: ghcr.io/requarks/wiki:2
        depends_on:
          - db
        environment:
          DB_TYPE: postgres
          DB_HOST: db
          DB_PORT: 5432
          DB_USER: wikijs
          DB_PASS: wikijsrocks
          DB_NAME: wiki
        restart: unless-stopped
        ports:
          - "80:3000"
    
    volumes:
      db-data:

    3. 启动容器

    通过 docker-compose 启动 Wiki.js 和 PostgreSQL 数据库:

    docker-compose up -d

    命令执行后,Docker 会下载必要的镜像并启动容器。

    Wiki.js 将绑定到主机的 80 端口
    你可以通过浏览器访问 http://<你的服务器 IP>:80 来完成 Wiki.js 的配置。

  • Linux系统配置时区和时间同步服务的两种方法

    在 Linux 系统中,配置时区和启用时间同步服务可以通过不同的方式完成。下面我们将介绍两种常见的方法:一种使用传统命令,另一种使用 timedatectl 命令来进行配置。

    方法一:使用传统命令配置时区

    1. 配置时区为 Asia/Singapore

    你可以通过以下命令来设置时区:

    echo "Asia/Singapore" | tee /etc/timezone

    然后,将本地时间设置为 Asia/Singapore 时区:

    ln -sf /usr/share/zoneinfo/Asia/Singapore /etc/localtime
    1. 查看当前系统时间

    使用 date 命令查看系统时间,确保时区设置生效:

    date

    方法二:使用 timedatectl 配置时区

    1. 配置时区为 Asia/Singapore

    使用 timedatectl 直接设置时区:

    timedatectl set-timezone Asia/Singapore
    1. 查看当前系统时间

    使用 timedatectl 查看当前系统时区设置:

    timedatectl
    1. 安装并启动时间同步服务

    如果系统没有启用时间同步服务,可以通过以下命令来安装和启动 systemd-timesyncd 服务:

    apt install systemd-timesyncd
    systemctl start systemd-timesyncd
    systemctl status systemd-timesyncd
    1. 确认时间同步

    使用 timedatectl 再次查看同步状态:

    timedatectl