最近购置了一台 1H1G、20G SSD 的虚拟服务器,为了便于使用,需要配置一下基础环境,例如新建用户、密钥登录、Docker 和 Zsh 等等。
年初参考过《Debian Server 初始化设置 SOP》的流程,也整理了一份《飞牛 fnOS 初始化配置记录》,但都不太适合直接套用到这台机子上。部分命令在 Debian 13 上也不再适用。于是,我决定按照自己的需求重新抄写一份,并用这篇笔记为今年的水文画上句号。
抄过来就是我自己的东西了!
系统
本节命令全部使用 root 用户执行。
更新与升级
官方预装的是 Debian 12,系统相当干净,没有多余的东西,因而无需重装系统。既然是新开通的实例,没有任何业务负担,那么可以放心地进行大版本升级。我决定趁现在就把它更新到最新的 Debian13,满足我积攒已久的升级欲望。
首先,升级系统到最新状态:
apt update
apt upgrade -y
apt full-upgrade -y
apt autoremove -y
apt autoclean接着,将软件源切换到 Debian 13(trixie),使用以下命令一键修改 /etc/apt/sources.list:
sed -i 's/bookworm/trixie/g' /etc/apt/sources.list /etc/apt/sources.list.d/*.{list,sources} 2>/dev/null然后再次升级系统:
apt update
apt upgrade -y
apt full-upgrade -y
apt autoclean
apt autoremove -y弹出的选框可以全部按默认选择,待更新完毕后,重启系统:
reboot重启后,验证系统版本:
lsb_release -a如果显示类似以下信息,说明已经升级成功:
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 13 (trixie)
Release: 13
Codename: trixie本地化配置
设置时区与 NTP:
timedatectl set-timezone Asia/Hong_Kong
timedatectl set-ntp true
timedatectl status输出类似:
System clock synchronized: yes
NTP service: active配置语言环境:
sed -i 's/^# *zh_CN.UTF-8 UTF-8/zh_CN.UTF-8 UTF-8/' /etc/locale.gen
sed -i 's/^# *en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen
locale-gen输出类似:
Generating locales (this might take a while)...
en_US.UTF-8... done
zh_CN.UTF-8... done
en_US.UTF-8... done
Generation complete.安装常用工具
安装一些基础工具,涵盖编译环境、系统管理、网络下载、终端增强以及文件处理等我可能用得到但又用不到的功能:
apt install -y build-essential sudo vim curl wget ufw autojump git tmux zsh tree zstd zip unzip lsof fastfetch rsync新建用户
先设置一个新用户的环境变量,例如 mikusa,用于后续复制粘贴快速执行命令:
USERNAME=mikusa创建该用户,并将其添加到 sudo 用户组:
useradd -m $USERNAME
usermod -aG sudo $USERNAME为用户设置本地密码(可选,以防特殊情况需要,密码尽量复杂):
passwd $USERNAME设置该用户执行 sudo 命令时免密:
echo "$USERNAME ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/$USERNAME-nopasswd > /dev/null
chmod 440 /etc/sudoers.d/$USERNAME-nopasswd为该用户配置密钥登录,我有现成的公钥,所以这里直接设置一个公钥变量:
PUBKEY="ssh-ed25519 AAAABBBBBVVVVVVVVVVVVVVVVVVVV"创建用户密钥文件夹并授权:
mkdir -p /home/$USERNAME/.ssh
chmod 700 /home/$USERNAME/.ssh导入现有公钥:
echo "$PUBKEY" | sudo tee /home/$USERNAME/.ssh/authorized_keys > /dev/null修改权限:
chmod 600 /home/$USERNAME/.ssh/authorized_keys
chown -R $USERNAME:$USERNAME /home/$USERNAME/.ssh安装 Docker
使用官方命令一键安装:
curl -fsSL https://get.docker.com | bash -s docker安装完毕后,使用以下命令验证 docker 和 docker compose:
docker info
docker compose version再将个人用户添加到 docker 用户组:
usermod -aG docker $USERNAME需用户退出当前终端、重新登录后,docker 组权限才会生效。
用户
切换到 mikusa 用户:
su - mikusa才能继续执行下列个人用户相关的配置。
Zsh 配置
使用脚本一键安装 Oh My Zsh :
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"安装后会询问是否切换 Shell 为 Zsh,按 y 同意。
安装刚需插件:
git clone https://github.com/zsh-users/zsh-autosuggestions.git ~/.oh-my-zsh/custom/plugins/zsh-autosuggestions
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ~/.oh-my-zsh/custom/plugins/zsh-syntax-highlighting修改主题为 ys:
sed -i 's/^ZSH_THEME=".*"/ZSH_THEME="ys"/' ~/.zshrc配置 Zsh,启用插件:
echo ". /usr/share/autojump/autojump.sh" >> ~/.zshrc
sed -i.bak 's/plugins=(\(.*\))/plugins=(\1 autojump zsh-autosuggestions zsh-syntax-highlighting z extract sudo cp aliases docker docker-compose)/' ~/.zshrc添加一些自用 docker 别名:
cat <<'EOF' >> ~/.zshrc
# Docker aliases
alias dcu="docker compose up -d --remove-orphans" ## 启动服务并移除多余容器
alias dcd="docker compose down" ## 停止并删除服务容器
alias dcp="docker compose pull" ## 拉取镜像
alias dps="docker ps" ## 查看运行中的容器
alias dlogs="docker logs --follow -n 15" ## 查看容器日志,跟随最新 15 条
alias dclean="docker image prune -a" ## 清理未使用镜像
alias acme.sh="docker exec acme.sh acme.sh" ## 在 acme.sh 容器中执行 acme.sh
alias nginx="docker exec nginx nginx" ## 在 nginx 容器中执行 nginx 命令
alias caddy-reload="docker exec -w /etc/caddy caddy sh -c 'caddy fmt --overwrite && caddy reload'" ## 格式化 Caddyfile 并重载 Caddy
alias caddy="docker exec caddy caddy" ## 在 Caddy 容器中执行 caddy 命令
EOF再重载 Zsh:
source ~/.zshrc其他
可以安装一个 trash-cli 作回收站用:
sudo apt install -y trash-cli追加别名:
cat <<'EOF' >> ~/.zshrc
# trash-cli aliases
alias rm='trash-put' ## trash-put 将文件或目录移入回收站
alias rmclean='trash-empty' ## trash-empty 清空回收站
alias rmrest='trash-restore' ## trash-restore 还原回收站中的文件
alias rmlist='trash-list' ## trash-list 列出回收站中的文件
alias rmrm='trash-rm' ## trash-rm 删除回收站中的单个文件
EOF后续使用 rm 命令,便无须担心误操作删除文件了。
最后
使用新用户通过密钥连接上实例,并确认一切正常后,再修改 SSH 配置,避免因误操作而失联。
先修改默认的 SSH 端口。设置一个端口变量,例如:
PORT=22033一键替换当前端口:
sudo sed -i "s/^#\?Port .*/Port $PORT/" /etc/ssh/sshd_config验证 /etc/ssh/sshd_config 配置是否有误:
sshd -t没有报错的话,重启 SSH:
systemctl reload sshd测试是否已成功绑定到新端口:
ss -tlnp | grep ssh有类似以下输出,即表示修改完毕:
root@Reze:~# ss -tlnp | grep ssh
LISTEN 0 128 0.0.0.0:22033 0.0.0.0:* users:(("sshd",pid=733,fd=6))
LISTEN 0 128 [::]:22033 [::]:* users:(("sshd",pid=733,fd=7))再考虑禁用 root 登录:
sudo sed -i 's/^#\?PermitRootLogin .*/PermitRootLogin no/' /etc/ssh/sshd_config也可以禁用密码登录:
sudo sed -i 's/^#\?PasswordAuthentication .*/PasswordAuthentication no/' /etc/ssh/sshd_config使用以下命令查看是否已成功修改:
sudo sshd -T | grep -E 'permitrootlogin|passwordauthentication'若输出:
permitrootlogin no
passwordauthentication no即表示禁止 root 登录,也禁止密码登录生效。
随后重载 SSH:
systemctl reload sshd使用 reload 而非 restart,可避免因配置错误断开当前连接。
最后,在确认新端口和密钥登录都可用后,再断开当前连接。
参考
- 烧饼博客:Debian 12 Bookworm 升级 Debian 13 Trixie
- Cyrus's Blog:Debian Server 初始化设置 SOP
- ChatGPT
本文作者:mikusa
本文链接:https://www.himiku.com/archives/debian-sop.html
版权声明:所有文章除特别声明外均系本人自主创作,转载及引用请联系作者,并注明出处(作者、原文链接等)。
