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