问题描述
由ssh-keygen
生成的SSH私钥包含公钥部分。我如何从私钥中检索这个公钥?我失去了公钥并需要将此公钥的内容放在服务器authorized_keys
文件中,并且不想创建新的密钥对。
或者措词:如何从id_rsa
文件创建id_rsa.pub
文件?
最佳解决方案
我在Serverfault上找到了答案:Create a public SSH key from the private key?
选项-y
输出公钥:
ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub
作为一个附注,公钥的注释丢失了。我有一个需要注释的网站(Launchpad?),因此您需要编辑~/.ssh/id_rsa.pub
并在注释和关键数据之间留出空格,并在第一行添加注释。示例公共密钥显示在下面截断。
ssh-rsa AAAA..../VqDjtS5 ubuntu@ubuntu
对于添加到SSH代理的密钥(在后台运行的程序,并避免重复使用密钥文件密码短语re-entering),可以使用ssh-add -L
命令列出添加到密钥中的密钥的公钥代理(通过ssh-add -l
)。当SSH密钥存储在智能卡上(并且无法访问私钥文件)时,这非常有用。
次佳解决方案
该解决方案专门用于使用Windows通过SSH连接到他们的远程计算机,包括AWS和GCE上的云图像。
(如果这对你有用,高度赞赏,感谢您的耐心。)
(免责声明)
最近使用此解决方案在GCE上远程登录新部署的vm映像。
使用的工具:
执行步骤:
-
使用puttygen生成公钥/私钥对。
-
将公钥上传到您的云服务器或远程位置。
说明(如何操作):
-
生成密钥/对或使用现有私钥:如果您有私钥:打开puttygen,请按load按钮并选择您的私钥(* .pem)文件。如果您没有私钥:
-
打开puttygen,
-
在Parameters部分中选择所需的密钥类型SSH2 DSA(您可以使用RSA或DSA)…并且将密码短语字段保留为空是非常重要的,
-
按下生成并按照说明生成(公/私)密钥对。
-
-
创建一个新的’authorized_keys’文件(带记事本):将公钥数据从PuTTY密钥生成器的“公用密钥粘贴到OpenSSH authorized_keys文件”部分中,并将密钥数据粘贴到”authorized_keys”文件中。确保此文件中只有一行文本。
-
将密钥上传到Linux服务器:
-
打开WinSCP,
-
选择SFTP文件协议并使用您的ssh证书登录。
-
成功时,您会在远程计算机上看到主目录结构。
将authorized_keys文件上传到远程机器的主目录。
-
-
设置适当的权限:
制作.ssh目录(如果不存在)
将authorized_keys文件复制到.ssh目录。 (这将取代任何现有的authorized_keys文件,请注意这一点)。
如果文件存在,只需将此文件的内容添加到现有文件。
运行命令来设置权限:
sudo chmod 700 .ssh && chmod 600 .ssh/authorized_keys
现在,您将可以在不输入证书的情况下ssh进入远程机器。