如何从SSH私钥中检索公钥?


444

由生成的SSH私钥ssh-keygen包含公钥部分。如何从私钥中检索此公钥?我丢失了公共密钥,需要将该公共密钥的内容放入服务器authorized_keys文件中,并且不想创建新的密钥对。

换句话说:如何id_rsa.pubid_rsa文件创建文件?


pbcopy > ~/.ssh/id_rsa.pub哎呀
尼克T

@NickT-pbcopy是MacOSX命令。另外,如果您已重新启动,注销或将其他任何内容复制到剪贴板,则没有用。
jsnfwlr

Answers:


681

我已找到服务器故障的答案:从私钥创建公共SSH密钥?

该选项-y输出公钥:

ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub

附带说明,公钥的注释将丢失。我有一个需要注释的网站(Launchpad?),因此您需要编辑~/.ssh/id_rsa.pub注释并将注释添加到第一行,并在注释和关键数据之间留一个空格。示例性的公共密钥如下所示。

ssh-rsa AAAA..../VqDjtS5 ubuntu@ubuntu

对于添加到SSH代理中的密钥(该程序在后台运行,并且无需一遍又一遍地重新输入密钥文件密码),可以使用ssh-add -L命令列出添加到SSH代理中的密钥的公共密钥。代理商(通过ssh-add -l)。当SSH密钥存储在智能卡上(并且无法访问私钥文件)时,此功能很有用。


1
请注意,您的私钥文件~/.ssh/id_rsa必须限制为您的用户名。使用$ sudo chmod 600 ~/.ssh/id_rsa并输入您的根证书来限制它,然后您可以输出公共密钥文件。否则,您将收到不受限制的私钥文件警告。
Mark Mikofski 2015年

12
@MarkMikofski不需要sudo,您应该已经拥有私钥。否则,您将无法首先阅读它。
Lekensteyn 2015年

7
@Lekensteyn谢谢,您当然是对的!也400建议这样做,因为无需写入即可键入私钥文件。更正的命令应该是$ chmod 400 ~/.ssh/id_rsa
Mark Mikofski


1
@weberjn私钥(id_rsa文件)没有注释,但是确实id_rsa.pub丢失了公钥文件()中的注释。
Lekensteyn '18

14

该解决方案专门针对使用Windows通过SSH进入其远程计算机的用户,包括Amazon AWS和GCE上的云映像。

(免责声明)

我最近使用此解决方案在GCE上远程登录到新部署的VM映像。


使用的工具:

  1. 腻子
  2. WinSCP

执行步骤:

  1. 使用puttygen生成一个公钥/私钥对。
  2. 将公钥上传到云或远程位置中的服务器。

说明(操作方法):

  1. 生成密钥/对或使用现有的私钥:

    如果您有私钥:

    打开puttygen,按“加载”按钮,然后选择您的私钥(* .pem)文件。

    如果您没有私钥:

    • 打开腻子,
    • 在“参数”部分中选择所需的密钥类型SSH2 DSA(您可以使用RSA或DSA)...。重要的是,将密码短语字段留空,
    • 按生成并按照说明生成(公用/专用)密钥对。

    样本密钥生成图片

  2. 使用记事本创建一个新的“ authorized_keys”文件:

    从PuTTY密钥生成器的“粘贴到OpenSSH的公共密钥”部分复制公共密钥数据,然后将密钥数据粘贴到“ authorized_keys”文件中。

    确保此文件中只有一行文本。

  3. 将密钥上传到Linux服务器:

    • 打开WinSCP,
    • 选择SFTP文件协议,然后使用SSH凭据登录。
    • 成功后,您将在远程计算机上看到主目录结构。

    将authorized_keys文件上传到远程计算机上的主目录。

  4. 设置适当的权限:

    制作.ssh目录(如果不存在)

    authorized_keys文件复制到.ssh目录(这将替换任何现有authorized_keys文件;请注意这一点)。

    如果该文件存在,只需将该文件的内容添加到现有文件中即可。

    运行命令设置权限:

    sudo chmod 700 .ssh && chmod 600 .ssh/authorized_keys
    

现在,您无需每次输入凭据就可以进入远程计算机。

进一步阅读:

  1. 在Windows下生成和上传SSH密钥

  2. 使用OpenSSH密钥,证书.pem和.pub进行无密码身份验证


如果你的主目录encryted,这样做:askubuntu.com/questions/439184/...
devprashant

2
尽管您的答案与该问题并非真正相关,但由于您的热情,我投了赞成票。
Truong Nguyen
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.