「ssh-keyscan(1)」-

  LINUX MANUAL PAGES

收集SSH公钥

命令语法格式

ssh-keyscan [-46cHv] [-f file] [-p port] [-T timeout] [-t type] [host | addrlist namelist] …

命令描述

命令ssh-keyscan是一个实用程序,用于从许多主机的收集公共SSH主机密钥。它旨在帮助构建和验证ssh_known_hosts文件。 ssh-keyscan提供了一个适合于Shell和Perl脚本使用的最小接口。

命令ssh-keyscan使用非阻塞套接字I/O来并行地联系尽可能多的主机,因此它非常有效。可以在几十秒内收集来自1,000个主机的域中的密钥,即使其中一些主机已关闭或未运行ssh也是如此。 对于扫描,不需要对正在扫描的计算机进行登录访问,扫描过程也不需要任何加密。

命令行选项

支持的选项如下:

-4
强制ssh-keyscan使用IPv4地址。

-6
强制ssh-keyscan使用IPv6地址。

-c
从目标主机请求证书,而不是普通密钥。

-f file
从文件中读取”主机“或“addrlist namelist”对,每行一个。 如果参数file为”-“,而不是文件名,则ssh-keyscan将从标准输入读取”主机“或“addrlist namelist”对。

-H
散列输出中的所有主机名和地址。 散列名通常可以由ssh和sshd使用,但如果文件的内容被公开,它们不会显示识别信息。

-p port
要连接到远程主机的端口。

-T timeout
设置连接尝试的超时。 如果自从向主机启动连接或自上次从该主机读取任何内容后timeout秒已经过去,则连接将关闭,并且相关主机被视为不可用。 默认值为5秒。

-t type
指定从扫描的主机获取的密钥类型。 对于协议版本1,可能的值是“rsa1”;对于协议版本2,可能的值是“dsa”,“ecdsa”,“ed25519”,“rsa”。可以通过用逗号分隔它们来指定多个值。 默认设置是获取“rsa”,“ecdsa”,“ed25519”密钥。

-v
详细模式。 使ssh-keyscan打印有关其进度的调试消息。

注意事项

如果服务器早于2.9版,它会在其扫描的所有计算机的控制台上生成“Connection closed by remote host”消息。 这是因为它打开了与ssh端口的连接,读取公钥,并在获得密钥后立即断开连接。

SECURITY

如果使用ssh-keyscan构建ssh_known_hosts文件而不验证密钥,则用户在中间攻击时将容易受到攻击。 另一方面,如果安全模型允许这样的风险,ssh-keyscan可以帮助检测在创建ssh_known_hosts文件之后开始的中间人攻击或这篡改密钥文件。

相关文件

输入格式

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, ECDSA, Ed25519密钥输出格式

host-or-namelist keytype base64-encoded-key

其中keytype可能是“ecdsa-sha2-nistp256”, “ecdsa-sha2-nistp384”, “ecdsa-sha2-nistp521”, “ssh-ed25519”, “ssh-dss”, “ssh-rsa”

/etc/ssh/ssh_known_hosts

已知主机列表。

使用示例

打印hostname的RSA主机密钥:

# ssh-keyscan hostname

查找文件ssh_hosts中的所有主机,与排序文件ssh_known_hosts相比,这些主机具有新密钥或不同密钥:

# ssh-keyscan -t rsa,dsa,ecdsa,ed25519 -f ssh_hosts | sort -u – ssh_known_hosts | diff ssh_known_hosts –

如上示例。

相关手册

ssh(1), sshd(8)

参考文献

  • man 1 ssh-keyscan, Version 17.4p1-10

更新日志

  • 10/30/2018 创建文章