Debian SSH 安全配置:端口、来源限制与免密登录

Debian SSH 安全配置:端口、来源限制与免密登录

1. 服务介绍

SSH 用于 Linux 远程登录、命令执行和安全文件传输,常用于服务器管理、SFTP 文件访问和自动化运维。安全配置重点包括使用合法监听端口、限制允许账号、禁止 root 远程登录、使用密钥认证和检查认证日志。

本文整理 Debian 上的基础 SSH 安全配置:创建普通管理账号 cskadmin,为其授予 sudo 权限;把 SSH 端口改为 2222;只允许指定账号登录;在管理客户端配置 Ed25519 密钥;最后用服务端和客户端命令验证成功、拒绝和日志结果。

2. 准备运行环境

• 操作系统:Debian Linux,使用 systemd 管理 ssh 服务。

• 权限:服务端需要 root 或 sudo 权限;客户端需要可生成 SSH 密钥的普通账号。

• 节点:SSH 服务端和 InsideCli 管理客户端,实际主机名按现场环境替换。

• 参数:本文示例使用 SSH_PORT=2222 和 SSH_SERVER_IP;实际地址不要写死到脚本。

• 网络:修改端口前先放行 TCP 2222,并保留当前 SSH 会话。

• 账号:普通管理员通过 sudo 获取必要权限,不使用 root 远程登录。

• 备份:修改 /etc/ssh/sshd_config 和 /etc/ssh/ssh_config 前先备份。

• 密钥:私钥只保留在管理客户端,服务端只保存公钥。

3. 相关知识与注意点

• Debian 服务单元通常是 ssh,语法检查命令是 sshd -t。

• AllowUsers 是 SSH 用户白名单。启用后,未列出的系统账号不能通过 SSH 登录。

• PermitRootLogin no 禁止 root 直接远程登录;cskadmin 通过 sudo 执行管理命令。

• PubkeyAuthentication yes 启用密钥认证。确认密钥登录成功后,再关闭 PasswordAuthentication。

• 修改 SSH 端口不能替代密钥、来源限制、防火墙和 Fail2ban。

• sshd_config 修改后先 sshd -t,再 reload;不要直接重启并关闭唯一管理会话。

• 密钥权限必须正确:客户端 ~/.ssh 私有目录建议 0700,authorized_keys 建议 0600。

• 认证日志位置按 Debian 配置可能是 journal 或 /var/log/auth.log,以 journalctl 和实际文件为准。

4. 实验步骤

4.1 安装并启动 OpenSSH

服务端执行:

bash 复制代码
apt update
apt install -y openssh-server openssh-client
systemctl enable --now ssh
systemctl status ssh --no-pager

确认当前 SSH 监听:

bash 复制代码
ss -lntp | grep ssh
ssh -V

4.2 创建普通管理账号

创建 cskadmin,密码通过交互提示设置:

bash 复制代码
adduser cskadmin
usermod -aG sudo cskadmin
id cskadmin
su - cskadmin
sudo -v
sudo id

cskadmin 能通过 sudo 获取管理员权限,但不允许 root 直接 SSH 登录。

4.3 配置 SSH 端口和用户白名单

备份配置:

bash 复制代码
cp -a /etc/ssh/sshd_config /etc/ssh/sshd_config.bak.$(date +%F-%H%M%S)
vim /etc/ssh/sshd_config

配置示例:

text 复制代码
Port 2222
PermitRootLogin no
AllowUsers cskadmin
PubkeyAuthentication yes
PasswordAuthentication yes
MaxAuthTries 3

PasswordAuthentication 只用于首次密钥部署。确认密钥登录成功后改为 no:

text 复制代码
PasswordAuthentication no
KbdInteractiveAuthentication no

检查并 reload:

bash 复制代码
sshd -t
systemctl reload ssh
ss -lntp | grep ':2222'

新端口连接测试:

bash 复制代码
ssh -p 2222 cskadmin@SSH_SERVER_IP

4.4 配置客户端密钥登录

在 InsideCli 上生成 Ed25519 密钥:

bash 复制代码
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519
ssh-copy-id -p 2222 cskadmin@SSH_SERVER_IP

设置客户端权限:

bash 复制代码
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub

验证免密登录:

bash 复制代码
ssh -o IdentitiesOnly=yes \
  -i ~/.ssh/id_ed25519 \
  -p 2222 cskadmin@SSH_SERVER_IP
sudo id

确认成功后,服务端关闭密码认证并 reload。不要把私钥复制到服务端或写入文章。

5. 验证与排错

5.1 服务端配置和监听

bash 复制代码
sshd -t
systemctl is-active ssh
systemctl status ssh --no-pager
ss -lntp | grep ':2222'
grep -E '^(Port|AllowUsers|PermitRootLogin|PubkeyAuthentication|PasswordAuthentication)' /etc/ssh/sshd_config

5.2 客户端连接

允许账号测试:

bash 复制代码
ssh -vvv -p 2222 cskadmin@SSH_SERVER_IP

验证点:

• 连接使用 TCP 2222。

• cskadmin 使用公钥完成认证。

• sudo id 返回 root 权限信息。

• root 账号直接登录被 PermitRootLogin no 拒绝。

• 不在 AllowUsers 中的账号登录被 SSH 拒绝。

5.3 日志和失败原因

bash 复制代码
journalctl -u ssh --since '-10 min' --no-pager
tail -n 50 /var/log/auth.log
journalctl -b --no-pager | grep -Ei 'sshd|authentication|failed' | tail -n 50

客户端出现 Permission denied 时,按顺序检查端口、用户名、authorized_keys、权限、sshd_config、服务端日志和防火墙。不要通过开启 root 密码登录解决密钥配置问题。

6. 小结

SSH 基础安全配置链路是:安装服务、创建普通 sudo 账号、修改合法端口、限制 AllowUsers、部署 Ed25519 公钥、关闭 root 和密码远程登录,再用服务状态、端口、客户端详细日志和认证日志逐层验证。

远程修改时保留现有会话;真实地址、密码和私钥不应写入发布文档。

相关推荐
东鹏特饮1 小时前
15个实用Linux运维脚本
linux·运维·shell·脚本·redhat·常用生产脚本
远牧1 小时前
Ubuntu 26 升级踩坑实录:hermes-agent venv 重建全过程
linux·ubuntu·ai·agent
新时代牛马1 小时前
Linux PREEMPT_RT 详解(5.10.268-rt164)
linux·运维·服务器
眼不痛请看我1 小时前
Ubuntu_22.04_LTS虚拟机安装指南
linux·数据库·ubuntu
哎呦,帅小伙哦2 小时前
查看网卡配置连接工具组合——nmcli + nmtui
linux
xiaoye-duck2 小时前
《Linux 网络编程》从 0 手写 Reactor 反应堆(上):拆解 Reactor 架构 —— 连接抽象、Poller 封装与事件派发核心
linux·网络
脚踏实地,坚持不懈!2 小时前
Android 电池健康度检测全流程(驱动 → 内核 → HAL → Framework)
android·linux
砚凝霜2 小时前
【软考信息安全】第十二章 网络安全审计概述与分类
网络·安全·web安全
IT技术分享社区2 小时前
在 Windows 上跑未改动的 Linux 程序:微软 LiteBox v0.1 把这件事变简单了
linux·运维·windows·microsoft·开源