防止中间人攻击关键在于“连得准”,即强制主机密钥预置与严格校验、禁用密码登录仅用ed25519密钥认证、关闭代理转发并为隧道专用密钥隔离权限,辅以dnssec验证和ip白名单。

防止中间人攻击,关键不是“连得上”,而是“连得准”——每次 SSH 隧道建立时,客户端必须确认对面服务器的身份真实可信,且自身身份不可冒用。这靠的不是加密强度,而是校验机制是否被严格执行。
强制主机密钥校验,堵死自动信任漏洞
SSH 客户端默认会在首次连接时提示“无法确认主机真实性”,但若配置松动,可能跳过验证或自动接受未知密钥,等于把门钥匙交给中间人。
- 在 ~/.ssh/config 中为跳板机或目标主机显式启用严格校验:
Host jump.example.com
StrictHostKeyChecking yes
UserKnownHostsFile ~/.ssh/known_hosts_jump - 首次连接前,用 ssh-keyscan -t ed25519,ecdsa jump.example.com 获取公钥,人工比对 SHA256 指纹(如 SHA256:AbC123...xyz)后写入对应 known_hosts 文件
- 禁止使用 -o StrictHostKeyChecking=accept-new 或 no,这些参数会让客户端绕过指纹确认
禁用密码登录,只认可信密钥
密码认证即使走加密通道,也存在被暴力破解、会话劫持或服务端私钥泄露后解密的风险。密钥认证则把身份绑定到客户端本地私钥,数学上难以伪造。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 服务端 /etc/ssh/sshd_config 中设为:
PubkeyAuthentication yes
PasswordAuthentication no
PermitRootLogin no - 客户端生成强密钥:ssh-keygen -t ed25519 -C "ops@company"
- 公钥部署到服务端 ~/.ssh/authorized_keys,并确保该文件权限为 600
隧道场景下禁用代理转发,改用专用密钥隔离权限
开启 ForwardAgent yes 或允许 AllowAgentForwarding,等于把本地私钥临时“借给”跳板机——一旦跳板机被攻陷,攻击者可直接复用你的身份访问下游所有机器。
- 客户端配置中明确关闭:
Host jump.example.com
ForwardAgent no - 为隧道跳转链单独生成一套密钥(如 id_rsa_tunnel),不与日常运维密钥混用
- 反向隧道命令中避免 -o StrictHostKeyChecking=no,心跳和失败退出参数保留:
ssh -fNTR 60022:localhost:22 user@jump -o ServerAliveInterval=30 -o ExitOnForwardFailure=yes
辅助加固:DNSSEC 验证 + 可信 IP 白名单
当运维规模扩大、主机数量较多时,单靠人工核对指纹易出错,可叠加自动化校验手段作为补充,但不能替代预置指纹。
- 若域名已启用 DNSSEC,可在 /etc/ssh/ssh_config 加入:
VerifyHostKeyDNS yes,让 SSH 查询 _sshfp DNS 记录比对指纹 - 服务端防火墙或云平台安全组限制 SSH 端口仅对可信运维 IP 开放,从网络层收窄攻击面
- 内网跳板机配置 GatewayPorts yes 仅用于必要反向映射,且映射端口不复用常用服务端口(如避免用 22、80、443)










