如何添加多个键弹性魔豆实例?(How to add multiple keys for elasti

2019-07-03 12:24发布

有一个很好的问题[如何] SSH到弹性[一]魔豆实例 ,但有一点我注意到的是,通过这种方法,它是唯一可能增加一个SSH密钥。

我怎样才能多SSH密钥添加到一个实例? 有没有一种方法可以自动多个密钥添加到新的实例?

Answer 1:

不,弹性魔豆仅支持单个密钥对。 您可以SSH密钥手动添加到authorized_keys文件,但这些不会是已知的弹性魔豆的工具。



Answer 2:

要创建一个名为.ebextensions/authorized_keys.config是另一种方式来做到这一点。

files:
  /home/ec2-user/.ssh/authorized_keys:
    mode: "000400"
    owner: ec2-user
    group: ec2-user
    content: |
      ssh-rsa AAAB3N...QcGskx keyname
      ssh-rsa BBRdt5...LguTtp another-key

文件的名称authorized_keys.config是任意的。



Answer 3:

结合rhunwicks的和rch850的答案,这里是一个干净的方式来增加额外的SSH密钥,同时保留通过AWS控制台的一组:

files:
  /home/ec2-user/.ssh/extra_authorized_keys:
    mode: "000400"
    owner: ec2-user
    group: ec2-user
    content: |
      ssh-rsa AAAB3N...QcGskx keyname
      ssh-rsa BBRdt5...LguTtp another-key
commands:
  01_append_keys:
    cwd: /home/ec2-user/.ssh/
    command: sort -u extra_authorized_keys authorized_keys -o authorized_keys
  99_rm_extra_keys:
    cwd: /home/ec2-user/.ssh/
    command: rm extra_authorized_keys

需要注意的是eb ssh只有私钥文件具有相同的名称作为AWS控制台中定义的私有密钥将工作。



Answer 4:

从弗拉纳根的回答以下,你可以通过创建被添加到每个实例的按键.ebextensions/app.config与内容应用程序源目录:

commands:
  copy_ssh_key_userA: 
    command: echo "ssh-rsa AAAB3N...QcGskx userA" >> /home/ec2-user/.ssh/authorized_keys
  copy_ssh_key_userB: 
    command: echo "ssh-rsa BBRdt5...LguTtp userB" >> /home/ec2-user/.ssh/authorized_keys


Answer 5:

你能做到这一点的方法之一是创建附加您要使用EC2〜用户/的.ssh / authorized_keys中的附加密钥对的公钥用户数据的脚本,并与用户数据启动实例,例如:

#!
echo ssh-rsa AAAB3N...QcGskx keyname >> ~ec2-user/.ssh/authorized_keys
echo ssh-rsa BBRdt5...LguTtp another-key >> ~ec2-user/.ssh/authorized_keys


Answer 6:

最动态的方式将多个SSH密钥添加到弹性魔豆EC2实例

步骤1

创建IAM组。 说它像beanstalk-access 。 加入谁需要在IAM该组的SSH访问权限的用户。 另外补充他们的公共SSH密钥(县)的IAM Security credentials

第2步

部署脚本下面将从AWS CLI使用一个方便的Linux工具被称为解析JSON数据jq ( JQ官方教程 ),所以我们需要将它添加在.ebextensions:

  packages:
    yum:
      jq: []

第3步

下面的BASH部署脚本添加到.ebextensions:

  files:
    "/opt/elasticbeanstalk/hooks/appdeploy/post/980_beanstalk_ssh.sh":
      mode: "000755"
      owner: ec2-user
      group: ec2-user
      content: |
        #!/bin/bash
        rm -f /home/ec2-user/.ssh/authorized_keys
        users=$(aws iam get-group --group-name beanstalk-access | jq '.["Users"] | [.[].UserName]')
        readarray -t users_array < <(jq -r '.[]' <<<"$users")
        declare -p users_array
        for i in "${users_array[@]}"
        do
        user_keys=$(aws iam list-ssh-public-keys --user-name $i)
        keys=$(echo $user_keys | jq '.["SSHPublicKeys"] | [.[].SSHPublicKeyId]')
        readarray -t keys_array < <(jq -r '.[]' <<<"$keys")
        declare -p keys_array
        for j in "${keys_array[@]}"
        do
        ssh_public_key=$(aws iam get-ssh-public-key --encoding SSH --user-name $i --ssh-public-key-id $j | jq '.["SSHPublicKey"] .SSHPublicKeyBody' | tr -d \")
        echo $ssh_public_key >> /home/ec2-user/.ssh/authorized_keys
        done
        done
        chmod 600 /home/ec2-user/.ssh/authorized_keys
        chown ec2-user:ec2-user /home/ec2-user/.ssh/authorized_keys

不幸的是,因为这是YAML,你不能缩进代码,使其更容易阅读。 但是,让我们打破发生的事情:

  • (在代码片段正下方),因此我们将移除默认的SSH密钥文件给该列表此部署脚本的完全控制。

      rm -f /home/ec2-user/.ssh/authorized_keys 
  • (在代码片段正下方)使用AWS CLI,我们得到了在用户列表beanstalk-access组,然后我们那个管道JSON列表分为jq仅提取`$用户列表。

      users=$(aws iam get-group --group-name beanstalk-access | jq '.["Users"] | [.[].UserName]') 
  • (在代码片段正下方),在这里,我们要转换的是JSON $users列表到BASH阵列,把它$users_array

    readarray -t users_array <<(JQ -r '[]' <<< “$用户”)声明-p users_array

  • (在代码段正下方)我们首先通过用户的阵列循环。

      for i in "${users_array[@]}" do 
  • (在代码段正下方)这可能可以在一行中完成的,但它抓住关联到每个用户SSH密钥列表beanstalk-access组。 这还没有把它变成一个BASH阵列,它仍然是一个JSON列表。

      user_keys=$(aws iam list-ssh-public-keys --user-name $i) keys=$(echo $user_keys | jq '.["SSHPublicKeys"] | [.[].SSHPublicKeyId]') 
  • (在代码段正下方)现在,它把每个用户的SSH密钥的那个JSON列表至BASH阵列。

      readarray -t keys_array < <(jq -r '.[]' <<<"$keys") declare -p keys_array 
  • (在代码段正下方)现在,它的转换即JSON列表到BASH阵列。

      readarray -t keys_array < <(jq -r '.[]' <<<"$keys") declare -p keys_array 
  • (在代码段正下方)现在我们通过SSH密钥的每个用户的阵列循环。

      for j in "${keys_array[@]}" do 
  • (在代码片段正下方),我们将每个用户的每一个SSH密钥authorized_keys文件。

     ssh_public_key=$(aws iam get-ssh-public-key --encoding SSH --user-name $i --ssh-public-key-id $j | jq '.["SSHPublicKey"] .SSHPublicKeyBody' | tr -d \") echo $ssh_public_key >> /home/ec2-user/.ssh/authorized_keys 
  • (在代码段正下方)关闭了两个$users_array环和$users_keys循环。

     done done 
  • (在代码片段正下方)给予authorized_keys文件,它原本有相同的权限。

     chmod 600 /home/ec2-user/.ssh/authorized_keys chown ec2-user:ec2-user /home/ec2-user/.ssh/authorized_keys 

第4步

如果你的弹性魔豆EC2实例在公共子网,你可以ssh到它使用:

ssh ec2-user@ip-address -i /path/to/private/key

如果你的弹性魔豆EC2实例在专用子网(因为它应该是云安全最佳实践),那么你就需要有一个“堡垒服务器” EC2实例将作为网关的隧道的EC2实例的所有SSH访问。 查找ssh agent forwardingssh proxy commands来获取如何完成SSH隧道的想法。

添加新用户

你要做的就是将它们添加到您的IAM beanstalk-access组和运行部署,以及脚本将它们添加到您的弹性魔豆实例。



Answer 7:

https://stackoverflow.com/a/16776129/7459377

最简单的方法 - 像@rhunwicks但有一个“>”符号上第一副本:

问候。



Answer 8:

而不是运行echo和存储上的Git你的钥匙,你可以上传你的公钥来对IAM用户对AWS比做:

commands:
  copy_ssh_key_userA: 
    command: rm -f /home/ec2-user/.ssh/authorized_keys;aws iam list-users --query "Users[].[UserName]" --output text | while read User; do aws iam list-ssh-public-keys --user-name "$User" --query "SSHPublicKeys[?Status == 'Active'].[SSHPublicKeyId]" --output text | while read KeyId; do aws iam get-ssh-public-key --user-name "$User" --ssh-public-key-id "$KeyId" --encoding SSH --query "SSHPublicKey.SSHPublicKeyBody" --output text >> /home/ec2-user/.ssh/authorized_keys; done; done;


文章来源: How to add multiple keys for elastic beanstalk instance?