问题描述
我在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
开头。 (二进制格式在this question的答案中描述)。
~/.ssh
在服务器上的权限应为700.文件~/.ssh/authorized_keys
(在服务器上)应具有600的模式。client-side上(私有)密钥的权限应为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
之前工作。
第三种解决思路
如果您有基于登录的身份验证,请使用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
并尝试重新登录以确认其工作。如果它没有要求密码,它的工作。
第六种思路
保存公钥后,您应该将私钥保存到您的电脑上的目录和文件中。在putty的ssh的auth部分中,您应该指向保存在桌面上的私钥文件。它会工作。这个对我有用。
第七种思路
我认为我可以为此做出贡献,因为它专门针对AWS实例,并且所有答案仅将问题视为Linux问题,就像它是一个硬件一样。首先,您需要了解的是,永远不要将EC2实例视为硬件。这只会为你创造更多的工作把它们视为不稳定。这是我看到人们使用AWS的最大障碍。创建实例的AMI并将所需的密钥注入新实例。 cloud-init将为您处理它。更详细地说,您只需在从原始AMI中创建新实例时使用正确的公钥即可。如果您想要生成您自己的pub和pem文件密钥对的批准答案的评论中,AWS会提供您上传您的公钥以供在EC2中使用的选项。