如何将SSH密钥添加到authorized_keys文件?

我在Amazon EC2上有一个Ubuntu服务器,用于开发,今天我愚蠢地清除了~/.ssh/authorized_keys文件中的所有内容。 幸运的是我有一个SSH打开,所以我仍然连接,并可以修复该文件,但当我尝试将我的密钥文件恢复,它不起作用。 我仍然从本地计算机上的服务器获得权限被拒绝。

authorized_keys具有权限600.我尝试使用ssh-rsa附加SSH密钥并关闭ssh-rsa。 我也尝试将SSH密钥全部放到一行,但这也不起作用。

还有什么我需要做的就像重新加载文件一样吗?

永远不要保存文件,其内容以服务器上的-----BEGIN RSA PRIVATE KEY-----开头,即您的私钥 。 相反,您必须将公钥放入~/.ssh/authorized_keys文件中。

使用ssh-keygen生成时,此公钥具有.pub扩展名,其内容以ssh-rsa AAAAB3 。 (二进制格式在此问题的答案中描述)。

~/.ssh在服务器上的权限应为700.文件~/.ssh/authorized_keys (在服务器上)应该具有600的模式。客户端的(私有)密钥的权限应该是是600。

如果私钥没有受密码保护,并且您将其放在服务器上,我建议您生成一个新密码:

 ssh-keygen -t rsa 

如果您完全确定没有人可以从服务器恢复已删除的私钥,则可以跳过此步骤。

如果这没有帮助,请运行带有选项的ssh以获得更多详细信息:

 ssh -vvv user@example.com 

在服务器端,您可以查看/var/log/auth.log以获取详细信息。

在远程计算机的authorized_keys安装公钥的另一种方法:

 cat ~/.ssh/id_rsa.pub | ssh USER@HOST "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys" 

一些优点:

  • 不需要安装ssh-copy-id

  • 保证mkdir在尝试将id_rsa.pub附加到authorized_keys之前工作。

如果您具有基于登录的身份validation,则使用ssh-copy-id将您的公钥附加到远程服务器。

 ssh-copy-id user@host 
 local> scp .ssh/id_dsa.pub remote.com: local> ssh remote.com remote> cat id_dsa.pub >> .ssh/authorized_keys remote> rm id_dsa.pub remote> exit 

最简单的方法是复制和粘贴……

首先查看/复制本地公钥id_rsa.pub的内容,包括开头的“ssh-rsa”,直到它以您的电子邮件地址结束:

 cat ~/.ssh/id_rsa.pub 

然后在服务器上编辑authorized_keys并将剪贴板的内容粘贴到该文件中的任何其他键下:

 nano ~/.ssh/authorized_keys 

并保存Ctl+O ,退出文件Ctl+X ,退出SSH会话exit并尝试重新登录以确认它是否有效。 如果它没有要求输入密码就行了。

保存公钥后,您应该将私钥保存到PC上的目录和文件中。 在ssh on putty的auth部分中,您应该指向您保存在桌面上的私钥文件。 它会工作。 这个对我有用。

我认为我可以为此做出贡献,因为它专门针对AWS实例,并且所有答案仅将问题视为Linux问题,就好像它是一块硬件一样。 您需要了解的第一件事是,您永远不应该将EC2实例视为硬件。 这只会为你创造更多的工作将它们视为不稳定的。 这是我看到人们使用AWS的最大障碍。 制作实例的AMI并将所需的密钥注入新实例。 cloud-init会为你处理它。 更详细地说,您需要做的是在从原始AMI创建新实例时使用正确的公钥。 如果您在批准的答案的评论中想要生成自己的密钥对pub和pem文件,AWS会为您提供上传公钥以供在EC2中使用的选项。

http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html#how-to-generate-your-own-key-and-import-it-to-aws

在要放置密钥的远程计算机上获取一个shell,然后您可以运行此单行创建必要的文件和目录,设置其权限并将密钥附加到该文件。 当然,您必须更改下面的KEYGOESHERE部分和后面的注释。

 mkdir -p ~/.ssh && chmod 700 ~/.ssh && touch ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys && echo "ssh-rsa KEYGOESHERE user@remotehost or note" >> ~/.ssh/authorized_keys 

这是一个变体,您可能在文本文件中有一个公钥文件名列表,而大批公钥文件也在同一目录中。

如果要提供要导入的大量公钥文件,这种变化会很有帮助:-)

 $ for i in $(cat ListOfPubKeyFiles.txt) ; do cat $i | ssh User@Hostname "cat >> ~/.ssh/authorized_keys"; done