我开始了解 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_rsa
。id_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
)。