Linux命令-ssh-keyscan(从主机收集公钥) Linux命令-ssh-keyscan从主机收集公钥 ssh-keyscan 是一个批量收集 SSH 主机公钥的工具。与交互式的 ssh 首次连接确认不同ssh-keyscan 非交互地从指定主机获取公钥非常适合自动化脚本、主机清单管理和大规模部署前的 known_hosts 预填充。快速参考基本用法选项详解常见使用场景批量操作安全管理高级用法安全注意事项ssh-keyscan是一个批量收集 SSH 主机公钥的工具。与交互式的ssh首次连接确认不同ssh-keyscan非交互地从指定主机获取公钥非常适合自动化脚本、主机清单管理和大规模部署前的known_hosts预填充。快速参考ssh-keyscan[选项][主机...]ssh-keyscan从目标的 SSH 服务端口连接并获取公钥输出可重定向到~/.ssh/known_hosts文件避免首次连接时的交互式确认提示。基本用法# 获取单台主机的公钥ssh-keyscan server.example.com# 获取并直接添加到 known_hostsssh-keyscan-Hserver.example.com~/.ssh/known_hosts# 指定非标准端口ssh-keyscan-p2222server.example.com# 获取多个主机的公钥ssh-keyscan server1 server2 server3# 从文件批量获取ssh-keyscan-fhosts.txt选项详解选项说明-H哈希主机名推荐增加安全性-p PORT指定 SSH 端口-T TIMEOUT连接超时时间秒-t TYPE指定密钥类型rsa/dsa/ecdsa/ed25519-f FILE从文件读取主机列表-4/-6强制使用 IPv4/IPv6-c请求证书而非纯密钥-v详细输出-D打印调试信息常见使用场景# 场景 1: 避免首次连接提示 # 传统方式交互式sshnew-server.example.com# The authenticity of host new-server.example.com cant be established.# Are you sure you want to continue connecting (yes/no)?# 使用 ssh-keyscan 预填充ssh-keyscan-Hnew-server.example.com~/.ssh/known_hostssshnew-server.example.com# 无提示# 场景 2: Ansible/自动化部署 # 部署前批量添加所有主机公钥ansible all --list-hosts|tail-n2|whilereadhost;dossh-keyscan-H$host~/.ssh/known_hosts2/dev/nulldone# 场景 3: 不同密钥类型收集 # 仅收集 Ed25519 密钥ssh-keyscan-ted25519 host.example.com# 收集多种类型ssh-keyscan-tecdsa,ed25519 host.example.com# 收集全部可用类型ssh-keyscan-trsa,dsa,ecdsa,ed25519 host.example.com2/dev/null批量操作# 从 IP 范围批量收集foripin192.168.1.{1..254};dossh-keyscan-T2$ip~/.ssh/known_hosts2/dev/nulldonewait# 从主机清单文件批量操作cathostlist.txtEOF 192.168.1.10 192.168.1.20 db.private.local web.prod.internal EOF# 哈希存储推荐ssh-keyscan-H-fhostlist.txt~/.ssh/known_hosts# 非哈希存储调试时使用ssh-keyscan-fhostlist.txtknown_hosts_plain.txt# 去重 known_hostssort-u~/.ssh/known_hosts-o~/.ssh/known_hosts# 并行批量收集超时 3 秒cathostlist.txt|xargs-P10-I{}ssh-keyscan-T3-H{}~/.ssh/known_hosts2keyscan_errors.log# 验证收集结果wc-l~/.ssh/known_hosts安全管理# 清除特定主机的旧记录ssh-keygen-Rcompromised-host.example.com# 清除旧记录后重新扫描ssh-keyscan-Hnew-server.example.com~/.ssh/known_hosts# 验证 known_hosts 中的记录ssh-keygen-H-Fserver.example.com# 审计 known_hosts 文件echo known_hosts 审计 echo总记录数:$(wc-l~/.ssh/known_hosts)echoMD5 哈希:$(md5sum ~/.ssh/known_hosts|cut-d -f1)# 提取所有主机名需要先取消哈希安全注意ssh-keygen-F*-f~/.ssh/known_hosts2/dev/null# 对比新旧主机密钥检测 MITM 攻击ssh-keyscan server.example.com|whilereadline;doifgrep-qF$line~/.ssh/known_hosts;thenecho✅ 密钥匹配: server.example.comelseecho❌ 密钥不匹配可能存在中间人攻击fidone高级用法# 为特定子网生成 known_hosts 文件NETWORK10.0.0mkdir-p/tmp/ssh_scanforoctetin{1..50};dossh-keyscan-T1-H${NETWORK}.${octet}/tmp/ssh_scan/network_hosts2/dev/nulldonewaitecho收集完成条目数:$(wc-l/tmp/ssh_scan/network_hosts)# 按密钥类型分类输出ssh-keyscan-trsa-Hhost.example.comrsa_keys.txt ssh-keyscan-ted25519-Hhost.example.comed25519_keys.txt# 导出为 SSHFP DNS 记录格式ssh-keyscan host.example.com|ssh-keygen-rhost.example.com# 扫描域名对应的多个 IP处理负载均衡HOSTcdn.example.comforipin$(digshort$HOST);doecho# IP:$ipssh-keyscan-T3$ip2/dev/nulldone# 脚本化检查密钥是否已存在于 known_hostscheck_known_host(){localhost$1ifssh-keygen-F$host-f~/.ssh/known_hosts/dev/null21;thenecho✅$host已存在于 known_hostsreturn0elseecho⚠️$host未在 known_hosts 中正在添加...ssh-keyscan-H$host~/.ssh/known_hosts2/dev/nullreturn$?fi}check_known_hostnew-server.local安全注意事项安全警告ssh-keyscan不验证主机身份——它只是收集公钥。收到的主机公钥在首次使用时都应通过带外方式如电话、当面确认进行验证始终使用-H选项哈希主机名防止主机名信息泄露在生产环境中应使用 SSH CA 证书签名代替手动 known_hosts 管理定期使用ssh-keygen -R清理不再需要的 known_hosts 记录# SSH CA 模式企业推荐方案避免手动管理 known_hosts# 客户端配置 ~/.ssh/configcat~/.ssh/configEOF Host *.company.com CertificateFile ~/.ssh/user_key-cert.pub EOF# 这样就不需要逐台收集主机密钥了ssh-keyscan是自动化 SSH 部署中的先遣工具。虽然它不验证主机身份但在可信任的私有网络环境中它极大地简化了首次 SSH 连接的工作流程。

