【问题标题】:SSH Key Permission DeniedSSH 密钥权限被拒绝
【发布时间】:2016-10-15 13:49:15
【问题描述】:

我正在尝试使用Digital Ocean 设置云托管。

对于实际问题,请跳至带星号 (***) 的粗体部分。这里下面的所有内容,上面的部分都是背景信息。

我需要生成一个 RSA 密钥对,所以我导航到我的 cd ~/.ssh/ 目录,然后:

ssh-keygen -t rsa

我已经有 id_rsaid_rsa.pub 文件,所以当提示时:

输入保存密钥的文件(/demo/.ssh/id_rsa):

我输入以下内容来创建一个新对:

~/.ssh/id_cloudhosting

然后我被要求输入密码,我只需按return 输入“无密码”:

输入密码(无密码为空):

我重复上面的确认,最终输出如下(只是一个演示图像):

现在我有了两个新文件,id_cloudhostingid_cloudhosting.pub,我需要将公共文件的内容复制到我的 Digital Ocean 托管“添加 SSH 控制台”。我是这样做的:

cat ~/.ssh/id_cloudhosting.pub

返回文件内容:

ssh-rsa 
bUnChOFcOd3scrambledABCDEFGHIJKLMNOPQRSTUVWXYZnowIknowmy
ABCnextTIMEwontyouSINGwithmeHODOR demo@a

我将密钥粘贴到我的托管控制台中,并成功保存。

下一步是权限问题的开始: ****************

我需要"spin up a new server" - 他们的文档中的第四步。所以我输入以下内容:

cat ~/.ssh/id_worker.pub | ssh root@[my.hosting.ip.address] "cat >> ~/.ssh/authorized_keys"

应该将公钥以 root 身份复制到新创建的名为 authorized_keys 的文件中

这一步永远不会被创建,因为我立即被要求输入主机密码。我从来没有创造过!我当时按了return(或回车),所以在提示时我也这样做了,但权限被拒绝!

root@[host.ip.address] 的密码:

权限被拒绝,请重试。

root@[host.ip.address] 的密码:

权限被拒绝,请重试。

root@[host.ip.address] 的密码:

权限被拒绝(公钥、密码)。

如何纠正这些权限被拒绝的问题?

编辑:下方修复

似乎,通过使用非常规(id_rsa 除外)文件,我需要通过执行以下操作来明确标识该文件:

ssh root@droplet.ip.address -i /path/to/private_key_file

...确保不要在那里使用 public_key_file。我没有从我的终端连接到服务器。正如@will-barnwell 建议的那样,这是在销毁我之前的 droplet 并使用新的密钥文件创建一个新的 droplet 之后

【问题讨论】:

  • 如文档所述,cat ... | ssh 命令仅用于将 SSH 密钥添加到预先存在的 droplet。当您创建my.hosting.ip.address 时,您当时是否添加了任何 SSH 密钥,如果有,它们是什么?
  • 我用 1 个键 ~/.oldSSH/id_oldSSH.pub 创建了液滴并添加了它。它已成功保存,但是当我尝试使用 ssh root@[my.hosting.ip.address] 访问服务器时,我遇到了相同的权限问题。所以我想它是因为我没有使用默认的.ssh/ 文件夹,而是使用了.oldSSH/。此后,我删除了该密钥,在.ssh/ 中生成了一个新密钥,并遇到了同样的问题。为了回答你的问题,我第一次这样做,我没有使用cat ... | ssh 命令
  • “我已经删除了那个键”——你的意思是你删除了~/.oldSSH/id_oldSSH,而没有先在你的Droplet的authorized_keys文件中添加一个不同的键?如果是这样,您已将自己锁定在 SSH 访问之外,需要通过 DigitalOcean 控制台解决此问题。
  • 创建后,您无法通过 Web 控制台从 Droplet 添加或删除密钥;您所做的只是在创建新的 droplet 时更改可用的密钥集。您预先存在的 Droplet 仍然需要 id_oldSSH 才能登录,并且只能通过在 droplet 上编辑 /root/.ssh/authorized_keys 来更改。
  • “Web 控制台”可能是用在这里的错误术语;我的意思是cloud.digitalocean.com。是的,只要你的液滴不包含任何你附着的东西,你就可以摧毁它并创建一个新的。

标签: unix ssh vpn digital-ocean ssh-keys


【解决方案1】:

假设您已按照链接指南完成第三步,当您从他们的 Web UI 创建新服务器时,请使用“添加 SSH 密钥”选项并选择您之前添加到帐户的密钥。

在实际启动新服务器时,选择您想要的键 就像从“创建Droplet”屏幕安装在您的服务器上一样。你 可以选择任意数量的键:

单击 SSH 密钥后,文本会显示“您的 root 密码将通过电子邮件发送给您”将消失,您不会 收到一封确认您的服务器已创建的电子邮件。

您使用的命令是向预先存在的服务器添加 ssh 密钥。从上面的引用来看,我敢打赌,提示您输入的密码就在您的电子邮件中。


为什么?

当您在 Digital Ocean(或实际上大多数云托管服务)上创建服务器时,系统会自动为您生成根密码,除非您使用授权密钥设置服务器。

使用密钥身份验证绝对是一个不错的安全选择,但请务必仔细阅读说明,不要只是复制/粘贴命令并期望一切顺利。


编辑: OP 在这个问题上的 cmets 对这个问题有了更多的了解。

新建议:炸毁您的服务器并按照建议设置 SSH 密钥,如果服务器不接受您的旧 SSH 密钥并提示您输入您没有的密码,您的服务器可能无法使用。

小心弄乱你的最后一个授权密钥,在删除旧密钥之前添加一个新密钥。

【讨论】:

  • 我完全按照这些步骤操作。我实际上在这个问题中复制了每个步骤。我没有收到电子邮件,因为我使用了如上所示的 SSH 密钥。如报价中所述,当您不使用 SSH 密钥时,您会收到一封电子邮件。我对指南所做的唯一修改是创建新的 rsa 文件 id_cloudhosting.pub,而不是默认的 id_rsa.pub
  • 您的问题遵循步骤 1-3,然后,“我需要“启动一个新服务器” - 他们文档中的第四步。所以我输入以下内容:cat ~/.ssh/id_worker.pub | ssh root@[my.hosting.ip.address] "cat >> ~/.ssh/authorized_keys"“没有任何迹象正如随后的 cmets 所揭示的那样,真正发生了什么。我根据您的原始问题给出了这个答案。
猜你喜欢
  • 2012-10-19
  • 1970-01-01
  • 2018-04-12
  • 1970-01-01
  • 2019-11-24
  • 2014-11-08
  • 2019-03-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多