Updated on 2024-08-06 GMT+08:00

Binding SSH Key Pairs in Batches

Function

This interface is used to bind new SSH key pairs to specified VMs in batches.

Calling Method

For details, see Calling APIs.

URI

POST /v3/{project_id}/keypairs/batch-associate

Table 1 Path Parameters

Parameter

Mandatory

Type

Description

project_id

Yes

String

Project ID

Request Parameters

Table 2 Request header parameters

Parameter

Mandatory

Type

Description

X-Auth-Token

Yes

String

User token. Can be obtained by calling the IAM API for obtaining the user token (the value of X-Subject-Token in the response header).

Table 3 Request body parameters

Parameter

Mandatory

Type

Description

batch_keypairs

Yes

Array of AssociateKeypairRequestBody objects

You can select a maximum of 10 ECSs to bind key pairs at a time. Constraints: Only the same key pair can be selected. The ECS is in the Running state and has not been bound to any key pair.

Table 4 AssociateKeypairRequestBody

Parameter

Mandatory

Type

Description

keypair_name

Yes

String

SSH key pair name

server

Yes

EcsServerInfo object

Information about the VM that the key pair is to be bound to

Table 5 EcsServerInfo

Parameter

Mandatory

Type

Description

id

Yes

String

ID of the VM that the SSH key pair is to be bound to (in order to replace or reset the original key pair).

auth

No

Auth object

(Optional) Authentication type. This parameter is required for key pair replacement but not required for key pair reset.

disable_password

No

Boolean

  • true: SSH login is disabled on the VM. - false: SSH login is enabled on the VM.

port

No

Long

SSH listening port.

Table 6 Auth

Parameter

Mandatory

Type

Description

type

No

String

The value can be password or keypair.

key

No

String

  • If type is set to password, key indicates the password.

  • If type is set to keypair, key indicates the private key.

Response Parameters

Status code: 202

Table 7 Response body parameters

Parameter

Type

Description

tasks

Array of TaskResponseBody objects

Bind key pairs in batches.

Table 8 TaskResponseBody

Parameter

Type

Description

task_id

String

ID returned when a task is delivered

server_id

String

Specifies the ID of the bound VM.

status

String

Indicates the delivery status of a task. SUCCESS or FAILED.

error_code

String

Error code returned when a task fails to be delivered.

error_msg

String

Error information returned when a task fails to be delivered.

Status code: 400

Table 9 Response body parameters

Parameter

Type

Description

error_code

String

Error Codes

error_msg

String

Description

Example Requests

{
  "batch_keypairs" : [ {
    "keypair_name" : "1",
    "server" : {
      "id" : "fxxx16e3-74b8-4025-9852-1f451932c20c",
      "disable_password" : false,
      "auth" : {
        "type" : "password",
        "key" : "password"
      }
    }
  }, {
    "keypair_name" : "1",
    "server" : {
      "id" : "4xxxxfc4-b4bf-49c2-b983-a1811c9760c1",
      "disable_password" : false,
      "auth" : {
        "type" : "password",
        "key" : "password"
      }
    }
  } ]
}

Example Responses

Status code: 202

Request succeeded.

{
  "tasks" : [ {
    "server_id" : "xxx",
    "task_id" : "xxx",
    "status" : "SUCCESS"
  }, {
    "server_id" : "xxx",
    "status" : "Failed",
    "error_code" : "xxxx",
    "error_msg" : "xxxx"
  } ]
}

Status code: 400

Error response

{
  "error_code" : "KPS.XXX",
  "error_msg" : "XXX"
}

SDK Sample Code

The SDK sample code is as follows.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
package com.huaweicloud.sdk.test;

import com.huaweicloud.sdk.core.auth.ICredential;
import com.huaweicloud.sdk.core.auth.BasicCredentials;
import com.huaweicloud.sdk.core.exception.ConnectionException;
import com.huaweicloud.sdk.core.exception.RequestTimeoutException;
import com.huaweicloud.sdk.core.exception.ServiceResponseException;
import com.huaweicloud.sdk.kps.v3.region.KpsRegion;
import com.huaweicloud.sdk.kps.v3.*;
import com.huaweicloud.sdk.kps.v3.model.*;

import java.util.List;
import java.util.ArrayList;

public class BatchAssociateKeypairSolution {

