我在UNIX上的专用/公用SSH密钥在哪里?


17

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

在哪里可以找到这些密钥?我什至不记得顺便创建它们,但是由于我之前已经建立了ssh连接,因此它们必须在某个地方。

我在Mac OS 10.6上使用OpenSSH_5.2p1。

谢谢!

Answers:


15

~/.ssh/id_rsa~/id_rsa.pub一般。但是并不能保证ssh必须创建一个对并保存它们:ssh基本上使用SSL协议,该协议使用Diffie / Hellman密钥交换算法或某种变体来建立会话密钥。这意味着建立连接的握手将生成会话密钥,并在会话完成时将其丢弃。

仔细阅读一下算法,这很漂亮:使用相当简单的数学方法,它建立了连接两端都知道的密钥,而无需通过连接发送密钥。


这是否意味着如果从未有人要求我生成从未使用过RSA的SSH密钥?换句话说,使用某种非对称算法来共享会话密钥,但是用于连接的临时公共/专用密钥没有存储在我的计算机上吗?

没错 实际上,加密是对称的-非对称算法不太适合流式传输。Diffie-Hellman用于生成用于对称加密的会话密钥。如果改用公共/专用密钥对,则在其他一些握手中使用它们来为对称算法创建会话密钥。
查理·马丁

@mieli:不。它们从来没有被创建过。publickey仅是许多中一种可能的身份验证方法;如果您只是使用password或登录keyboard-interactive,则密码本身已发送。(注意:请勿混淆用户密钥,主机密钥和会话密钥。)
user1686 2011年

@grawity我们在这里基本都同意,但请谨慎一点。Diffie-Hellman密钥交换与RSA和其他不对称加密算法有关,并且本质上是不对称的,因为交换的双方都有自己的最终协议的“一半”。它们确实具有密钥的两个部分,并且在会话结束时将丢弃最终密钥以及构建密钥的确切过程。但是,它们不是RSA对的公共部分和私有部分。
查理·马丁

4

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

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

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

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

通常,您应该使用密码创建ssh私钥。如果创建时没有密码短语,则获得您的私钥副本的人可以冒充您。 ssh-agent使您可以使用带有密码短语的密钥,而不必每次使用时都重新输入密码短语。


2

如果你没有创建一个密钥,你可能不会一个。

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.pubid_rsa等)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.