我在 UNIX 上的私有/公共 SSH 密钥在哪里?

我在 UNIX 上的私有/公共 SSH 密钥在哪里?

我开始了解 RSA 和公钥/私钥系统的工作原理,我想知道我的私钥和公钥 SSH 密钥存储在哪里。当我转到我的主目录并浏览我的 .ssh 目录 (cd .ssh) 时,我只看到“known_hosts”文件,我猜其中包含我所知道的不同远程 SSH 服务器的公钥。

在哪里可以找到这些密钥?顺便说一句,我甚至不记得创建过它们,但由于我之前已经建立了 ssh 连接,所以它们一定在某个地方。

我正在使用带有 MAC OS 10.6 的 OpenSSH_5.2p1。

谢谢!

答案1

~/.ssh/id_rsa通常如此~/id_rsa.pub。但这并不意味着 ssh 必须创建一对并保存它们:ssh 基本上使用 SSL 协议,该协议使用迪菲/赫尔曼密钥交换算法或某种变体。这意味着建立连接的握手会生成一个会话密钥,并在会话完成后将其丢弃。

阅读算法,它非常巧妙:使用相当简单的数学,它建立一个连接两端都知道的密钥,而无需发送连接上的密钥。

答案2

您的个人公钥和私钥通常存储在:

$HOME/.ssh/id_dsa     (private key)
$HOME/.ssh/id_dsa.pub (public key)

或者如果您创建了 RSA 密钥而不是 DSA 密钥(OpenSSH 支持这两种形式),那么它们也可以是id_rsaid_rsa.pub

但事实上,您之前已经建立了 ssh 连接,并不意味着您拥有 ssh 密钥。如果该ssh命令找不到您的个人密钥,它将提示您输入远程系统的密码。这比使用密钥的安全性要低。

通常情况下,您应该使用密码短语创建 ssh 私钥。如果您创建私钥时没有使用密码短语,那么获得私钥副本的人就可以冒充您。 ssh-agent允许您使用带有密码短语的密钥,而无需在每次使用时重新输入密码短语。

答案3

如果你没有创建密钥对,那么你可能不知道一。

SSH2 流量使用对称加密会话密钥使用 DH、ECDH 算法或 GSSAPI 密钥交换建立。主机密钥和用户密钥均不用于加密数据 - 它们的唯一目的是验证

现在请记住,SSH 支持一些身份验证方法:除了 之外publickey,几乎所有服务器都接受简单的password和/或keyboard-interactive,其中不发生密钥生成或使用 - 密码只是发送到远程服务器进行验证。

换句话说,“由于我之前已经建立了 ssh 连接,所以它们一定在某个地方”是不正确的——不需要用户密钥对建立连接。


如果你做过创建密钥对时,它可能会以某种方式存在~/.ssh/id_*– 例如,id_rsa对于默认的 RSA 密钥对、id_ecdsa对于 ECDSA、id_dsa对于 DSA。虽然这些文件包含两个都密钥对的私有部分和公共部分,公共部分通常会被自动提取到单独的id_*.pub文件中以方便使用(id_rsa.pub等等id_rsa)。

相关内容