如何使用SSH键与DigitalOcean Droplet

本指南适用于Mac OS X和Linux用户。了解如何使用SSH Key与DigitalOcean Droplet。

背景

本指南适用于Mac OS X和Linux用户。 如果您是家庭计算机上使用Windows,请按照本指南来代替。

通常,当你旋转你的DigitalOceanDroplet,你会得到一个电子邮件,一旦过程完成,让你知道Droplet的IP地址和密码。 虽然这个电子邮件是非常方便的,有获得访问您的服务器,而不需要电子邮件的更安全,速度更快的方式。 这可以通过设置SSH密钥来完成。

SSH密钥是在您的计算机和服务器之间建立的密钥对,如果它看到您登录的计算机上的匹配密钥,允许服务器连接。虽然密码最终可能被强力攻击破解,SSH密钥几乎不可能通过暴力破解。您可以通过将计算机的SSH密钥添加到控制面板来创建新的DigitalOceanDroplet,并已经设置了SSH密钥。

第一步 - 创建RSA密钥对

第一步是在客户端计算机上创建密钥对(很有可能这只是您的计算机):

ssh-keygen -t rsa

第二步 - 存储密钥和密码

一旦你输入了Gen Key命令,你会得到几个问题:

Enter file in which to save the key (/demo/.ssh/id_rsa):

你可以在这里输入,将文件保存到用户主页(在这种情况下,我的示例用户称为demo)。

Enter passphrase (empty for no passphrase):

这取决于你是否要使用密码。整个密钥生成过程如下所示:

ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/demo/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /demo/.ssh/id_rsa.
Your public key has been saved in /demo/.ssh/id_rsa.pub.
The key fingerprint is:
4a:dd:0a:c6:35:4e:3f:ed:27:38:8c:74:44:4d:93:67 demo@a
The key's randomart image is:
+--[ RSA 2048]----+
|          .oo.   |
|         .  o.E  |
|        + .  o   |
|     . = = .     |
|      = S = .    |
|     o + = +     |
|      . o + o .  |
|           . o   |
|                 |
+-----------------+

公钥现在位于/demo/.ssh/id_rsa.pub私钥(标识)现在位于/demo/.ssh/id_rsa中

第三步 - 复制SSH密钥

注意:如果你想使用DigitalOcean API新的SSH密钥添加到您的帐户,请参阅API文档 否则,继续阅读。

一旦您设置了SSH密钥,就可以将其复制到控制面板中。 打开SSH页面 ,然后点击创建新的SSH密钥按钮。

将出现一个弹出窗口。

SSH密钥弹出窗口

对于标记为“名称”的部分,写入您创建密钥对的计算机的名称(例如“家庭计算机”)

对于标记为“公共SSH密钥”的部分,复制并粘贴您在第2步中创建的公共密钥。

您通常可以通过复制以下结果获得此密钥:

 cat ~/.ssh/id_rsa.pub

单击保存。

第四步旋转新服务器

上述步骤已解释如何设置具有预先安装的SSH密钥的服务器。 但是,您不能使用控制面板为已创建的Droplet添加键。

为了添加额外的密钥到预先存在的Droplet,您可以使用SSH粘贴密钥:

cat ~/.ssh/id_rsa.pub | ssh root@[your.ip.address.here] "cat >> ~/.ssh/authorized_keys"

实际启动新服务器时,从“创建Droplet”屏幕中选择要在服务器上安装的密钥。 您可以选择尽可能多的键:

ssh键快捷方式

点击SSH密钥后,将显示“您的root密码将通过电子邮件发送给您”的文字,并且您不会收到确认您的服务器已创建的电子邮件。

第五步 - 连接到服务器

使用预安装的SSH密钥创建服务器后,可以按照以前的方式连接到该服务器:

ssh root@[your.ip.address.here]

但是,现在当从共享密钥对的计算机连接时,将无需输入密码以登录root用户。

主机密钥警告

如果你碰巧在创建一个连接到之前直接破坏一个Droplet,你可能会看到这样的消息:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
...

如果是这样,您的新Droplet可能具有与旧的,被破坏的Droplet相同的IP地址,但是不同的主机SSH密钥。 这很好,您可以通过运行以下命令从系统中删除旧Droplet的主机密钥来删除警告:

ssh-keygen -R [your.ip.address.here]

现在尝试再次连接到您的服务器。

第六步锁定根SSH只访问密钥

在确认您现在可以以root身份登录到服务器而不提示输入密码之后,您可以禁用root的密码登录。 这使您的服务器更安全,因为没有人可以暴力强行您的SSH密码。

因此,有必要修改服务器的配置SSHD /etc/ssh/sshd_config ,并更新以下行到现在阅读:

PermitRootLogin without-password

现在有必要重新启动或重新启动sshd进程以重新读取新配置。 这可以通过以下方式完成:

# ps auxw | grep ssh
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root       681  0.0  0.1  49948  2332 ?        Ss    2012   3:23 /usr/sbin/sshd -D
# kill -HUP 681

现在您的服务器的根登录受到保护,您可以通过尝试直接SSH作为根从您的系统没有其共享的密钥的SSH,并且您将被自动踢出,而不提示您输入root密码。

作者Etel Sverdlov