【安全指南】新服务器上架,必做的 SSH 核心安全加固四步法

Share
【安全指南】新服务器上架,必做的 SSH 核心安全加固四步法
Photo by FlyD / Unsplash

起因是新购买了一台新的云服务器或物理机,被入侵并植入了挖矿/蠕虫病毒。

默认的 SSH 配置通常只开启了传统的“密码登录”,且允许 root 直接访问。在公网环境下,这意味着你的服务器每时每刻都在遭受自动化脚本的暴力破解

为了将黑客拒之门外,新服务器上线的第一件事,就是对 SSH 进行安全加固。本文将带你一步步实现:生成密钥、仅允许密钥登录、禁用密码登录、禁止 root 直接登录

1. 核心安全策略一览

为了达到生产环境的安全标准,我们将调整 SSH 的工作模式:

风险点默认状态加固后状态安全提升原因
认证方式密码登录仅允许密钥登录彻底免疫针对密码的暴力破解
高权限暴露允许 root 登录禁用 root 登录黑客无法直接猜解系统最高权限账号
默认端口22 端口(可选)自定义端口减少 90% 的自动化扫描垃圾日志

2. 第一步:本地生成 SSH 密钥对(Key Pair)

注意:此步骤在你的本地电脑(Mac、Windows 或你的常用工作机)上执行,不要在服务器上执行。

打开你本地的终端(Windows 用户可以使用 PowerShell 或 Git Bash),运行以下命令生成高强度的 Ed25519 密钥对(比传统的 RSA 更安全、速度更快):

ssh-keygen -t ed25519 -C "your_email@example.com"
  • 提示 Enter file in which to save the key 时,直接回车(使用默认路径 ~/.ssh/id_ed25519)。
  • 提示 Enter passphrase 时,建议输入一个密钥锁码(相当于给密钥再加一把锁),也可以直接回车留空。

生成后,你会在本地的 ~/.ssh/ 目录下得到两个文件:

  • id_ed25519私钥(相当于钥匙,绝对不能泄露给任何人)。
  • id_ed25519.pub公钥(相当于锁,需要上传到服务器)。

3. 第二步:将公钥上传至服务器

在本地终端执行以下命令,将你的公钥复制到服务器上(请将 username 换成你服务器上的用户名,server_ip 换成服务器 IP):

ssh-copy-id -i ~/.ssh/id_ed25519.pub username@server_ip

此时系统会提示你输入一次服务器的旧密码。成功后,本地的公钥就会被自动写入到服务器的 ~/.ssh/authorized_keys 文件中。

验证密钥登录(非常重要):

在进行下一步之前,尝试在本地使用密钥登录,确保无需输入密码即可进入系统:

ssh username@server_ip

4. 第三步:修改 SSH 配置文件,实施铁腕加固

确保通过密钥成功登录服务器后,我们开始修改服务器的 SSH 服务配置文件。

  1. 保存并退出:在 nano 编辑器中,按 Ctrl + O 保存,按 Enter 确认,再按 Ctrl + X 退出。

在文件中找到并修改以下关键项(若找不到某一项,可以在文件末尾直接添加):Plaintext

# 1. 禁用密码登录(核心:斩断暴破可能)
PasswordAuthentication no

# 2. 禁用 root 用户直接登录
# (强制使用普通用户登录后,再通过 sudo 提权)
PermitRootLogin no

# 3. 确保开启了公钥认证
PubkeyAuthentication yes

# 4. 【可选优化】修改默认的 22 端口,例如改成 2026
# Port 2026

使用 sudo 权限打开配置文件:Bash

sudo nano /etc/ssh/sshd_config

5. 第四步:测试与生效(不要立即断开连接!)

⚠️ 警告:在确认新配置生效且能正常连接之前,千万不要关闭当前这个已经登录的终端窗口!否则一旦配置有误,你可能会被永远锁在服务器外面。

  1. 终极验证:保持当前窗口不动,新打开一个本地终端窗口,尝试连接服务器:
    • 测试密钥登录ssh username@server_ip ── 应当顺畅进入。
    • 测试 root 登录ssh root@server_ip ── 应当被系统明确拒绝(Permission denied)。
    • 测试密码登录(在没有密钥的机器上尝试):── 应当直接报错,不再弹出密码输入框。

重启 SSH 服务让配置生效:Bash

