0

Я успешно Утвержденные экземпляры вычислительных Bare Metal Cloud, используя следующий код:Bare Metal Cloud - Как установить разрешенные ключи ssh для экземпляров вычислений?

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

Согласно launch instance API documentation, вам нужно передать ваш SSH публичный ключ через ssh_authorized_keys поле metadata параметра:

Обеспечение Облако Init Метаданные

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

«ssh_authorized_keys» - предоставить один или несколько общедоступных ключей SSH в качестве , включенных в файл ~/.ssh/authorized_keys для пользователя по умолчанию на экземпляр. Используйте символ новой строки для разделения нескольких ключей. В ключи 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 для этого открытого ключа.

Смежные вопросы