我开始了解RSA和公用/专用密钥系统是如何工作的,我想知道我的专用和公用SSH密钥存储在哪里。当我转到主目录并浏览.ssh目录(cd .ssh)时,我仅看到“ known_hosts”文件,我猜其中包含我所知道的不同远程SSH服务器的公钥。
在哪里可以找到这些密钥?我什至不记得顺便创建它们,但是由于我之前已经建立了ssh连接,因此它们必须在某个地方。
我在Mac OS 10.6上使用OpenSSH_5.2p1。
谢谢!
我开始了解RSA和公用/专用密钥系统是如何工作的,我想知道我的专用和公用SSH密钥存储在哪里。当我转到主目录并浏览.ssh目录(cd .ssh)时,我仅看到“ known_hosts”文件,我猜其中包含我所知道的不同远程SSH服务器的公钥。
在哪里可以找到这些密钥?我什至不记得顺便创建它们,但是由于我之前已经建立了ssh连接,因此它们必须在某个地方。
我在Mac OS 10.6上使用OpenSSH_5.2p1。
谢谢!
Answers:
~/.ssh/id_rsa
和~/id_rsa.pub
一般。但是并不能保证ssh必须创建一个对并保存它们:ssh基本上使用SSL协议,该协议使用Diffie / Hellman密钥交换算法或某种变体来建立会话密钥。这意味着建立连接的握手将生成会话密钥,并在会话完成时将其丢弃。
仔细阅读一下算法,这很漂亮:使用相当简单的数学方法,它建立了连接两端都知道的密钥,而无需通过连接发送密钥。
publickey
仅是许多中一种可能的身份验证方法;如果您只是使用password
或登录keyboard-interactive
,则密码本身已发送。(注意:请勿混淆用户密钥,主机密钥和会话密钥。)
您的个人公共和私人ssh密钥通常存储在:
$HOME/.ssh/id_dsa (private key)
$HOME/.ssh/id_dsa.pub (public key)
或者id_rsa
,id_rsa.pub
如果您创建的是RSA密钥而不是DSA密钥(OpenSSH支持这两种形式),它们也可以。
但是,您之前已经建立ssh连接的事实并不意味着您具有ssh密钥。如果该ssh
命令找不到您的个人密钥,它将提示您输入远程系统的密码。这不如使用密钥安全。
通常,您应该使用密码创建ssh私钥。如果创建时没有密码短语,则获得您的私钥副本的人可以冒充您。 ssh-agent
使您可以使用带有密码短语的密钥,而不必每次使用时都重新输入密码短语。
如果你没有创建一个密钥,你可能不会有一个。
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
等)。