尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Linux-sshd-实战-白名单与跳板机
Linux sshd 实战指南从配置到白名单、跳板机代理本文面向有运维/SRE 基础、想把 SSH 真正用稳和用安全的读者。不只讲sshd_config的表面选项重点放在两个高频实战场景sshd 白名单只允许受信任来源登录和ssh proxy / 跳板机如何无公网 IP 地穿透访问内网机器。所有示例均可在生产环境直接套用。文中 IP / 端口 / 域名均为文档示例RFC 5737 保留地址、RFC 1918 私有段、example.com端口、网段按你自己的环境替换即可。目录sshd 是什么sshd_config 核心配置实战一sshd 白名单4 种方案实战二SSH 代理 / 跳板机ssh_proxy安全加固清单排障速查总结1. sshd 是什么sshd是 OpenSSH 的服务端守护进程监听 TCP 22或你改的端口负责处理客户端的 SSH 连接、身份认证、加密通道建立。客户端工具是ssh/scp/sftp。# 看版本客户端和服务端一起装ssh-V# systemd 系统状态 / 启动 / 开机自启systemctl status sshd systemctlenable--nowsshd# 配置文件路径# 主配置/etc/ssh/sshd_config# 片段目录部分发行版/etc/ssh/sshd_config.d/*.conf 优先级高于主文件# 主机密钥/etc/ssh/ 下 ssh_host_*_key# 服务端日志/var/log/secure (RHEL) 或 /var/log/auth.log (Debian)⚠️ 改完配置务必校验语法再重启避免把自己锁外面sshd-t# 校验配置文件语法无误则无输出2. sshd_config 核心配置贴一份生产可用的基线配置先放主文件或在sshd_config.d/99-hardening.conf# /etc/ssh/sshd_config.d/99-hardening.confPort2222# 改非标端口挡掉 99% 自动化扫描AddressFamily inet# 仅 IPv4按需ListenAddress0.0.0.0 Protocol2# 强制 SSHv2杜绝 v1# —— 认证 ——PermitRootLogin no# 禁止 root 直接登录用普通用户 sudoPubkeyAuthenticationyes# 开启密钥PasswordAuthentication no# 密钥就绪后关密码先确认密钥能登再关AuthenticationMethods publickey# 强制仅公钥等价上一条但更硬PermitEmptyPasswords no# —— 会话 ——LoginGraceTime30# 认证宽限时间MaxAuthTries3# 最多试 3 次MaxSessions10ClientAliveInterval300# 5 分钟无活动发探测ClientAliveCountMax2# 连续 2 次无响应断连# —— 其他 ——X11Forwarding no# 不需要图形就关AllowTcpForwardingyes# 跳板机场景需要下面实战二要用PermitTunnel no UseDNS no# 关反向解析登录更快、避免 DNS 卡住应用sshd-tsystemctl restart sshd3. 实战一sshd 白名单4 种方案“白名单” 只允许某些来源IP/网段登录其余一律拒绝。下面 4 种按需组合推荐方案 3防火墙做第一道闸 方案 1sshd 原生做第二道闸。方案 1sshd 原生 ——AllowUsers userhostMatch AddressOpenSSH 5.6 支持在userhost里写CIDR这是最干净的服务端白名单# 只允许# - 运维 alice 从 203.0.113.0/24 登录# - 内网 10.10.0.0/16 任意用户登录# - 其余来源全部拒绝AllowUsers alice203.0.113.0/24 *10.10.0.0/16注意AllowUsers是白名单语义——写了它之后没列出的用户/来源一律拒登。配合DenyUsers可叠加黑名单。更精细地用Match Address按来源控制认证方式# 信任网段内允许密码方便应急公网只允许密钥Match Address10.10.0.0/16 PasswordAuthenticationyesMatch Address *,!10.10.0.0/16 PasswordAuthentication no方案 2TCP Wrappershosts.allow/hosts.deny老派做法很多内网环境还在用# /etc/hosts.denysshd: ALL# /etc/hosts.allowsshd:203.0.113.0/2410.10.0.0/16⚠️大坑Debian 8 / RHEL 7 之后很多发行版编译 OpenSSH 时带了--without-tcp-wrappershosts.allow直接不生效。先验证ldd$(whichsshd)|grep-iwrap# 有输出才支持无输出此法失效不确定就别依赖它用下面的防火墙方案。方案 3推荐防火墙限制 22/端口来源白名单放防火墙最稳连接在最底层就被 drop# —— firewalldRHEL/CentOS 7, Rocky, Alma——firewall-cmd--permanent--add-port2222/tcp firewall-cmd--permanent--add-rich-rulerule familyipv4 source address203.0.113.0/24 port protocoltcp port2222 acceptfirewall-cmd--permanent--add-rich-rulerule familyipv4 source address10.10.0.0/16 port protocoltcp port2222 accept# 默认区域里没被 accept 的 2222 流量保持默认建议默认 zone 设为 drop 或仅放行白名单firewall-cmd--reload# —— ufwUbuntu/Debian——ufw allow from203.0.113.0/24 to any port2222ufw allow from10.10.0.0/16 to any port2222ufw deny2222# 兜底拒绝其余来源或 ufw default deny incoming# —— iptables裸机/老系统——iptables-AINPUT-ptcp-s203.0.113.0/24--dport2222-jACCEPT iptables-AINPUT-ptcp-s10.10.0.0/16--dport2222-jACCEPT iptables-AINPUT-ptcp--dport2222-jDROP方案 4fail2ban动态黑名单防爆破白名单是允许谁fail2ban 是谁乱试就封谁两者互补# /etc/fail2ban/jail.local[sshd]enabledtrueport2222filtersshd logpath/var/log/secure# Debian 改成 /var/log/auth.logmaxretry3bantime1h findtime10msystemctlenable--nowfail2ban fail2ban-client status sshd# 看被封 IP组合建议防火墙白名单方案3拦来源 sshd 原生限制方案1兜底 fail2ban方案4防白名单内也有肉鸡乱试。4. 实战二SSH 代理 / 跳板机ssh_proxy真实场景内网机器10.10.20.141:2222没有公网 IP你只能先登录一台有公网的跳板机jump.example.com:2222再跳进去。这就是 ssh proxy。4.1 ProxyJump最推荐OpenSSH 7.3-J一行搞定多级跳板# 单级跳板ssh-Jjumpuserjump.example.com:2222 inneruser10.10.20.141-p2222# 多级跳板A - B - Cssh-JuserA,userB userC4.2 ProxyCommand nc老版本兼容没有-J时用ProxyCommand调nc/ncat/socatssh-oProxyCommandssh -p 2222 jumpuserjump.example.com -W %h:%p\-p2222inneruser10.10.20.141%h:%p会被替换成最终目标主机和端口-W在跳板机上建立到目标的明文隧道加密在两端 ssh 之间跳板机看不到内容。4.3~/.ssh/config完整示例一劳永逸把跳板逻辑写进客户端配置之后直接ssh inner# ~/.ssh/config# 跳板机有公网Host jump HostName jump.example.com Port2222User jumpuser IdentityFile ~/.ssh/id_ed25519# 内网目标机无公网经 jump 跳Host inner HostName10.10.20.141 Port2222User inneruser IdentityFile ~/.ssh/id_ed25519 ProxyJump jump# 老版本无 ProxyJump 时改用# ProxyCommand ssh -p 2222 jumpuserjump.example.com -W %h:%p# 通配所有 10.10.* 内网机器统一走跳板Host10.10.* ProxyJump jump Port2222chmod600~/.ssh/configsshinner# 自动走跳板无需手动 -Jscpfile.txt inner:/tmp/# scp 同样走跳板4.4 动态 SOCKS 代理-D浏览器翻内网把跳板机当 SOCKS5 出口浏览器配127.0.0.1:1080即可访问内网 Webssh-D1080-N-fjump# -N 不执行命令 -f 后台4.5 端口转发-L/-R# 本地转发把内网 10.10.20.141:3306 映射到本机 13306经跳板穿透ssh-L13306:10.10.20.141:3306-N-fjump# 远程转发把本机 8080 暴露到跳板机 18080临时对外暴露内网服务时用ssh-R18080:localhost:8080-N-fjump跳板机要支持转发记得把第 2 节的AllowTcpForwarding yes打开。5. 安全加固清单项建议优先级改端口Port 2222挡扫描高禁 root 直登PermitRootLogin no高关密码PasswordAuthentication no 仅公钥高白名单防火墙 sshdAllowUsers双闸高fail2ban防白名单内爆破中密钥算法用 ed25519ssh-keygen -t ed25519中会话超时ClientAlive*配置中双因素AuthenticationMethods publickey,keyboard-interactive Google Authenticator高安全场景生成密钥并分发记住先确认能密钥登录再关密码ssh-keygen-ted25519-C$(whoami)$(hostname)-f~/.ssh/id_ed25519 ssh-copy-id-i~/.ssh/id_ed25519.pub-p2222inneruser10.10.20.1416. 排障速查# 详细调试看卡在哪一步DNS / 认证 / 转发ssh-v内网目标# -vvv 更细ssh-Ginner# 打印 inner 最终生效的全部配置排查 config 冲突神器# 配置改崩了连不上用控制台/VNC 进机器后sshd-t# 先查语法# 临时开个救援端口必须用与主端口不同的端口别撞车/usr/sbin/sshd-p22222-oPasswordAuthenticationyes# 看谁在暴力试journalctl-usshd-n50--no-pagergrepFailed password/var/log/secure|awk{print $11}|sort|uniq-c|sort-rn# 跳板连不通时分层验证sshjump# 1. 跳板本身能登吗sshinner# 2. 走 config 的跳板能登吗ssh-Jjump inner-v# 3. 加 -v 看 ProxyJump 在哪断7. 总结sshd 不是开了就行把密码认证关掉、改非标端口、禁 root是基础三件套。白名单要分层防火墙方案3做第一道物理闸 sshd 原生AllowUsers/Match Address方案1做逻辑闸fail2ban 兜底防内部爆破。别迷信 TCP Wrappers——先ldd确认它到底编进去了没有。跳板机首选ProxyJump-J一条命令穿透内网配合~/.ssh/config把10.10.*全量走跳板日常ssh inner就跟直连一样顺手。-D给浏览器开 SOCKS-L/-R做端口转发覆盖 90% 内网访问需求。改配置铁律sshd -t校验 → 保留一个已验证的救援会话/端口 → 再重启。别把自己锁门外。
RELATED

