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

Dav*_*ong 230 ssh amazon-ec2 data-recovery

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

authorized_keys拥有 600 的权限。我尝试将 SSH 密钥附加到 ssh-rsa 并关闭 ssh-rsa。我还尝试将 SSH 密钥全部设为一行,但这也不起作用。

还有什么我必须做的事情,比如如何重新加载文件?

Lek*_*eyn 234

永远不应该-----BEGIN RSA PRIVATE KEY-----在服务器上保存其内容开头的文件,即您的私钥。相反,你必须把公共钥匙插入~/.ssh/authorized_keys文件。

这种公共密钥具有.pub在使用中产生的扩展ssh-keygen,其内容与开始ssh-rsa AAAAB3。(此问题的答案中描述了二进制格式)。

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

如果私钥没有密码保护,而你把它放在服务器上,我建议你生成一个新的:

ssh-keygen -t rsa
Run Code Online (Sandbox Code Playgroud)

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

如果这没有帮助,请ssh使用更详细的选项运行:

ssh -vvv user@example.com
Run Code Online (Sandbox Code Playgroud)

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

  • @DaveLong:您可以随时从私钥生成公钥。您只需使用以下命令即可完成此操作:`ssh-keygen -y -f key.pem > key.pub` (16认同)
  • @MorganBlackthorne 虽然这是真的,但我建议您生成私钥,而不是从远程来源接受私钥。您不能完全确定私钥没有泄露。 (5认同)
  • @Dave Long:您必须使用`ssh-keygen -t rsa` 生成一个新密钥,并将新创建的`id_rsa.pub` 文件放在服务器上的`~/.ssh/authorized_keys` 中。另请参阅 http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/generating-a-keypair.html (3认同)
  • @Gerrat 固定²。 (3认同)

Mar*_*tuc 207

在远程机器上安装公钥的另一种方法authorized_keys

cat ~/.ssh/id_rsa.pub | ssh USER@HOST "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
Run Code Online (Sandbox Code Playgroud)

一些优点:

  • 不需要ssh-copy-id安装。

  • 保证mkdir在尝试附加id_rsa.pubauthorized_keys.

  • 您的回答帮助我在多台远程机器上执行此操作,而无需任何其他软件包,谢谢。 (12认同)
  • @AnneTheAgile 我认为将@MariusButuc 给出的答案的 `mkdir -p ~/.ssh` 部分更改为 `umask 077 && mkdir -p ~/.ssh` 是确保它正常工作所需要做的一切。 (7认同)

Sho*_*waz 145

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

ssh-copy-id user@host
Run Code Online (Sandbox Code Playgroud)

  • 在 OSX 上,您可以使用 brew 安装:`brew install ssh-copy-id` (14认同)
  • 请注意,phildawson.tumblr.com 上的说明要求您以 root 身份安装不受信任的软件。这是非常危险的,也是被黑客入侵的好方法,除非你知道你可以信任作者。 (7认同)

jjg*_*jjg 41

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
Run Code Online (Sandbox Code Playgroud)


ow3*_*w3n 22

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

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

cat ~/.ssh/id_rsa.pub
Run Code Online (Sandbox Code Playgroud)

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

nano ~/.ssh/authorized_keys
Run Code Online (Sandbox Code Playgroud)

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

  • 我不同意。错误地输入“cat”并突出显示明显不属于文件的行需要很多人才。 (2认同)
  • 很高兴知道它只不过是复制/粘贴到身份验证密钥文件中。 (2认同)

Sar*_*tha 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
Run Code Online (Sandbox Code Playgroud)


eco*_*eco 5

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