SSH-KEYSCAN(1)

NAME
ssh-keyscan - 收集 ssh 公钥

总览 (SYNOPSIS)
ssh-keyscan [-v46] [-p port] [-T timeout] [-t type] [-f file] [host | addrlist namelist] [...]

描述 (DESCRIPTION)
ssh-keyscan 工具用来收集一组主机的 ssh 主机公钥 (host key), 设计目的是帮助建立和验证 ssh_known_hosts 文件. ssh-keyscan 提供了一个小巧的接口让 shell 和 perl 文件使用.

ssh-keyscan 使用了非阻塞 socket I/O 函数, 尽可能多的并行访问多个主机, 因此它的效率很高. 它可以在数十秒内采集某域中 1,000 台主机的密钥, 即使某些主机离线或不使用 ssh. 扫描的时候无须登录目标主机, 也不涉及任何加密操作.

可用的选项有:

-p port
    远程主机的端口.

-T timeout
    设置连接超时. 接入主机后, 从最后一次读到数据经过 timeout 秒没有新的数据进来, 连接就被关闭. 默认超时是 5 秒.

-t type
    指定收集的密钥类型. 可选项有协议第一版的 “rsa1” 和协议第二版的 “rsa” 或 “dsa”. 可以指定多个选项, 中间用逗号隔开. 默认项是 “rsa1”.

-f filename
    从该文件读取主机名或 addrlist namelist 地址/名字对, 一行一项. 如果用 - 代替文件名, ssh-keyscan 就从标准输入设备读取主机名或 addrlist namelist 地址/名字对.

-v  冗长模式. 使 ssh-keyscan 显示调试信息.

-4  强制 ssh-keyscan 只使用 IPv4 地址.

-6  强制 ssh-keyscan 只使用 IPv6 地址.

安全 (SECURITY)
如果通过 ssh-keyscan 建立了 ssh_known_hosts 文件, 但却没有验证里面的公钥, 用户很容易遭到 中间人 攻击. 而另一方面, 如果安全模型允许这个风险, 创建 ssh_known_hosts 文件后, ssh-keyscan 能够帮助检测已经发起的密钥篡改或中间人攻击.

示例 (EXAMPLES)

显示 hostname 的 rsa1 主机密钥:

    $ ssh-keyscan hostname

在 ssh_hosts 文件中查找那些主机, 它们有新的密钥, 或者密钥和排序后的 ssh_known_hosts 文件不同:

    $ ssh-keyscan -t rsa,dsa -f ssh_hosts | \
    	sort -u - ssh_known_hosts | diff ssh_known_hosts -

文件 (FILES)
输入格式:

    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 密钥的输出格式:

    host-or-namelist keytype base64-encoded-key

这里的 keytype 既可以是 “ssh-rsa” 也可以是 “ssh-dsa”.

/etc/ssh/ssh_known_hosts

BUGS
如果被扫描的服务器版本早于 2.9, 它会在控制台上 显示 "Connection closed by remote host". 这是因为它在 ssh 端口上打开连接, 读取公钥, 然后立即丢掉连接.

另见 (SEE ALSO)
ssh(1), sshd(8)

作者 (AUTHORS)
David Mazieres <dm@lcs.mit.edu> 写了最初的版本, 而 Wayne Davison <wayned@users.sourceforge.net> 增加了对协议第二版的支持.

TRANSBY
LinuxForum.Net CMPP 中文手册页计划 http://cmpp.linuxforum.net

* Sun Jul 25 2004 徐明 <xuming@users.sourceforge.net>
- 初始版本