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 和密码远程登录,再用服务状态、端口、客户端详细日志和认证日志逐层验证。

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

相关推荐
Angeldream1231 小时前
第 10 章 医学影像伦理与安全
图像处理·人工智能·python·安全·机器学习·医学影像
GeW1 小时前
产业新优势基础软件的人才底盘,从Linux与数据库开始
linux·数据库
方白羽1 小时前
Android 双开环境底层剖析与风控检测落地
android·安全·app
by209991 小时前
Linux GCC/G++ 编译与 Makefile 构建
linux·运维·服务器·经验分享
pt10432 小时前
Cisco设备网络安全系列-18:SIEM与SOAR安全解决方案
网络·安全
cq林志炫2 小时前
两个Linux服务器之间同步文件
linux·运维·服务器
yyuuuzz3 小时前
云服务器安全组规则优先级的机制记录
运维·服务器·网络·安全·阿里云·aws
无人生还别怕3 小时前
如何搭建k8s服务(containerd部署)
linux·云原生·容器·kubernetes·openanolisos
企鹅侠客4 小时前
Linux CPU 负载平均值(Load Average)详解:从原理到实践
linux·运维·服务器·服务器负载
易点云徐源4 小时前
HP 暗影精灵 PRO 16 安装双系统后,开机直接进入 Windows,按 F9 才能进入 Ubuntu:GRUB 菜单不显示的处理方法
linux·运维·ubuntu