    public static void main(String[] args) {
        // The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
        // In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
        String ak = System.getenv("CLOUD_SDK_AK");
        String sk = System.getenv("CLOUD_SDK_SK");

        ICredential auth = new BasicCredentials()
                .withAk(ak)
                .withSk(sk);

        KpsClient client = KpsClient.newBuilder()
                .withCredential(auth)
                .withRegion(KpsRegion.valueOf("<YOUR REGION>"))
                .build();
        BatchAssociateKeypairRequest request = new BatchAssociateKeypairRequest();
        BatchAssociateKeypairRequestBody body = new BatchAssociateKeypairRequestBody();
        Auth authServer = new Auth();
        authServer.withType(Auth.TypeEnum.fromValue("password"))
            .withKey("password");
        EcsServerInfo serverBatchKeypairs = new EcsServerInfo();
        serverBatchKeypairs.withId("4xxxxfc4-b4bf-49c2-b983-a1811c9760c1")
            .withAuth(authServer)
            .withDisablePassword(false);
        Auth authServer1 = new Auth();
        authServer1.withType(Auth.TypeEnum.fromValue("password"))
            .withKey("password");
        EcsServerInfo serverBatchKeypairs1 = new EcsServerInfo();
        serverBatchKeypairs1.withId("fxxx16e3-74b8-4025-9852-1f451932c20c")
            .withAuth(authServer1)
            .withDisablePassword(false);
        List<AssociateKeypairRequestBody> listbodyBatchKeypairs = new ArrayList<>();
        listbodyBatchKeypairs.add(
            new AssociateKeypairRequestBody()
                .withKeypairName("1")
                .withServer(serverBatchKeypairs1)
        );
        listbodyBatchKeypairs.add(
            new AssociateKeypairRequestBody()
                .withKeypairName("1")
                .withServer(serverBatchKeypairs)
        );
        body.withBatchKeypairs(listbodyBatchKeypairs);
        request.withBody(body);
        try {
            BatchAssociateKeypairResponse response = client.batchAssociateKeypair(request);
            System.out.println(response.toString());
        } catch (ConnectionException e) {
            e.printStackTrace();
        } catch (RequestTimeoutException e) {
            e.printStackTrace();
        } catch (ServiceResponseException e) {
            e.printStackTrace();
            System.out.println(e.getHttpStatusCode());
            System.out.println(e.getRequestId());
            System.out.println(e.getErrorCode());
            System.out.println(e.getErrorMsg());
        }
    }
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# coding: utf-8

import os
from huaweicloudsdkcore.auth.credentials import BasicCredentials
from huaweicloudsdkkps.v3.region.kps_region import KpsRegion
from huaweicloudsdkcore.exceptions import exceptions
from huaweicloudsdkkps.v3 import *

if __name__ == "__main__":
    # The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
    # In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
    ak = os.environ["CLOUD_SDK_AK"]
    sk = os.environ["CLOUD_SDK_SK"]

    credentials = BasicCredentials(ak, sk)

    client = KpsClient.new_builder() \
        .with_credentials(credentials) \
        .with_region(KpsRegion.value_of("<YOUR REGION>")) \
        .build()

    try:
        request = BatchAssociateKeypairRequest()
        authServer = Auth(
            type="password",
            key="password"
        )
        serverBatchKeypairs = EcsServerInfo(
            id="4xxxxfc4-b4bf-49c2-b983-a1811c9760c1",
            auth=authServer,
            disable_password=False
        )
        authServer1 = Auth(
            type="password",
            key="password"
        )
        serverBatchKeypairs1 = EcsServerInfo(
            id="fxxx16e3-74b8-4025-9852-1f451932c20c",
            auth=authServer1,
            disable_password=False
        )
        listBatchKeypairsbody = [
            AssociateKeypairRequestBody(
                keypair_name="1",
                server=serverBatchKeypairs1
            ),
            AssociateKeypairRequestBody(
                keypair_name="1",
                server=serverBatchKeypairs
            )
        ]
        request.body = BatchAssociateKeypairRequestBody(
            batch_keypairs=listBatchKeypairsbody
        )
        response = client.batch_associate_keypair(request)
        print(response)
    except exceptions.ClientRequestException as e:
        print(e.status_code)
        print(e.request_id)
        print(e.error_code)
        print(e.error_msg)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package main

import (
	"fmt"
	"github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic"
    kps "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/kps/v3"
	"github.com/huaweicloud/huaweicloud-sdk-go-v3/services/kps/v3/model"
    region "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/kps/v3/region"
)

func main() {
    // The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
    // In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
    ak := os.Getenv("CLOUD_SDK_AK")
    sk := os.Getenv("CLOUD_SDK_SK")

    auth := basic.NewCredentialsBuilder().
        WithAk(ak).
        WithSk(sk).
        Build()

    client := kps.NewKpsClient(
        kps.KpsClientBuilder().
            WithRegion(region.ValueOf("<YOUR REGION>")).
            WithCredential(auth).
            Build())

    request := &model.BatchAssociateKeypairRequest{}
	typeAuth:= model.GetAuthTypeEnum().PASSWORD
	keyAuth:= "password"
	authServer := &model.Auth{
		Type: &typeAuth,
		Key: &keyAuth,
	}
	disablePasswordServer:= false
	serverBatchKeypairs := &model.EcsServerInfo{
		Id: "4xxxxfc4-b4bf-49c2-b983-a1811c9760c1",
		Auth: authServer,
		DisablePassword: &disablePasswordServer,
	}
	typeAuth1:= model.GetAuthTypeEnum().PASSWORD
	keyAuth1:= "password"
	authServer1 := &model.Auth{
		Type: &typeAuth1,
		Key: &keyAuth1,
	}
	disablePasswordServer1:= false
	serverBatchKeypairs1 := &model.EcsServerInfo{
		Id: "fxxx16e3-74b8-4025-9852-1f451932c20c",
		Auth: authServer1,
		DisablePassword: &disablePasswordServer1,
	}
	var listBatchKeypairsbody = []model.AssociateKeypairRequestBody{
        {
            KeypairName: "1",
            Server: serverBatchKeypairs1,
        },
        {
            KeypairName: "1",
            Server: serverBatchKeypairs,
        },
    }
	request.Body = &model.BatchAssociateKeypairRequestBody{
		BatchKeypairs: listBatchKeypairsbody,
	}
	response, err := client.BatchAssociateKeypair(request)
	if err == nil {
        fmt.Printf("%+v\n", response)
    } else {
        fmt.Println(err)
    }
}

For SDK sample code of more programming languages, see the Sample Code tab in API Explorer. SDK sample code can be automatically generated.

Status Codes

Status Code

Description

202

Request succeeded.

400

Error response

Error Codes

See Error Codes.