sshd:logging客户端的公钥

我需要运行SSH服务器并logging任何尝试连接的客户端的IP和公钥(实际上不授予访问权限)。

用例是这样的:我将这个web应用程序部署到远程主机,在构build过程中,从github / bitbucket(git使用ssh使用键)获取一些依赖项。 现在,如果我想要这个托pipe服务器访问一些私人回购,我需要白名单它的公钥,但是主机不提供直接从文件系统读取密钥的访问。 但是我可以把它指向任何SSH主机,它将build立一个连接,大概是分发它的公钥。 我想logging这个。

任何build议感激。

如果您需要白名单的公共密钥,您不能从失败的尝试中select它。 根本不是关于sshd或其configuration,而是协议本身,因为公钥authentication就是这样的:

  1. 客户端发送密钥对的ID。
  2. 服务器将该ID与authorized_keys文件进行比较。
  3. 服务器生成一个随机数并使用匹配的公钥来encryption它。
  4. 服务器将其发送到客户端。
  5. 客户端将其解密,并将其与共享会话密钥相结合,然后发送回MD5。
  6. 服务器自行计算相同的校验和并将它们进行比较。

在失败的尝试中,在步骤2停止,防止进一步发生。 不过,整个公钥永远不会发送到服务器,只是ID。

一个人不会简单地logging他甚至不知道的东西。

sshd实际上并不logginglogin尝试中使用的公钥,成功或其他。 最接近的是在LogLevel VERBOSE上logging公钥的指纹。

  1. 通过失败的login尝试之外的其他方法推公钥。 例如,上传到一个cgi / php脚本,该脚本根据服务器所看到的客户端连接的IP地址logging(或者速率控制附加或覆盖)文件的密钥。
  2. 让安装程序发出一个GET请求到您的networking服务器上的特定URL,并抓住它的方式。 (我觉得这是1的劣等版本)
  3. 让应用程序在公共场所发布公钥,然后获取它。 这是一个networking应用程序,公共密钥的美丽的一部分是,他们不是共享的秘密。

此外,因为这是ServerFault,我不得不提到你的部署过程是不正确的。 您应该分发(签名)软件包pipe理器使用的.rpm.deb等。在这些软件包中,如果需要,可以包含configuration脚本。