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

Binding an SSH Key Pair

Function

Binds an SSH key pair to a specified VM. (The private key of the SSH key pair for the VM is required if you want to replace the key pair, but not required if you want to reset the key pair.)

Calling Method

For details, see Calling APIs.

URI

POST /v3/{project_id}/keypairs/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

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 4 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 5 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 6 Response body parameters

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 7 Response body parameters

Parameter

Type

Description

error_code

String

Error Codes

error_msg

String

Description

Example Requests

  • {
      "keypair_name" : "newkeypair1",
      "server" : {
        "id" : "d76baba7-ef09-40a2-87ff-3eafec0696e7",
        "auth" : {
          "type" : "keypair",
          "key" : "-----BEGINRSAPRIVATEKEY-----M..."
        }
      }
    }
  • {
      "keypair_name" : "newkeypair2",
      "server" : {
        "id" : "d76baba7-ef09-40a2-87ff-3eafec0696e7"
      }
    }

Example Responses

Status code: 202

OK

{
  "task_id" : "aee8d2fe-5484-4753-9177-5a38dc15546c"
}

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
    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.*;
    
    
    public class AssociateKeypairSolution {
    
        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();
            AssociateKeypairRequest request = new AssociateKeypairRequest();
            AssociateKeypairRequestBody body = new AssociateKeypairRequestBody();
            Auth authServer = new Auth();
            authServer.withType(Auth.TypeEnum.fromValue("keypair"))
                .withKey("-----BEGINRSAPRIVATEKEY-----M...");
            EcsServerInfo serverbody = new EcsServerInfo();
            serverbody.withId("d76baba7-ef09-40a2-87ff-3eafec0696e7")
                .withAuth(authServer);
            body.withServer(serverbody);
            body.withKeypairName("newkeypair1");
            request.withBody(body);
            try {
                AssociateKeypairResponse response = client.associateKeypair(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
    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.*;
    
    
    public class AssociateKeypairSolution {
    
        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();
            AssociateKeypairRequest request = new AssociateKeypairRequest();
            AssociateKeypairRequestBody body = new AssociateKeypairRequestBody();
            EcsServerInfo serverbody = new EcsServerInfo();
            serverbody.withId("d76baba7-ef09-40a2-87ff-3eafec0696e7");
            body.withServer(serverbody);
            body.withKeypairName("newkeypair2");
            request.withBody(body);
            try {
                AssociateKeypairResponse response = client.associateKeypair(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
    # 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 = AssociateKeypairRequest()
            authServer = Auth(
                type="keypair",
                key="-----BEGINRSAPRIVATEKEY-----M..."
            )
            serverbody = EcsServerInfo(
                id="d76baba7-ef09-40a2-87ff-3eafec0696e7",
                auth=authServer
            )
            request.body = AssociateKeypairRequestBody(
                server=serverbody,
                keypair_name="newkeypair1"
            )
            response = client.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
    # 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 = AssociateKeypairRequest()
            serverbody = EcsServerInfo(
                id="d76baba7-ef09-40a2-87ff-3eafec0696e7"
            )
            request.body = AssociateKeypairRequestBody(
                server=serverbody,
                keypair_name="newkeypair2"
            )
            response = client.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
    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.AssociateKeypairRequest{}
    	typeAuth:= model.GetAuthTypeEnum().KEYPAIR
    	keyAuth:= "-----BEGINRSAPRIVATEKEY-----M..."
    	authServer := &model.Auth{
    		Type: &typeAuth,
    		Key: &keyAuth,
    	}
    	serverbody := &model.EcsServerInfo{
    		Id: "d76baba7-ef09-40a2-87ff-3eafec0696e7",
    		Auth: authServer,
    	}
    	request.Body = &model.AssociateKeypairRequestBody{
    		Server: serverbody,
    		KeypairName: "newkeypair1",
    	}
    	response, err := client.AssociateKeypair(request)
    	if err == nil {
            fmt.Printf("%+v\n", response)
        } else {
            fmt.Println(err)
        }
    }
    
  •  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
    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.AssociateKeypairRequest{}
    	serverbody := &model.EcsServerInfo{
    		Id: "d76baba7-ef09-40a2-87ff-3eafec0696e7",
    	}
    	request.Body = &model.AssociateKeypairRequestBody{
    		Server: serverbody,
    		KeypairName: "newkeypair2",
    	}
    	response, err := client.AssociateKeypair(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

OK

400

Error response

Error Codes

See Error Codes.