【发布时间】:2016-10-15 13:49:15
【问题描述】:
我正在尝试使用Digital Ocean 设置云托管。
对于实际问题,请跳至带星号 (***) 的粗体部分。这里下面的所有内容,上面的部分都是背景信息。
我需要生成一个 RSA 密钥对,所以我导航到我的 cd ~/.ssh/ 目录,然后:
ssh-keygen -t rsa
我已经有 id_rsa 和 id_rsa.pub 文件,所以当提示时:
输入保存密钥的文件(/demo/.ssh/id_rsa):
我输入以下内容来创建一个新对:
~/.ssh/id_cloudhosting
然后我被要求输入密码,我只需按return 输入“无密码”:
输入密码(无密码为空):
我重复上面的确认,最终输出如下(只是一个演示图像):
现在我有了两个新文件,id_cloudhosting 和 id_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