跳过导航链接 | |
退出打印视图 | |
手册页第 1 部分:用户命令 Oracle Solaris 11.1 Information Library (简体中文) |
- 收集大量主机的 ssh 主机公钥
ssh-keyscan [-v46] [-p port] [-T timeout] [-t type] [-f file] [-] [host... | addrlist namelist] [...]
ssh-keyscan 是一个用于收集大量主机的 ssh 主机公钥的实用程序。该实用程序用于帮助生成和验证 ssh_known_hosts 文件。ssh-keyscan 提供了适合 shell 和 perl 脚本使用的最小接口。ssh-keyscan 的输出定向到标准输出。
ssh-keyscan 使用非阻塞套接字 I/O,以并行方式联系尽可能多的主机,因此该实用程序非常高效。包括 1,000 个主机的域中的密钥可以在几十秒内收集完毕,即使其中一些主机关闭或未运行 ssh。扫描时,不需要登录访问所扫描的计算机,扫描过程也不涉及加密。
输入格式:
1.2.3.4,1.2.4.4 name.my.domain,name,n.my.domain,n,1.2.3.4,1.2.4.4
rsa1 密钥的输出格式:
host-or-namelist bits exponent modulus
rsa 和 dsa 密钥的输出格式,其中 keytype 是 ssh-rsa 或 `ssh-dsa:
host-or-namelist keytype base64-encoded-key
支持以下选项:
从该文件中读取主机或地址列表名称列表对,每行读取一个。如果指定的不是文件名,ssh-keyscan 将从标准输入中读取主机或地址列表名称列表对。
所要连接的远程主机上的端口。
设置连接尝试的超时时间。如果自发起主机连接以来或自上次从该主机中读取内容以来经过了 timeout 秒,则将关闭连接并且所涉及的主机将被视为不可用。timeout 的缺省值为 5 秒。
指定要从被扫描的主机提取的密钥类型。type 的可能值包括用于协议版本 1 的 rsa1 和用于协议版本 2 的 rsa 或 dsa。可指定以逗号分隔的多个值。缺省值为 rsa1。
指定详细模式。输出有关进度的调试消息。
强制仅使用 IPv4 地址。
强制仅使用 IPv6 地址。
如果在不验证密钥的情况下使用 ssh-keyscan 构建 ssh_known_hosts 文件,用户容易遭受中间人 (man-in-the-middle) 攻击。如果安全模型允许存在此类风险,可以在创建 ssh_known_hosts 文件后使用ssh-keyscan 帮助检测被篡改的密钥文件或发生的中间人攻击。
示例 1 输出 rsa1 主机密钥
以下示例输出了计算机 hostname 的 rsa1 主机密钥:
$ ssh-keyscan hostname
示例 2 查找所有主机
以下命令查找 ssh_hosts 文件中密钥与排序文件 ssh_known_hosts 中密钥不同(密钥未在该排序文件中出现)的所有主机。
$ ssh-keyscan -t rsa,dsa -f ssh_hosts | \ sort -u - ssh_known_hosts | diff ssh_known_hosts -
包含 ssh 主机公钥列表。
将返回以下退出值:
没有用法错误。ssh-keyscan 可能成功,也可能失败,还有可能无法扫描一个、多个或所有给定的主机。
用法错误。
有关下列属性的说明,请参见 attributes(5):
|
David Mazieres 编写了初始版本,Wayne Davison 添加了对协议版本 2 的支持。
如果服务器低于版本 2.9,ssh—keyscan 会在它扫描的所有计算机的控制台上生成以下消息:
Connection closed by remote host
这是因为 ssh-keyscan 采用以下过程:打开与 ssh 端口的连接,读取公钥,在获取密钥后立即放弃该连接。