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

authorized_keys的权限为600。我尝试将SSH密钥附加到ssh-rsa并关闭ssh-rsa。我也尝试过将SSH密钥全部换成一行,但是那也行不通。

还有其他我需要做的事情,例如如何重新加载文件吗?

评论

多年后,这种“似乎”仍然有意义且活跃;我只想作一个观察,谈论一下躲过了一个子弹:“幸运的是我已经打开了SSH,所以我仍然可以连接[..]”-嘘! ; dP

该帖子是在我生日那天编辑的,两个月前在我生日那天救了我。

#1 楼

您切勿将文件的内容以-----BEGIN RSA PRIVATE KEY-----开头的内容保存在服务器上,即私钥。而是必须将公用密钥放入~/.ssh/authorized_keys文件中。

使用.pub生成时,此公用密钥具有ssh-keygen扩展名,其内容以ssh-rsa AAAAB3开头。 (在此问题的答案中描述了二进制格式。)服务器上的~/.ssh的权限应为700。服务器上的~/.ssh/authorized_keys文件的模式应为600。客户端上的(私钥)密钥的权限应为600。

如果私钥未使用密码保护,并且已将其放在服务器上,建议您生成一个新版本:

ssh-keygen -t rsa


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

如果这样做没有帮助,请运行带有更多详细信息的选项的ssh

ssh -vvv user@example.com


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

评论


使用Amazon EC2服务器,我得到的只是私钥(key.pem)。我在任何地方都没有公共密钥。

–戴夫龙
2011年6月1日17:04

@Dave Long:您必须使用ssh-keygen -t rsa生成一个新密钥,并将新创建的id_rsa.pub文件放在服务器上的〜/ .ssh / authorized_keys中。另请参阅docs.amazonwebservices.com/AWSEC2/latest/UserGuide/…

– Lekensteyn
2011年6月1日17:33

@DaveLong:您可以随时从私钥生成公钥。您可以使用以下命令简单地执行此操作:ssh-keygen -y -f key.pem> key.pub

–摩根·布莱克索恩(Morgan Blackthorne)
13年5月17日在0:40



@MorganBlackthorne确实如此,我建议您生成私钥,而不是从远程源接受私钥。您不能完全确定私钥没有泄漏。

– Lekensteyn
13年5月17日在8:49



@Gerrat固定²。

– Lekensteyn
2014年5月31日19:59

#2 楼

在远程计算机的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上。


评论


您的回答帮助我在多台远程计算机上执行了此操作,而没有任何其他软件包,谢谢。

– nol
2014年3月7日上午10:06

这不能保证将使用正确的权限创建“〜/ .ssh”目录和“〜/ .ssh / authorized_keys”文件。

–尼克
2014年6月4日下午5:55

@尼克,我有这个问题。因此,那么也许真的必须首先检查它们的存在,如果缺少,请使用chmod(700 /文件夹,600 /文件)正确创建,然后再添加?那么,也许它不可能是一个班轮吗?

–AnneTheAgile
2014年8月7日在3:52



@AnneTheAgile我认为将@MariusButuc给出的答案的mkdir -p〜/ .ssh部分更改为umask 077 && mkdir -p〜/ .ssh是您要做的所有事情,以确保它可以正常工作。

–尼克
2014年8月7日14:02

ty @尼克!我会去的。

–AnneTheAgile
2014年8月7日在21:02

#3 楼

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

ssh-copy-id user@host


评论


在Mac上,这似乎不是有效的命令,这是我的客户端计算机所使用的命令。

–戴夫龙
2011年6月1日17:05



可能会有帮助phildawson.tumblr.com/post/484798267/ssh-copy-id-in-mac-os-x

–Shoaib Nawaz
2011年6月1日17:23

在OSX上,可以使用brew安装:brew install ssh-copy-id

– phil
13年11月21日,0:26



在Macports上,可以使用sudo port install openssh + ssh_copy_id安装此命令。 + ssh_copy_id使用ssh_copy_id变体安装openssh。

– Stefan Lasiewski
2014-09-18 22:23

请注意,phildawson.tumblr.com上的说明要求您以root用户身份安装不受信任的软件。除非您知道可以信任作者,否则这是非常危险的,也是被黑客入侵的好方法。

– Stefan Lasiewski
2014-09-18 22:24

#4 楼

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


#5 楼

最简单的方法是复制并粘贴...

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

cat ~/.ssh/id_rsa.pub


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

nano ~/.ssh/authorized_keys


并保存Ctl+O,退出文件Ctl+X,退出SSH会话exit并尝试重新登录以确认其正常工作。如果不要求输入密码,它就可以工作。

评论


这远非最简单的方法,它会导致错误发生,从而损坏文件。将密钥分配到authorized_keys文件中更为安全。

– RichieHH
20-11-30在3:14

我不同意。错误输入“ cat”并突出显示显然不属于文件一部分的行将需要大量的才能。

–ow3n
20-11-30在13:20

#6 楼

在要放置密钥的远程计算机上获取一个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


#7 楼

我认为我可以为此做出贡献,因为它专门针对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-aws

#8 楼

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

评论


如果Windows控制台可以将所有ssh功能添加到其解释器中,我就喜欢它

–丹尼斯
2014年11月9日在1:46

#9 楼

这是一个变体,您可能会在文本文件中找到一个公钥文件名列表,并且大批公钥文件也位于同一目录中。

如果您要提供大量要导入的公钥文件列表:-)

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