相关推荐

LangChain4j 流式输出:打字机效果 + SSE,回答不再干等三秒

LangChain4j 流式输出:打字机效果 + SSE,回答不再干等三秒

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/10/22 7:22:12
【脚本】 【Linux】重命名网卡

【脚本】 【Linux】重命名网卡

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/10/22 7:22:12
Webrtc本地服务器hub实现细节和信令交互

Webrtc本地服务器hub实现细节和信令交互

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/10/22 7:22:12
MORE NEWS

更多资讯

📰

基于WiFi的课堂考勤系统:从MAC地址识别到Python实战部署

简介:基于WiFi的课堂考勤系统是一套利用WiFi网络自动识别学生设备MAC地址来完成课堂考勤的实用方案,主要面向高校教师、教务管理人员以及教育信息化产品开发者。资源系统梳理了考勤实现原理:通过接入点采集设备物理地址,并与学生信…

📰

32岁程序员转行大模型:四个月实操路线图

32岁,写了十来年代码,想转行大模型。这个念头估计在不少程序员脑子里转了好几个月。打开收藏夹,几十篇“Transformer原理详解”“大模型微调教程”“转行大模型学习路线”全都在吃灰。收藏从未停止,行动从未开始。我就是从这一步走…

📰

从基础RAG到高级RAG:解决召回精度、上下文污染与幻觉的实战指南

