#!/bin/bash
# 检查是否以 root 权限运行
if [[ $EUID -ne 0 ]]; then
echo "请使用 root 权限运行此脚本 (sudo ./script.sh)"
exit 1
fi
# --- 配置变量 ---
read -p "请输入要创建的用户名: " USERNAME
read -s -p "请输入该用户的密码: " PASSWORD
echo
read -p "请粘贴该用户的 SSH Public Key (以 ssh-rsa 开头): " SSH_KEY
# 1. 创建用户并设置密码
if id "$USERNAME" &>/dev/null; then
echo "用户 $USERNAME 已存在,跳过创建。"
else
useradd -m -s /bin/bash "$USERNAME"
echo "$USERNAME:$PASSWORD" | chpasswd
echo "用户 $USERNAME 创建成功。"
fi
# 2. 配置 sudo 权限
echo "$USERNAME ALL=(ALL) ALL" > "/etc/sudoers.d/$USERNAME"
chmod 440 "/etc/sudoers.d/$USERNAME"
# 3. 配置 SSH 密钥
USER_HOME=$(eval echo ~$USERNAME)
mkdir -p "$USER_HOME/.ssh"
echo "$SSH_KEY" > "$USER_HOME/.ssh/authorized_keys"
chown -R "$USERNAME:$USERNAME" "$USER_HOME/.ssh"
chmod 700 "$USER_HOME/.ssh"
chmod 600 "$USER_HOME/.ssh/authorized_keys"
# 4. 修改 SSH 服务配置以禁用密码登录 (仅针对该用户或全局)
# 注意:这里我们通过 Match 指令实现对该特定用户强制使用 Key 登录
# 如果你想全局禁用密码登录,请告知我。
SSH_CONF="/etc/ssh/sshd_config"
if ! grep -q "Match User $USERNAME" "$SSH_CONF"; then
cat <<EOF >> "$SSH_CONF"
# 强制 $USERNAME 用户只能通过 Key 登录
Match User $USERNAME
PasswordAuthentication no
AuthenticationMethods publickey
EOF
echo "SSH 配置已更新:用户 $USERNAME 只能通过密钥登录。"
else
echo "SSH 配置中已存在该用户的限制规则。"
fi
# 重启 SSH 服务使配置生效
systemctl daemon-reload
systemctl restart ssh.socket || systemctl restart ssh
echo "-----------------------------------"
echo "设置完成!"
echo "用户: $USERNAME"
echo "权限: 已加入 sudoers"
echo "验证方式: 仅限 SSH Key (密码登录已被禁用)"
echo "-----------------------------------"Linux创建普通用户并禁止密码登录
Linux的网页驱动权限问题
Linux 下一些可以用网页驱动的设备在网页中会无法识别, 主要是权限问题, 如下:
❯ ls -l /dev/hidraw*
crw------- 1 root root 243, 0 1月21日 19:54 /dev/hidraw0
crw------- 1 root root 243, 1 1月21日 19:54 /dev/hidraw1
crw------- 1 root root 243, 10 1月21日 19:54 /dev/hidraw10
crw------- 1 root root 243, 2 1月21日 19:54 /dev/hidraw2
crw------- 1 root root 243, 3 1月21日 19:54 /dev/hidraw3
crw------- 1 root root 243, 4 1月21日 20:01 /dev/hidraw4
crw------- 1 root root 243, 5 1月21日 20:01 /dev/hidraw5
crw------- 1 root root 243, 6 1月21日 20:01 /dev/hidraw6
crw------- 1 root root 243, 7 1月21日 19:54 /dev/hidraw7
crw------- 1 root root 243, 8 1月21日 19:54 /dev/hidraw8
crw------- 1 root root 243, 9 1月21日 19:54 /dev/hidraw9
❯ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 0cf2:7750 ENE Technology, Inc. 6K7750
Bus 001 Device 003: ID 373b:1178 PIXART Nano 8K Dongle
Bus 001 Device 004: ID 1a40:0101 Terminus Technology Inc. Hub
Bus 001 Device 006: ID 1532:00b2 Razer USA, Ltd Razer DeathAdder V3
Bus 001 Device 007: ID 2717:5086 Xiaomi Inc. Redmi 电脑音箱
Bus 001 Device 010: ID 373b:111e HFD ATK A87Pro
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub可以看到所有设备都是无法被普通用户读写的, 普通用户启动的浏览器自然也无法对设备读写, 要解决这个问题可以直接 chmod , 但这种方式重启后就无效了, 并且这种方式也不太规范, 标准的做法是建立 udev 规则来允许用户读写设备.
Ghostty冷启动优化
Markdown代码块的标示
| 实际内容 | 代码块语言标识 |
|---|---|
| ~/.ssh/config | ssh-config |
| /etc/environment | bash or env |
| pacman相关配置 | conf or ini |
| 命令行输出 | console |
| ~/.config/environment.d/10-wayland.conf | conf |
| 一般的配置文件 | conf |
gitignore白名单写法
.gitignore 写入配置如下:
# 白名单模式 .gitignore 规则
# 忽略所有内容并允许追踪子目录内容
*
!*/
# README 和 gitignore 加入白名单
!/.gitignore
!README*具体原理为: 首先使用 * 先忽略全部文件与目录, 然后使用 !*/ 允许 Git 追踪子目录结构, 然后就可以用 ! + 文件名来加入需要 Git 追踪的文件.
Linux 下 Btrfs 文件系统快照
Zsh 安装配置
Fcitx5+Rime 输入法安装
使用 Arch Linux 系统, 首先安装 Fcitx5 和 Rime.
sudo pacman -S fcitx5-im fcitx5-rime/etc/environment中添加以下环境变量
双系统更改 Grub 启动顺序
如果使用了 Timeshift 或者 Snapper 的快照功能, 安装 grub-btrfs 实现在 Grub 界面直接从快照启动, 这样在系统挂掉后可以从快照启动进入系统而不需要 LiveCD .
yay -S grub-btrfs在/etc/grub.d/可以查看引导生成脚本, 决定 Grub 引导顺序, 修改它们就可以修改 Grub 界面的启动顺序, 内容如下:
