如何在SSH密钥被泄露或丢失时保护AWS EC2实例

时间:2016-01-07 14:23:00

标签: amazon-web-services amazon-ec2

我本质上是一个AWS noob。

我让开发人员设置了一个带负载均衡器的EC2实例来托管基于node.js的API。他现在已经离开了公司,但如果他愿意,他仍然有私钥登录。我想换钥匙。

根据我的阅读,我需要重新启动实例以获得新的密钥对。但是,如果我这样做,我会丢失所有节点包,以及当前实例上安装的其他SW吗?负载均衡器会发生什么?我是否需要更新DNS信息以指向新IP?

(一旦定位,这次我将创建多个密钥对供开发人员使用。)

谢谢, 史蒂夫

编辑:是的,我确实拥有私钥,可以做我需要做的一切。我只是想确保他不再有权访问。

3 个答案:

答案 0 :(得分:5)

  1. 获取当前实例的AMI以进行备份。这将重新启动实例,但它将保留现有IP。您无需将其从ELB中删除。如果您在更改密钥后无法重新连接,则可能需要此AMI。
  2. 以root用户身份登录,使用现有密钥。
  3. 从shell中运行以下命令:
  4. $ ssh-keygen -t rsa -b 2048 -f user - 这会生成一个新密钥对
  5. $ sudo su - - 如果需要
  6. $ cp /home/ubuntu/.ssh/authorized_keys /home/ubuntu/.ssh/authorized_keys.bak - 备份现有公钥
  7. $ mv user.pub /home/ubuntu/.ssh/authorized_keys - 这将替换authorized_keys文件中的现有公钥
  8. $ chmod 600 /home/ubuntu/.ssh/authorized_keys - 更改文件的权限
  9. 将从$ ssh-keygen命令生成的私钥(名为user的文件)复制到本地计算机,并将其从实例中删除。
  10. 使用新私钥连接到实例以进行确认。重要信息:保持现有ssh会话打开,并使用新密钥创建新会话。
  11. 如果您在步骤10中遇到任何问题,您仍然可以访问现有会话进行故障排除。

    至于清理,请确保并从AWS控制台中删除旧密钥对,并使任何凭据IF(!)无效,以便运行现有服务不需要它们。如果您授予开发人员对AWS控制台的root访问权限,则应重置这些凭据。

    注意:这些步骤假定安装了Ubuntu。如果您使用的是任何其他Linux类型,请使用正确的AWS用户名替换\ubuntu

    Amazon Linux: ec2-user  
    Ubuntu  ubuntu
    Debian  admin
    RHEL 6.4 ec2-user   
    RHEL 6.3 root
    

答案 1 :(得分:0)

您可以创建新的密钥对,而无需创建新的EC2实例http://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2-key-pairs.html#having-ec2-create-your-key-pair

看起来您仍然需要启动新的EC2实例(创建新密钥),但如果您使用相同的卷或快照来创建重复的卷,则不必重新加载任何卷软件。 https://forums.aws.amazon.com/message.jspa?messageID=245314

对于DNS,我会将其指向负载均衡器,这样您就可以在没有DNS更改的情况下从池中添加/删除服务器。否则,将弹性IP分配给服务器,这样您就可以将弹性IP移动到下一个服务器,而无需每次都更改DNS。移动弹性是即时的,DNS需要时间来复制到粗糙的网络。希望有所帮助。

答案 2 :(得分:0)

所以,我自己已经解决了这个问题,并且我发布了我所做的事情,以防它帮助其他任何人。

  1. 在我的本地计算机上,我创建了一个新的2048位RSA密钥对(也可以在AWS上生成一对新的)
  2. 在亚马逊控制台中导入新公钥。
  3. 创建正在运行的实例的AMI。
  4. 启动该AMI的新(ubuntu linux)实例,并将其指向 新上传的登录公钥。
  5. 实例启动后,请更新Load Balancer或DNS条目 酌情指向新实例。
  6. 启动服务器要运行的任何软件。