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 和密码远程登录,再用服务状态、端口、客户端详细日志和认证日志逐层验证。
远程修改时保留现有会话;真实地址、密码和私钥不应写入发布文档。