0

次のコードを使用して、Bare Metal Cloud コンピューティング インスタンスを正常にプロビジョニングしました。

public static Instance createInstance(
        ComputeClient computeClient,
        String compartmentId,
        AvailabilityDomain availabilityDomain,
        String instanceName,
        Image image,
        Shape shape,
        Subnet subnet
    ) {

    LaunchInstanceResponse response = computeClient.launchInstance(
        LaunchInstanceRequest.builder()
            .launchInstanceDetails(
                LaunchInstanceDetails.builder()
                    .availabilityDomain(availabilityDomain.getName())
                    .compartmentId(compartmentId)
                    .displayName(instanceName)
                    .imageId(image.getId())
                    .shape(shape.getShape())
                    .subnetId(subnet.getId())
                    .build())
            .build());  

    return response.getInstance();
}

launchInstanceただし、 SSH キーペアの公開キーを渡すためのパラメーターがないため、上記のコードを使用して作成したインスタンスに SSH 接続できません。

どの SSH 公開鍵を許可するかをインスタンスに伝えるにはどうすればよいですか? コンソール UI を使用すると、インスタンス作成の一部として SSH 公開鍵を提供できるため、何らかの方法でそれが可能であるに違いないことはわかっています。

4

1 に答える 1

1

起動インスタンス API ドキュメントによると、パラメーターのssh_authorized_keysフィールドを介して SSH 公開鍵を渡す必要があります。metadata

Cloud-Init メタデータの提供

次のメタデータ キー名を使用して、Cloud-Init に情報を提供できます。

"ssh_authorized_keys" - インスタンスのデフォルト ユーザー用に ~/.ssh/authorized_keys ファイルに含める 1 つ以上の公開 SSH キーを指定します。複数のキーを区切るには、改行文字を使用します。SSH キーは、authorized_keys ファイルに必要な形式である必要があります

Java SDK でのこのコードは次のようになります。

public static Instance createInstance(
        ComputeClient computeClient,
        String compartmentId,
        AvailabilityDomain availabilityDomain,
        String instanceName,
        Image image,
        Shape shape,
        Subnet subnet
    ) {

    String sshPublicKey = "ssh-rsa AAAAB3NzaC1y...key shortened for example...fdK/ABqxgH7sy3AWgBjfj some description";

    Map<String, String> metadata = new HashMap<>();
    metadata.put("ssh_authorized_keys", sshPublicKey);

    LaunchInstanceResponse response = computeClient.launchInstance(
        LaunchInstanceRequest.builder()
            .launchInstanceDetails(
                LaunchInstanceDetails.builder()
                    .availabilityDomain(availabilityDomain.getName())
                    .compartmentId(compartmentId)
                    .displayName(instanceName)
                    .imageId(image.getId())
                    .metadata(metadata)
                    .shape(shape.getShape())
                    .subnetId(subnet.getId())
                    .build())
            .build());  

    return response.getInstance();
}

次に、その公開鍵の SSH キーペアを使用してインスタンスに SSH 接続できるようになります。

于 2016-11-23T22:32:20.427 に答える