先把结论放前面:如果你还在用“文档切块 向量检索 塞进上下文”这种三段式流水线,那你做的其实是基础 RAG。在演示 Demo 里它效果很好,但只要数据量上来、问题变复杂、答案要求可验证,这套方案会立刻撞上召回精度、上下文污染、…

📰

企业AI原生架构深度拆解:从编排到交互的落地关键

最近跟几个团队聊AI落地,听到最多的一句话是“模型很强,但集成进业务很难”。这句话恰好点中了企业AI原生架构的核心矛盾:模型的智能只是能力起点,要变成业务价值,中间还隔着一层编排、一层交互。很多团队恰恰栽在这两…

📰

RAG架构下Dify知识库优化实战:让AI助手回答更精准

做知识库类的AI应用也有一段时间了,最常听到的抱怨就是:我已经把资料传进Dify知识库了,AI助手回答还是不准。这里头有一个很大的误会——大家总把回答质量的好坏,全算在“大模型聪不聪明”头上。实际上在RAG架构下,模型…

📰

双系统伪距单点定位:数学模型到数据处理与精度调优

简介:从GNSS定位基础概念讲起,伪距单点定位是绝对定位中最基础的模式,通过最小二乘解算即可获得经纬高。双系统融合因增加卫星数而改善几何强度,但若时钟偏差、权重模型和误差修正处理不当,精度反而可能下降。文章详解…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