我已使用以下代码成功配置了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公钥?我知道它必须以某种方式可能,因为控制台UI允许我提供SSH公钥作为实例创建的一部分。
答案 0 :(得分:1)
根据launch instance API documentation,您需要通过ssh_authorized_keys
参数的metadata
字段传递SSH公钥:
提供Cloud-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。