新到手 VPS 必做的配置优化

分类: 365bet日博 作者: admin 时间: 2025-10-23 11:01:49 阅读: 9127
新到手 VPS 必做的配置优化

新到手 VPS 必做的配置优化¶ 本篇教程基于 Debian 11 系统,其他系统大同小异,请自行参考。

更新组件,包管理¶ 在开始配置新 VPS 之前,确保所有软件包都是最新的是非常重要的。这可以通过以下命令完成:

更新软件包列表: apt update

这一步会检查系统中所有可用的软件包更新,确保你的包管理器知道有哪些新版本可用。 安装所有可用的软件包更新: apt upgrade --only-upgrade

这一步会安装所有已检查到的新版本软件包,并升级到最新版本。 常用工具¶ VIM 编辑器¶ VIM 是 Linux 系统中一个非常强大的文本编辑器,虽然刚开始可能有点难上手,但一旦熟悉了它的快捷键和操作方式,你会发现它非常高效。以下是安装和配置 VIM 的步骤:

apt install vim

安装完成后,你可以通过 vim 命令来启动它。

安装 command-not-found¶ command-not-found是一个有用的工具,当您尝试运行一个未安装的命令时,它会提示您如何安装它。这是一个非常有用的工具,当尝试运行一个未安装的命令时,它会提示你如何安装它。这能帮你节省不少时间,尤其是在你不确定某个命令是否已经安装的情况下。

apt install command-not-found

更新缓存

apt-file update

update-command-not-found

效果如下:

command-not-found gem

Command 'gem' not found, but can be installed with:

apt install ruby-rubygems

安装 curl¶ curl 是一个命令行工具,用于通过 URL 传输数据。无论是下载文件还是与 API 交互,curl 都是一个非常实用的工具。

安装:apt install curl 安装 wget¶ wget 是另一个命令行工具,用于从网络上下载文件。虽然 curl 也能做到这一点,但 wget 在某些情况下可能更方便。

安装:apt install wget 安装 git¶ git 不用多说,必不可少。

安装:apt install git oh-my-zsh¶ 先检查 zsh 是否安装¶ 在安装 oh-my-zsh 之前,我们先检查一下系统中是否已经安装了 zsh。你可以通过以下命令查看系统支持哪些 shell:

检查系统的 shell:cat /etc/shells 正常情况下,你会看到类似以下的输出:

/bin/sh

/bin/bash

/sbin/nologin

/bin/dash

/bin/tcsh

/bin/csh

如果已经有 /bin/zsh,那么我们就不必安装了。如果没有,我们可以通过以下命令来安装:

安装:apt install -y zsh 安装完成后,再次运行cat /etc/shells,你会发现多了一个:/bin/zsh 安装 oh-my-zsh¶ oh-my-zsh 是一个开源的、社区驱动的框架,用于管理 Zsh 配置。它提供了许多主题和插件,能让你的终端更加美观和高效

安装 oh-my-zsh:sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" 配置 oh-my-zsh¶ oh-my-zsh 提供了许多实用的插件,以下是一些推荐的插件:

zsh-autosuggestions: 自动建议命令这个插件会对历史命令一些补全,非常方便。 zsh-syntax-highlighting: 这个插件会对终端命令高亮显示,比如正确的拼写会是绿色标识,否则是红色,另外对于一些 shell 输出语句也会有高亮显示,算是不错的辅助插件 z 强大的目录自动跳转命令,会记忆你曾经进入过的目录,用模糊匹配快速进入你想要的目录。 extract 功能强大的解压插件,所有类型的文件解压一个命令 x 全搞定,再也不需要去记 tar 后面到底是哪几个参数了。 wd 简单地讲就是给指定目录映射一个全局的名字,以后方便直接跳转到这个目录,比如:wd /var/www/html; wd add html,以后直接 wd html 就可以快速进入这个目录了。 autojump 自动跳转目录,安装后,直接 j 目录名 就可以快速进入这个目录了。 安全设置¶ 修改 SSH 端口¶ 使用文本编辑器(如 vim 或 vi)打开 SSH 配置文件。命令如下:

vim /etc/ssh/sshd_config

修改端口号:在配置文件中找到 #Port 22 这一行,去掉前面的 # 号,并将 22 修改为你想要的新端口号。例如,如果你想将端口号改为 22345,则修改为:

Port 22345

保存文件并退出编辑器。重启 SSH 服务:

