开发者社区> 问答> 正文

资源编排ROS如何在在ECS之间传递SSH Key?

资源编排ROS如何在在ECS之间传递SSH Key?

展开
收起
你鞋带开了~ 2024-02-20 23:27:18 42 0
4 条回答
写回答
取消 提交回答
  • 搞笑前端工程师

    在阿里云的资源编排服务(Resource Orchestration Service, ROS)中,创建ECS实例时可以指定网络带宽。但是,目前ROS模板不支持直接创建0M带宽的ECS实例,因为ECS实例至少需要1M的公网带宽或选择无公网带宽(即仅内网访问)。

    如果你想要创建一个无公网带宽的ECS实例,你可以在ROS模板中将InternetMaxBandwidthOut参数设置为0,但实际效果是系统会默认分配1M的公网带宽。若要实现无公网带宽,应当设置PublicIpAllocation属性为none,这样创建出来的ECS实例就不会分配公网IP地址,从而实现无公网带宽。

    以下是一个简化的ROS模板片段:

    Resources:
      MyInstance:
        Type: 'ALIYUN::ECS::Instance'
        Properties:
          ImageId: 'ubuntu_18_04_x64_20G_alibase_20190722.vhd'
          InstanceType: 'ecs.s6-c1m1.large'
          SecurityGroupIds:
            - 'sg-xxxxx' # 你的安全组ID
          VSwitchId: 'vsw-xxxxx' # 你的交换机ID
          InternetMaxBandwidthOut: 0
          PublicIpAddress: 
            - AllocationId: ''
    

    然而,请注意上述模板并不会阻止实例获取公网带宽,要实现无公网带宽,应该按照如下方式设置:

    Resources:
      MyInstance:
        Type: 'ALIYUN::ECS::Instance'
        Properties:
          ImageId: 'ubuntu_18_04_x64_20G_alibase_20190722.vhd'
          InstanceType: 'ecs.s6-c1m1.large'
          SecurityGroupIds:
            - 'sg-xxxxx' # 你的安全组ID
          VSwitchId: 'vsw-xxxxx' # 你的交换机ID
          InternetChargeType: "PayByTraffic"
          InternetMaxBandwidthOut: 0
          NetworkInterfaces:
            - PrimaryIpAddress: ""
              VSwitchId: 'vsw-xxxxx'
              Description: 'No public IP'
              SecurityGroupIds:
                - 'sg-xxxxx'
    

    实际上,对于"NetworkInterfaces"部分,如果希望实例无公网带宽,通常不指定"PrimaryIpAddress"或者通过其他方式确保不会分配公网IP。

    由于ROS的具体实现可能会更新和优化,建议您查阅最新的ROS官方文档以获得准确信息。

    2024-03-03 13:14:11
    赞同 1 展开评论 打赏
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    在资源编排(ROS)中,要在ECS之间传递SSH Key,通常可以通过UserData脚本和特定的资源类型来实现。以下是详细的步骤:

    1. 创建ECS实例:首先创建第一个ECS实例,并在UserData中指定生成SSH公钥的脚本。UserData是ROS模板中的一个字段,可以包含云初始化或自定义引导脚本。
    2. 生成SSH公钥:在第一个ECS实例创建过程中,UserData脚本负责生成SSH公钥,并将其保存为可以被后续步骤使用的格式。
    3. 传递公钥:使用ROS的内置函数Fn::GetAtt来获取第一个ECS实例的公钥信息。然后,将这个公钥作为UserData的一部分传递给第二个ECS实例。
    4. 绑定SSH密钥对:在第二个ECS实例中,使用ALIYUN::ECS::SSHKeyPairAttachment资源类型来绑定SSH密钥对到ECS实例。这一步确保了SSH公钥被正确地附加到第二个ECS实例上,从而实现免密码登录。
    5. 解析JSON格式:在处理UserData时,可能需要使用如jq这样的工具来解析JSON格式的ECS公钥,以便将其写入到第二个ECS实例的authorized_keys文件中。
    6. 使用eval命令:如果在UserData脚本中使用了特殊字符,需要注意转义这些字符。在某些情况下,可能需要使用eval命令来确保变量被正确解析。
    7. 执行脚本:通过curl命令或其他方法,将UserData脚本执行的结果返回给WaitCondition资源,以确保所有步骤按预期执行。
    8. 验证登录:创建完成后,验证第一个ECS实例是否能够无密码登录到第二个ECS实例,以确保SSH密钥传递成功。
    9. 监控和维护:建立监控机制以跟踪ECS实例的使用情况和性能,定期维护以确保基础架构的稳定性和安全性。

    总的来说,以上就是使用资源编排服务在ECS之间传递SSH Key的基本步骤。在实际操作中,您可能需要根据具体的业务需求和云服务提供商的文档进行相应的调整。

    2024-02-22 13:34:24
    赞同 展开评论 打赏
  • 在阿里云资源编排服务(ROS)中,可以通过UserData字段来实现ECS实例间SSH Key的传递。在创建ECS实例时,可以为实例设置启动脚本(User Data),这个脚本会在实例初始化时执行。

    以下是一个简化的示例流程:

    1. 生成公钥与私钥
      在创建第一个ECS实例之前,你需要先生成SSH密钥对,并将公钥上传到目标ECS实例上。

    2. 配置第一个ECS实例的UserData
      在ROS模板中为第一个ECS实例定义UserData字段,该字段包含一个shell脚本,在实例启动时运行,用于获取或生成SSH公钥并将其写入authorized_keys文件中。

    "Resources": {
      "FirstECSInstance": {
        "Type": "ALIYUN::ECS::Instance",
        ...
        "Properties": {
          "UserData": {
            "Fn::Base64": {
              "Fn::Join": [
                "\n",
                [
                  "#!/bin/bash",
                  "echo 'YourPublicKey' >> ~/.ssh/authorized_keys",
                  "chmod 600 ~/.ssh/authorized_keys",
                  # 或者从其他地方获取公钥,例如通过环境变量、参数或其他资源属性
                ]
              ]
            }
          },
          ...
        }
      },
      ...
    }
    
    1. 跨实例传递密钥
      如果要在多个ECS实例之间共享同一对密钥以实现免密登录,你可能需要利用ROS的功能来存储和检索公钥,并在第二个实例的UserData中引用它。这通常涉及到ROS内部函数如Fn::GetAttFn::Sub,以及CloudFormation的条件逻辑或者资源依赖关系来确保正确的执行顺序。

    例如,如果公钥是从另一个资源获取的,可以使用如下方式:

    "SecondECSInstance": {
      "Type": "ALIYUN::ECS::Instance",
      ...
      "Properties": {
        "UserData": {
          "Fn::Base64": {
            "Fn::Join": [
              "\n",
              [
                "#!/bin/bash",
                "pub_key='{{resolve:secretsmanager:GetSecretValue:your_secret_name:SecretString:public_key}}'",
                "echo $pub_key >> ~/.ssh/authorized_keys", 
                "chmod 600 ~/.ssh/authorized_keys"
              ]
            ]
          }
        },
        ...
      }
    },
    

    上述例子中,假设公钥已存放在阿里云 Secrets Manager 中,然后在启动第二个实例时通过ROS函数从Secrets Manager获取并添加到authorized_keys文件。

    2024-02-21 10:19:37
    赞同 展开评论 打赏
  • 请参阅此文档https://developer.aliyun.com/article/60901
    --此回答整理自钉群“资源编排ROS客户支持群”

    2024-02-20 23:34:55
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
如何运维千台以上游戏云服务器 立即下载
网站/服务器取证 实践与挑战 立即下载
ECS块储存产品全面解析 立即下载

相关镜像