Bare Metal Cloud - Как установить авторизованные ssh-ключи для вычислительных экземпляров?

Я успешно подготовил экземпляры вычислений 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();
}

Тем не менее, я не могу использовать SSH ни в одном из созданных мной экземпляров с помощью приведенного выше кода, поскольку в launchInstance передать открытый ключ моей пары ключей SSH.

Как я могу сообщить экземпляру, какой открытый ключ SSH разрешить? Я знаю, что это должно быть как-то возможно, поскольку пользовательский интерфейс консоли позволяет мне предоставлять открытый ключ SSH как часть создания экземпляра.

1 ответ

Решение

Согласно документации API экземпляра запуска, вам нужно передать открытый ключ SSH через ssh_authorized_keys поле metadata параметр:

Предоставление метаданных Cloud-Init

Для предоставления информации в Cloud-Init вы можете использовать следующие имена ключей метаданных:

"ssh_authorized_keys" - укажите один или несколько открытых ключей SSH, которые будут включены в файл ~/.ssh/authorized_keys для пользователя по умолчанию в экземпляре. Используйте символ новой строки для разделения нескольких клавиш. Ключи SSH должны быть в формате, необходимом для файла авторизованного ключа

Код для этого в 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 для этого открытого ключа.

Другие вопросы по тегам