sudo systemctl restart ssh
# 注意:部分 RedHat/CentOS 系统上命令为:sudo systemctl restart sshd

检查 SSH 配置语法是否正确:Bash

sudo sshd -t

如果没有任何输出,说明语法完全正确。

最后,记得定期做快照。

Read more

【避坑指南】从 TinyDB 文件损坏,聊聊文件截断与磁盘刷盘的底层原理

【避坑指南】从 TinyDB 文件损坏,聊聊文件截断与磁盘刷盘的底层原理

在 Python 轻量级开发中,TinyDB 因其“零部署、文件即数据库、支持对象化查询”的特性,成为了存储配置信息、多租户元数据的神器。 但在高频写入或异常崩溃的场景下,你是否遇到过这样的诡异现象:导出的 JSON 文件末尾莫名其妙多出了几个 NULNUL(\x00)空字节,导致整个数据库报 JSON 无法解析的错误? 本文将带你还原这个经典的“文件空洞”Bug,并分享如何通过自定义存储类 MyJSONStorage 彻底解决它。 一、 现象还原:消失的尾巴与诡异的 NUL 在默认情况下,TinyDB 的 JSONStorage 是这样写入文件的: 1. seek(0) 指针回到文件开头。 2. write(json_data) 写入序列化后的 JSON 字符串。 3. truncate(

By 樊泽豪
搭建K3s集群

搭建K3s集群

K8s环境部署 简介 搭建 K3s + Rancher + Longhorn + MetalLB环境 K3s K3s是一款轻量级Kubernetes发行版,其核心优势在于: * 极致轻量:单个二进制文件不到100MB,仅需512MB内存即可运行,启动和资源消耗远低于标准集群。 * 功能齐全:通过CNCF认证,100%兼容标准Kubernetes API,并内置了常用组件,开箱即用。 * 灵活的数据存储:可以使用外部数据库(mariadb)替代etcd,降低初始资源。 Rancher Rancher是一个开源容器管理平台,核心能力包括: * 统一纳管:可集中管理任意K8s集群(包括K3s/RKE2、云厂商托管集群及已有集群)。 * 降低门槛:提供直观图形界面及开箱即用的CI/CD、监控、服务网格等工具链。 * 安全合规:支持AD/LDAP对接及精细化RBAC,实现跨集群统一安全策略。 Longhorn Longhorn 是一款专为 Kubernetes 设计的轻量级、可靠且易用的分布式块存储系统,它通过容器和微服务将现有存储资源转化为持久卷,

By 樊泽豪
Docker常用操作

Docker常用操作

安装 Windows安装Docker到F盘(非系统盘) Start-Process -FilePath 'Docker_Desktop_Installer.exe' -Wait -ArgumentList "install --installation-dir=F:\DockerDesktop" 改变容器、镜像文件位置 以管理员权限启动Docker Desktop,Settings-Resources-Disk iamge location 配置dockerhub国内源 阿里云:容器镜像服务 (aliyun.com) 其他源 more /etc/docker/daemon.json 输入以下文件: { "registry-mirrors": [ "https://kk8u6omk.mirror.aliyuncs.com", "https:

By 樊泽豪
如何在 Ghost 博客中添加类似 Word 的左侧固定目录(纯干货)

如何在 Ghost 博客中添加类似 Word 的左侧固定目录(纯干货)

当我们在 Ghost 博客中撰写长文时,一个类似 Word 导航窗格的目录能极大提升读者的阅读体验。本文将分享如何通过 Code Injection(代码注入) 快速实现一个完全静止、不随点击乱跳、长标题自动换行的优雅左侧悬浮目录。 实现效果 * 完全固定: 目录稳居文章左侧,只有正文跟随鼠标滚动。 * 绝对静止: 修复了常见插件点击目录项时,目录自身会产生二次跳动的痛点。 * 清晰完整: 长标题自动换行显示,绝不裁剪文字。 * 移动端友好: 在手机或平板等小屏幕上自动隐藏,防止遮挡正文。 部署步骤 无需修改任何主题源文件,只需登录 Ghost 后台,进入 Settings -> Code Injection(代码注入),将以下两段代码全选覆盖粘贴即可。 1. 注入到 【Site Header】 在 Site Header 框中复制并完全粘贴以下代码(包含 Tocbot 官方样式与自定义微调

By 樊泽豪