相关新闻

最新新闻

免费调用Kimi与GLM-5.2 API:开源代理部署与实战指南

免费调用Kimi与GLM-5.2 API:开源代理部署与实战指南

这次我们来看一个让本地开发者兴奋的项目:免费调用 Kimi K3 和 GLM-5.2 的 API。这听起来有点不可思议,毕竟 Kimi 作为月之暗面旗下的明星产品,其强大的长文本处理能力一直备受关注,而 GLM-5.2 也是智谱 AI 最新发布的重磅模型。通…

2026/8/11 9:10:10
源于国赛标准,归于日常课堂——哈弗M6发动机仿真教学软件

源于国赛标准,归于日常课堂——哈弗M6发动机仿真教学软件

指尖上的发动机课堂——哈弗M6 PLUS发动机拆装检修仿真教学软件介绍在职业教育的汽修课堂上,老师们常会遇到这样的“小烦恼”:实训整车数量有限,几十双眼睛盯着一台发动机,后排同学踮着脚也看不清细节;精密部件拆装一次…

2026/8/11 9:10:10
SpringBoot智能招聘平台:算法优化与高并发实践

SpringBoot智能招聘平台:算法优化与高并发实践

1. 项目概述:基于SpringBoot的智能招聘平台设计初衷 高校人才就业市场长期存在信息不对称问题——企业找不到合适人才,毕业生投递简历如石沉大海。去年帮学弟改简历时,他投了200多份简历只收到3个面试邀约,这种经历促使我开发这个…

2026/8/11 9:10:10
OpenClaw:从AI工具到自主伙伴的架构演进与实战解析

OpenClaw:从AI工具到自主伙伴的架构演进与实战解析

1. 从“工具”到“伙伴”:OpenClaw的定位革命 最近在AI圈里,OpenClaw这个名字开始频繁被提及。如果你只是把它当作又一个“AI Agent”或者“智能助手”来看,那可能就错过了它最核心的价值。我花了不少时间研究它的技术论文、社区讨论和实际应…

2026/8/11 9:10:10
Flutter树形结构可视化在鸿蒙终端的适配与优化

Flutter树形结构可视化在鸿蒙终端的适配与优化

1. 项目背景与核心价值 这个标题背后隐藏着一个非常实用的开发场景:如何在跨平台开发中实现轻量级的树形结构可视化。ascii_art_tree这个Flutter三方库原本是为终端环境设计的文本树形结构生成工具,而鸿蒙(HarmonyOS)作为新兴的分…

2026/8/11 9:10:10
Unity集成Python开发指南:自动化工具与数据处理的实战应用

Unity集成Python开发指南:自动化工具与数据处理的实战应用

1. 项目概述:为什么要在Unity里用Python?如果你是一个Unity开发者,或者对游戏开发、交互式内容创作感兴趣,那你对C#一定不陌生。Unity的核心脚本语言就是C#,它强大、高效,是构建复杂游戏逻辑的不二之选。但…

2026/8/11 9:05:09