systemctl restart sshd

小结¶ 其实上面的过程,可以写一个脚本,一键完成。

首先创建一个脚本文件:vps_setup.sh

然后写入以下内容:

#!/bin/bash

set -e

# 定义颜色代码

RED='\033[0;31m'

GREEN='\033[0;32m'

YELLOW='\033[1;33m'

NC='\033[0m' # No Color

# 日志函数

log_info() {

echo -e "${GREEN}[INFO]${NC} $1"

}

log_warn() {

echo -e "${YELLOW}[WARN]${NC} $1"

}

log_error() {

echo -e "${RED}[ERROR]${NC} $1"

}

detect_distribution() {

local supported_distributions=("ubuntu" "debian" "centos" "fedora")

if [ -f /etc/os-release ]; then

. /etc/os-release

if [[ "${ID}" = "ubuntu" || "${ID}" = "debian" || "${ID}" = "centos" || "${ID}" = "fedora" ]]; then

PM="apt"

[ "${ID}" = "centos" ] && PM="yum"

[ "${ID}" = "fedora" ] && PM="dnf"

log_info "检测到系统:${ID} (包管理器:${PM})"

else

log_error "不支持的系统类型:${ID}"

exit 1

fi

else

log_error "无法检测系统类型:/etc/os-release 文件不存在"

exit 1

fi

}

# 更新组件,包管理

update_system() {

log_info "开始更新系统..."

if [ "${PM}" = "apt" ]; then

sudo apt update

sudo apt upgrade --only-upgrade -y

elif [ "${PM}" = "yum" ]; then

sudo yum update -y

fi

log_info "系统更新完成"

}

# 新增询问函数

ask_user() {

local tool_name=$1

local description=$2

echo -e "${YELLOW}是否安装 ${tool_name}?${NC}"

[ ! -z "$description" ] && echo -e "${YELLOW}描述:${description}${NC}"

read -p "请输入 [Y/n]: " choice

case "$choice" in

[nN][oO] | [nN])

return 1

;;

*)

return 0

;;

esac

}

install_tool() {

local name=$1

local description=$2

# 如果工具已安装,显示版本信息

if command -v "${name}" &>/dev/null; then

log_info "${name} 已安装"

return 0

fi

# 询问用户是否安装

if ask_user "${name}" "${description}"; then

log_warn "${name} 未安装,正在安装..."

sudo ${PM} install -y "${name}"

if [ $? -eq 0 ]; then

log_info "${name} 安装成功"

else

log_error "${name} 安装失败"

exit 1

fi

else

log_info "跳过安装 ${name}"

fi

}

install_tool_no_ask() {

local name=$1

if command -v "${name}" &>/dev/null; then

log_info "${name} 已安装"

return 0

fi

log_warn "${name} 未安装,正在安装..."

sudo ${PM} install -y "${name}"

if [ $? -eq 0 ]; then

log_info "${name} 安装成功"

else

log_error "${name} 安装失败"

exit 1

fi

}

config_zsh() {

log_info "配置 zsh 主题"

# choose oh-my-zsh theme

# 替换 zshrc 文件中的 ZSH_THEME 为 ys

sed -i "s/^ZSH_THEME=.*/ZSH_THEME=\"ys\"/g" ~/.zshrc

install_tool_no_ask "git"

log_info "安装 oh-my-zsh 插件,zsh-autosuggestions, zsh-syntax-highlighting ....."

git clone https://github.com/zsh-users/zsh-autosuggestions.git ~/.oh-my-zsh/plugins/zsh-autosuggestions

git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ~/.oh-my-zsh/plugins/zsh-syntax-highlighting

log_info "配置 zshrc 文件"

sed -i "s/^plugins=.*/plugins=(git z wd extract zsh-autosuggestions zsh-syntax-highlighting command-not-found)/g" ~/.zshrc

if ! grep -q "/usr/bin/zsh" /etc/shells; then

echo "/usr/bin/zsh" >>/etc/shells

fi

log_info "设置 zsh 为默认 shell"

chsh -s $(which zsh)

log_info "zsh 配置完成"

}

