手册页部分 1: 用户命令

退出打印视图

更新时间: 2014 年 7 月
 
 

ssh-keyscan(1)

名称

ssh-keyscan - 收集大量主机的 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

rsadsa 密钥的输出格式,其中 keytypessh-rsa 或 `ssh-dsa


host-or-namelist keytype base64-encoded-key

选项

支持以下选项:

–f filename

从该文件中读取主机或地址列表名称列表对,每行读取一个。如果指定的不是文件名,ssh-keyscan 将从标准输入中读取主机或地址列表名称列表对。

–p port

所要连接的远程主机上的端口。

–T timeout

设置连接尝试的超时时间。如果自发起主机连接以来或自上次从该主机中读取内容以来经过了 timeout 秒,则将关闭连接并且所涉及的主机将被视为不可用。timeout 的缺省值为 5 秒。

–t type

指定要从被扫描的主机提取的密钥类型。type 的可能值包括用于协议版本 1 的 rsa1 和用于协议版本 2 的 rsadsa。可指定以逗号分隔的多个值。缺省值为 rsa1

–v

指定详细模式。输出有关进度的调试消息。

–4

强制仅使用 IPv4 地址。

–6

强制仅使用 IPv6 地址。

安全

如果在不验证密钥的情况下使用 ssh-keyscan 构建 ssh_known_hosts 文件,用户容易遭受中间人 (man-in-the-middle) 攻击。如果安全模型允许存在此类风险,可以在创建 ssh_known_hosts 文件后使用ssh-keyscan 帮助检测被篡改的密钥文件或发生的中间人攻击。

示例

示例 1 输出 rsa1 主机密钥

以下示例输出了计算机 hostnamersa1 主机密钥:


$ 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 -

文件

/etc/ssh_known_hosts

包含 ssh 主机公钥列表。

退出状态

将返回以下退出值:

0

没有用法错误。ssh-keyscan 可能成功,也可能失败,还有可能无法扫描一个、多个或所有给定的主机。

1

用法错误。

属性

有关下列属性的说明,请参见 attributes(5)

属性类型
属性值
可用性
network/ssh
接口稳定性
Committed(已确定)

另请参见

ssh(1)sshd(1M)attributes(5)

作者

作者

David Mazieres 编写了初始版本,Wayne Davison 添加了对协议版本 2 的支持。

已知问题

如果服务器低于版本 2.9,ssh—keyscan 会在它扫描的所有计算机的控制台上生成以下消息:

Connection closed by remote host

这是因为 ssh-keyscan 采用以下过程:打开与 ssh 端口的连接,读取公钥,在获取密钥后立即放弃该连接。