install_oh_my_zsh() {

log_info "开始安装 oh-my-zsh..."

# 清理旧文件

if [ -d ~/.oh-my-zsh ]; then

log_warn "检测到已存在的 oh-my-zsh 安装,正在删除..."

rm -rf ~/.oh-my-zsh

fi

# 备份已存在的 .zshrc

[ -f ~/.zshrc ] && mv ~/.zshrc ~/.zshrc.backup

# 克隆 oh-my-zsh 仓库

git clone https://github.com/ohmyzsh/ohmyzsh.git ~/.oh-my-zsh

# 复制默认配置文件

cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc

# 配置 zsh

config_zsh

log_info "oh-my-zsh 安装完成"

}

change_ssh_port() {

# 检查 /etc/ssh/sshd_config 文件是否存在

if [ ! -f /etc/ssh/sshd_config ]; then

log_error "/etc/ssh/sshd_config 文件不存在"

exit 1

fi

if ask_user "修改 ssh 端口号" "修改 ssh 端口号"; then

read -p "请输入新的 ssh 端口号(1024-65535): " SSH_PORT

if [[ ! "${SSH_PORT}" =~ ^[0-9]+$ ]] || [ "${SSH_PORT}" -lt 1024 ] || [ "${SSH_PORT}" -gt 65535 ]; then

log_error "输入的端口号不在 1024-65535 范围内"

exit 1

fi

local backup_file="/etc/ssh/sshd_config.backup.$(date +%Y%m%d_%H%M%S)"

log_info "备份配置文件到 ${backup_file}"

cp /etc/ssh/sshd_config "${backup_file}"

log_info "修改 ssh 端口号为 ${SSH_PORT}"

sed -i "s/^#Port.*/Port ${SSH_PORT}/g" /etc/ssh/sshd_config

sed -i "s/^Port.*/Port ${SSH_PORT}/g" /etc/ssh/sshd_config

if ! sshd -t; then

log_error "SSH 配置文件语法检查失败,正在还原配置..."

cp "${backup_file}" /etc/ssh/sshd_config

exit 1

fi

# 重启 ssh 服务

log_info "重启 ssh 服务"

if ! sudo systemctl restart sshd; then

log_error "SSH 服务重启失败,正在还原配置..."

cp "${backup_file}" /etc/ssh/sshd_config

sudo systemctl restart sshd

exit 1

fi

log_info "SSH 端口修改成功,请确保使用新端口 ${SSH_PORT} 连接"

log_warn "建议保持当前连接,新开一个终端验证新端口是否可用"

fi

}

# 新增防火墙配置函数

configure_firewall() {

local port=$1

case "${ID}" in

"ubuntu" | "debian")

# 检查 ufw 是否安装

if ! command -v ufw >/dev/null; then

log_warn "未检测到 ufw,正在安装..."

sudo ${PM} install -y ufw

fi

sudo ufw allow "${port}"/tcp

sudo ufw --force enable

;;

"centos" | "fedora")

# 检查 firewalld 是否安装

if ! command -v firewall-cmd >/dev/null; then

log_warn "未检测到 firewalld,正在安装..."

sudo ${PM} install -y firewalld

sudo systemctl enable firewalld

sudo systemctl start firewalld

fi

sudo firewall-cmd --permanent --add-port="${port}"/tcp

sudo firewall-cmd --reload

;;

*)

log_warn "未知的系统类型,请手动配置防火墙规则"

;;

esac

log_info "防火墙规则已添加"

}

run_script() {

log_info "开始运行脚本..."

detect_distribution

# 更新系统

update_system

# VIM

install_tool "vim" "强大的文本编辑器"

[ -x "$(command -v vim)" ] && log_info "VIM 版本:$(vim --version | head -n 1)"

# command-not-found

install_tool "command-not-found" "当运行未安装的命令时,提供安装建议"

# curl

install_tool "curl" "命令行文件传输工具"

[ -x "$(command -v curl)" ] && log_info "curl 版本:$(curl --version | head -n 1)"

# git

install_tool "git" "分布式版本控制系统"

[ -x "$(command -v git)" ] && log_info "git 版本:$(git --version)"

# zsh

if install_tool "zsh" "功能强大的 shell"; then

if ask_user "oh-my-zsh" "zsh 的配置框架,提供主题和插件支持"; then

log_info "开始安装 oh-my-zsh..."

install_oh_my_zsh

log_info "oh-my-zsh 安装和配置完成"

fi

fi

# 修改 ssh 端口号

change_ssh_port

}

run_script

赋予执行权限:

chmod +x vps_setup.sh

运行脚本:

./vps_setup.sh

跑完脚本一定要验证一下配置,比如:端口是否修改成功,没问题就开始安装其他软件。

相关推荐