VM에 SSH 키 추가


이 문서에서는 OS 로그인을 사용하는 가상 머신(VM) 인스턴스 및 메타데이터 기반 SSH 키를 사용하는 VM에 SSH 키를 추가하는 방법을 설명합니다. 사용자 또는 조직 관리자가 OS 로그인을 사용 설정하지 않은 경우 VM에 메타데이터 기반 SSH 키가 사용됩니다.

시작하기 전에

  • Compute Engine VM 액세스 관리에 대한 자세한 내용은 액세스 방법 선택을 참조하세요.
  • 아직 인증을 설정하지 않았다면 설정합니다. 인증은 Google Cloud 서비스 및 API에 액세스하기 위해 ID를 확인하는 프로세스입니다. 로컬 개발 환경에서 코드 또는 샘플을 실행하려면 다음과 같이 Compute Engine에 인증하면 됩니다.

    이 페이지의 샘플 사용 방법에 대한 탭을 선택하세요.

    콘솔

    Google Cloud 콘솔을 사용하여 Google Cloud 서비스 및 API에 액세스할 때는 인증을 설정할 필요가 없습니다.

    gcloud

    1. Google Cloud CLI를 설치한 후 다음 명령어를 실행하여 초기화합니다.

      gcloud init
    2. 기본 리전 및 영역을 설정합니다.

    Terraform

    로컬 개발 환경에서 이 페이지의 Terraform 샘플을 사용하려면 gcloud CLI를 설치 및 초기화한 다음 사용자 인증 정보로 애플리케이션 기본 사용자 인증 정보를 설정하세요.

    1. Google Cloud CLI를 설치합니다.
    2. gcloud CLI를 초기화하려면 다음 명령어를 실행합니다.

      gcloud init
    3. Google 계정의 로컬 인증 사용자 인증 정보를 만듭니다.

      gcloud auth application-default login

    자세한 내용은 로컬 개발 환경의 인증 설정를 참조하세요.

    REST

    로컬 개발 환경에서 이 페이지의 REST API 샘플을 사용하려면 gcloud CLI에 제공한 사용자 인증 정보를 사용합니다.

      Google Cloud CLI를 설치한 후 다음 명령어를 실행하여 초기화합니다.

      gcloud init

OS 로그인을 사용하는 VM에 키 추가

OS 로그인을 사용하는 VM은 Google 계정과 연결된 SSH 키를 허용합니다. gcloud CLI 또는 OS Login API를 사용하여 공개 SSH 키를 Google 계정에 연결합니다. 조직 관리자인 경우 Directory API를 사용하여 사용자 계정에 SSH 키를 추가할 수 있습니다.

Google 계정에 SSH 키를 추가하면 Compute Engine이 Google 계정과 연결된 이메일에서 사용자 이름과 도메인을 조합하여 사용자 이름을 생성합니다. 예를 들어 이메일 주소가 cloudysanfrancisco@gmail.com이면 사용자 이름이 cloudysanfrancisco_gmail_com입니다. 조직 외부의 프로젝트에서 SSH 키를 추가하는 경우 ext_cloudysanfrancisco_gmail_com과 같이 사용자 이름에 ext_가 프리픽스로 추가됩니다. 조직 관리자는 Directory API를 사용하여 사용자 이름을 맞춤설정할 수 있습니다. 사용자 이름을 이미 구성했으면 SSH 키를 추가할 때 Compute Engine에 해당 사용자 이름이 사용됩니다.

gcloud

  1. Google Cloud 콘솔에서 Cloud Shell을 활성화합니다.

    Cloud Shell 활성화

    Google Cloud 콘솔 하단에서 Cloud Shell 세션이 시작되고 명령줄 프롬프트가 표시됩니다. Cloud Shell은 Google Cloud CLI가 사전 설치된 셸 환경으로, 현재 프로젝트의 값이 이미 설정되어 있습니다. 세션이 초기화되는 데 몇 초 정도 걸릴 수 있습니다.

  2. 계정에 공개 SSH 키를 추가하려면 gcloud compute os-login ssh-keys add 명령어를 사용합니다.

    gcloud compute os-login ssh-keys add \
       --key-file=KEY_FILE_PATH \
       --project=PROJECT \
       --ttl=EXPIRE_TIME
    

    다음을 바꿉니다.

    • KEY_FILE_PATH: 워크스테이션의 공개 SSH 키 경로입니다. 키는 public-openssh 형식을 사용해야 합니다.
    • PROJECT: (선택사항) SSH 키를 사용할 프로젝트입니다. 조직 외부의 프로젝트에서 SSH 키를 사용하려는 경우 또는 Cloud ID 조직의 구성원이 아닌 경우 이 필드를 지정합니다.
    • EXPIRE_TIME: (선택사항) SSH 키의 만료 시간입니다.

      예를 들어 30m을 지정하면 SSH 키가 30분 후 만료됩니다.

      이 플래그에는 다음 단위가 사용됩니다.

      • s, 초
      • m, 분
      • h, 시간
      • d, 일

Terraform

계정에 공개 SSH 키를 추가하려면 google_client_openid_userinfo 리소스와 함께 google_os_login_ssh_public_key 리소스를 사용합니다.

data "google_client_openid_userinfo" "me" {
}

resource "google_os_login_ssh_public_key" "default" {
  user = data.google_client_openid_userinfo.me.email
  key  = file("id_rsa.pub") # path/to/ssl/id_rsa.pub
}

REST

계정에 공개 SSH 키를 추가하려면 OS Login API users.importSshPublicKey 메서드를 사용합니다.

POST https://oslogin.googleapis.com/v1/users/ACCOUNT_EMAIL:importSshPublicKey

{
 "key": "SSH_KEY",
 "expirationTimeUsec": "EXPIRATION_TIMESTAMP"
}

다음을 바꿉니다.

  • ACCOUNT_EMAIL: 내 계정과 관련된 이메일 주소입니다.
  • SSH_KEY: 계정에 추가할 공개 키입니다.
  • EXPIRATION_TIMESTAMP: 에포크 후의 키 만료 시간(마이크로초 단위)입니다(1초 = 106 마이크로초).

메타데이터 기반 SSH 키를 사용하는 VM에 SSH 키 추가

OS 로그인을 사용하지 않는 VM은 Compute Engine 프로젝트 및 인스턴스 메타데이터에 SSH 키를 저장합니다. 프로젝트 메타데이터에 저장된 SSH 키를 사용하여 프로젝트의 모든 VM에 액세스할 수 있습니다. 인스턴스 메타데이터에 저장된 SSH 키를 사용하여 개별 VM에 액세스할 수 있습니다.

Compute Engine은 만료 시 메타데이터에서 만료된 SSH 키를 자동으로 삭제하지 않습니다. 하지만 만료된 키를 사용하여 VM에 대해 새 연결을 설정할 수 없습니다. 메타데이터에서 만료된 키를 삭제하려면 메타데이터 기반 키를 사용하는 VM에서 SSH 키 삭제를 참조하세요.

Google Cloud 콘솔, gcloud CLI, Compute Engine API를 사용하여 프로젝트 또는 인스턴스 메타데이터에 공개 SSH 키를 추가할 수 있습니다.

프로젝트 메타데이터에 SSH 키 추가

프로젝트 전체 SSH 키를 차단하는 VM을 제외하고 프로젝트의 모든 VM에 액세스하도록 프로젝트 메타데이터에 공개 SSH 키를 추가할 수 있습니다. 프로젝트 전체 SSH 키 차단에 대한 자세한 내용은 메타데이터 기반 SSH 키를 사용하는 VM에서 SSH 키 차단을 참조하세요.

콘솔

Google Cloud 콘솔을 사용하여 프로젝트 메타데이터에 공개 SSH 키를 추가하려면 다음을 수행합니다.

  1. Google Cloud 콘솔에서 메타데이터 페이지로 이동합니다.

    메타데이터로 이동

  2. SSH 키 탭을 클릭합니다.

  3. 수정을 클릭합니다.

  4. 항목 추가를 클릭합니다. 텍스트 상자가 열립니다.

  5. 텍스트 상자에 공개 키를 추가합니다. 키는 다음 형식 중 하나여야 합니다.

    • 만료 시간이 없는 키 형식:

      KEY_VALUE USERNAME
    • 만료 시간이 있는 키 형식:

      KEY_VALUE google-ssh {"userName":"USERNAME","expireOn":"EXPIRE_TIME"}

    다음을 바꿉니다.

    • KEY_VALUE: 공개 SSH 키 값
    • USERNAME: 사용자 이름입니다. 예를 들면 cloudysanfrancisco 또는 cloudysanfrancisco_gmail_com입니다.

      Linux VM의 경우 루트 로그인을 허용하도록 VM을 구성하지 않으면 USERNAMEroot가 될 수 없습니다. 자세한 내용은 루트 사용자로 Linux VM에 연결을 참조하세요.

      AD Directory(AD)를 사용하는 Windows VM의 경우 사용자 이름은 DOMAIN\ 형식으로 AD 도메인 앞에 추가되어야 합니다. 예를 들어 ad.example.com AD에 있는 사용자 cloudysanfranciscoexample\cloudysanfranciscoUSERNAME을 가집니다.

    • EXPIRE_TIME: ISO 8601 형식의 키 만료 시간. 예를 들면 2021-12-04T20:12:00+0000입니다.
  6. 저장을 클릭합니다.

gcloud

  1. Google Cloud 콘솔에서 Cloud Shell을 활성화합니다.

    Cloud Shell 활성화

    Google Cloud 콘솔 하단에서 Cloud Shell 세션이 시작되고 명령줄 프롬프트가 표시됩니다. Cloud Shell은 Google Cloud CLI가 사전 설치된 셸 환경으로, 현재 프로젝트의 값이 이미 설정되어 있습니다. 세션이 초기화되는 데 몇 초 정도 걸릴 수 있습니다.

  2. 프로젝트 메타데이터에 기존 SSH 키가 있으면 gcloud CLI를 사용하여 새 SSH 키를 추가할 때마다 프로젝트 메타데이터에 이를 다시 추가해야 합니다. 기존 키를 다시 추가하지 않으면 새 키를 추가할 때 기존 키가 지워집니다.

    gcloud CLI를 사용하여 프로젝트 메타데이터에 공개 SSH 키를 추가하려면 다음을 수행합니다.

    1. 프로젝트에 프로젝트 전체 공개 SSH 키가 있으면 메타데이터에서 이를 가져오고 새 파일에 추가합니다.

      1. gcloud compute project-info describe 명령어를 실행하여 프로젝트의 SSH 키를 가져옵니다.

        gcloud compute project-info describe \
         --format="value(commonInstanceMetadata[items][ssh-keys])"
        

        출력은 다음과 비슷합니다.

        username:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ... username:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ...
        
      2. ssh-keys 메타데이터 값을 복사합니다.

      3. 워크스테이션에서 새 텍스트 파일을 만들고 엽니다.

      4. 파일에 방금 복사한 키 목록을 붙여넣습니다.

      5. 다음 형식 중 하나로 목록 끝에 새 키를 추가합니다.

        • 만료 시간이 없는 키 형식:

          USERNAME:KEY_VALUE
        • 만료 시간이 있는 키 형식:

          USERNAME:KEY_VALUE google-ssh {"userName":"USERNAME","expireOn":"EXPIRE_TIME"}

        다음을 바꿉니다.

        • KEY_VALUE: 공개 SSH 키 값
        • USERNAME: 사용자 이름입니다. 예를 들면 cloudysanfrancisco 또는 cloudysanfrancisco_gmail_com입니다.

          Linux VM의 경우 루트 로그인을 허용하도록 VM을 구성하지 않으면 USERNAMEroot가 될 수 없습니다. 자세한 내용은 루트 사용자로 인스턴스에 연결을 참조하세요.

          AD Directory(AD)를 사용하는 Windows VM의 경우 사용자 이름은 DOMAIN\ 형식으로 AD 도메인 앞에 추가되어야 합니다. 예를 들어 ad.example.com AD에 있는 사용자 cloudysanfranciscoexample\cloudysanfranciscoUSERNAME을 가집니다.

        • EXPIRE_TIME: ISO 8601 형식의 키 만료 시간. 예를 들면 2021-12-04T20:12:00+0000입니다.
      6. 저장하고 파일을 닫습니다.

    2. gcloud compute project-info add-metadata 명령어를 실행하여 프로젝트 전체 ssh-keys 값을 설정합니다.

      gcloud compute project-info add-metadata --metadata-from-file=ssh-keys=KEY_FILE
      

      KEY_FILE를 다음 중 하나로 바꿉니다.

      • 프로젝트에 기존 SSH 키가 있는 경우 이전 단계에서 만든 파일의 경로
      • 프로젝트에 기존 SSH 키가 없는 경우 새 공개 SSH 키 파일의 경로

Terraform

프로젝트 메타데이터에 공개 SSH 키를 추가하려면 google_compute_project_metadata 리소스를 사용하세요.

resource "google_compute_project_metadata" "default" {
  metadata = {
    ssh-keys = <<EOF
      dev:ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILg6UtHDNyMNAh0GjaytsJdrUxjtLy3APXqZfNZhvCeT dev
      test:ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILg6UtHDNyMNAh0GjaytsJdrUxjtLy3APXqZfNZhvCeT test
    EOF
  }
}

REST

프로젝트 메타데이터에 기존 SSH 키가 있으면 Compute Engine API를 사용하여 새 SSH 키를 추가할 때마다 프로젝트 메타데이터에 이를 다시 추가해야 합니다. 기존 키를 다시 추가하지 않으면 새 키를 추가할 때 기존 키가 지워집니다.

Compute Engine API를 사용하여 프로젝트 메타데이터에 공개 SSH 키를 추가하려면 다음을 수행합니다.

  1. projects.get 메서드를 사용하여 메타데이터에서 fingerprintssh-keys 값을 가져옵니다.

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID
    

    PROJECT_ID를 프로젝트 ID로 바꿉니다.

    응답은 다음 예시와 유사합니다.

    ...
    "fingerprint": "utgYE_XWtE8=",
    "items": [
    {
     "key": "ssh-keys",
     "value": "cloudysanfrancisco:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF...\nbaklavainthebalkans:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDQDx3FNVC8... google-ssh {"userName":"baklavainthebalkans","expireOn":"2021-06-14T16:59:03+0000"}"
    }
    ]
    ...
    
  2. projects.setCommonInstanceMetadata 메서드를 사용하여 새 ssh-keys 값을 추가합니다.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/setCommonInstanceMetadata
    
    {
    "items": [
     {
      "key": "ssh-keys",
      "value": "EXISTING_SSH_KEYS\nNEW_SSH_KEY"
     }
    ]
    "fingerprint": "FINGERPRINT"
    }
    

    다음을 바꿉니다.

    • PROJECT_ID: 프로젝트 ID입니다.
    • EXISTING_SSH_KEYS: projects.get 요청 응답의 ssh-keys 키 값입니다.
    • FINGERPRINT: projects.get 요청 응답의 fingerprint 값입니다.
    • NEW_SSH_KEY: 다음 형식 중 하나의 새 SSH 키입니다.

      • 만료 시간이 없는 키 형식:

        USERNAME:KEY_VALUE
      • 만료 시간이 있는 키 형식:

        USERNAME:KEY_VALUE google-ssh {"userName":"USERNAME","expireOn":"EXPIRE_TIME"}

      다음을 바꿉니다.

      • KEY_VALUE: 공개 SSH 키 값
      • USERNAME: 사용자 이름입니다. 예를 들면 cloudysanfrancisco 또는 cloudysanfrancisco_gmail_com입니다.

        Linux VM의 경우 루트 로그인을 허용하도록 VM을 구성하지 않으면 USERNAMEroot가 될 수 없습니다. 자세한 내용은 루트 사용자로 인스턴스에 연결을 참조하세요.

        AD Directory(AD)를 사용하는 Windows VM의 경우 사용자 이름은 DOMAIN\ 형식으로 AD 도메인 앞에 추가되어야 합니다. 예를 들어 ad.example.com AD에 있는 사용자 cloudysanfranciscoexample\cloudysanfranciscoUSERNAME을 가집니다.

      • EXPIRE_TIME: ISO 8601 형식의 키 만료 시간. 예를 들면 2021-12-04T20:12:00+0000입니다.

인스턴스 메타데이터에 SSH 키 추가

VM을 만들 때 또는 VM을 만든 후 인스턴스 메타데이터에 공개 SSH 키를 추가할 수 있습니다.

VM 만들기 중 인스턴스 메타데이터에 SSH 키 추가

Google Cloud 콘솔, gcloud CLI 또는 Compute Engine API를 사용하여 VM을 만드는 동안 인스턴스 메타데이터에 SSH 키를 추가할 수 있습니다.

콘솔

Google Cloud 콘솔을 사용하여 VM을 만들고 동시에 인스턴스 메타데이터에 공개 SSH 키를 추가하려면 다음을 수행합니다.

  1. Google Cloud 콘솔에서 인스턴스 만들기 페이지로 이동합니다.

    인스턴스 만들기로 이동

  2. VM 세부정보를 지정합니다.

  3. 고급 옵션 섹션을 펼쳐서 다음을 수행합니다.

    1. 보안 섹션을 펼칩니다.

    2. 수동으로 생성된 SSH 키 추가를 선택합니다.

    3. 항목 추가를 클릭합니다.

    4. 텍스트 상자에 공개 키를 추가합니다. 압축은 다음 형식 중 하나여야 합니다.

      • 만료 시간이 없는 키 형식:

        KEY_VALUE USERNAME
      • 만료 시간이 있는 키 형식:

        KEY_VALUE google-ssh {"userName":"USERNAME","expireOn":"EXPIRE_TIME"}

      다음을 바꿉니다.

      • KEY_VALUE: 공개 SSH 키 값
      • USERNAME: 사용자 이름입니다. 예를 들면 cloudysanfrancisco 또는 cloudysanfrancisco_gmail_com입니다.

        Linux VM의 경우 루트 로그인을 허용하도록 VM을 구성하지 않으면 USERNAMEroot가 될 수 없습니다. 자세한 내용은 루트 사용자로 Linux VM에 연결을 참조하세요.

        AD Directory(AD)를 사용하는 Windows VM의 경우 사용자 이름은 DOMAIN\ 형식으로 AD 도메인 앞에 추가되어야 합니다. 예를 들어 ad.example.com AD에 있는 사용자 cloudysanfranciscoexample\cloudysanfranciscoUSERNAME을 가집니다.

      • EXPIRE_TIME: ISO 8601 형식의 키 만료 시간. 예를 들면 2021-12-04T20:12:00+0000입니다.
  4. 만들기를 클릭하여 VM을 만들고 시작합니다.

gcloud

  1. Google Cloud 콘솔에서 Cloud Shell을 활성화합니다.

    Cloud Shell 활성화

    Google Cloud 콘솔 하단에서 Cloud Shell 세션이 시작되고 명령줄 프롬프트가 표시됩니다. Cloud Shell은 Google Cloud CLI가 사전 설치된 셸 환경으로, 현재 프로젝트의 값이 이미 설정되어 있습니다. 세션이 초기화되는 데 몇 초 정도 걸릴 수 있습니다.

  2. gcloud CLI를 사용하여 VM을 만들고 동시에 인스턴스 메타데이터에 공개 SSH 키를 추가하려면 gcloud compute instances create 명령어를 사용합니다.

    gcloud compute instances create VM_NAME \
       --metadata=ssh-keys=PUBLIC_KEY
    

    다음을 바꿉니다.

    • VM_NAME: 새 VM의 이름입니다.
    • PUBLIC_KEY: 다음 형식 중 하나의 공개 SSH 키입니다.

      • 만료 시간이 없는 키 형식:

        USERNAME:KEY_VALUE
      • 만료 시간이 있는 키 형식:

        USERNAME:KEY_VALUE google-ssh {"userName":"USERNAME","expireOn":"EXPIRE_TIME"}

      다음을 바꿉니다.

      • KEY_VALUE: 공개 SSH 키 값
      • USERNAME: 사용자 이름입니다. 예를 들면 cloudysanfrancisco 또는 cloudysanfrancisco_gmail_com입니다.

        Linux VM의 경우 루트 로그인을 허용하도록 VM을 구성하지 않으면 USERNAMEroot가 될 수 없습니다. 자세한 내용은 루트 사용자로 인스턴스에 연결을 참조하세요.

        AD Directory(AD)를 사용하는 Windows VM의 경우 사용자 이름은 DOMAIN\ 형식으로 AD 도메인 앞에 추가되어야 합니다. 예를 들어 ad.example.com AD에 있는 사용자 cloudysanfranciscoexample\cloudysanfranciscoUSERNAME을 가집니다.

      • EXPIRE_TIME: ISO 8601 형식의 키 만료 시간. 예를 들면 2021-12-04T20:12:00+0000입니다.

    --metadata-from-file=ssh-keys=FILE_PATH 플래그를 사용하여 여러 SSH 키를 추가할 수 있습니다. 파일에서 이전 형식 중 하나로 사용자 이름 및 공개 SSH 키 목록을 추가합니다.

Terraform

공개 메타데이터 키를 인스턴스 메타데이터에 추가하려면 google_compute_instance 리소스를 사용하세요.

resource "google_compute_instance" "default" {
  name         = "my-vm"
  machine_type = "n1-standard-1"
  zone         = "us-central1-a"

  boot_disk {
    initialize_params {
      image = "ubuntu-1404-trusty-v20160627"
    }
  }

  # Local SSD disk
  scratch_disk {
    interface = "SCSI"
  }

  network_interface {
    network = "default"
    access_config {}
  }
  metadata = {
    "ssh-keys" = <<EOT
      dev:ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILg6UtHDNyMNAh0GjaytsJdrUxjtLy3APXqZfNZhvCeT dev
      test:ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILg6UtHDNyMNAh0GjaytsJdrUxjtLy3APXqZfNZhvCeT test
     EOT
  }
}

REST

Compute Engine을 사용하여 VM을 만들고 동시에 인스턴스 메타데이터에 공개 SSH 키를 추가하려면 instances.insert 메서드POST 요청을 생성합니다.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

다음을 바꿉니다.

  • PROJECT_ID: 프로젝트 ID입니다.
  • ZONE: VM의 영역

요청 본문에서 items 속성에 사용자 이름 및 공개 SSH 키를 제공합니다.

...
{
 "items": [
    {
     "key": "ssh-keys",
     "value": "PUBLIC_KEY"
    }
   ]
}
...

다음 형식 중 하나로 PUBLIC_KEY를 공개 키로 바꿉니다.

  • 만료 시간이 없는 키 형식:

    USERNAME:KEY_VALUE
  • 만료 시간이 있는 키 형식:

    USERNAME:KEY_VALUE google-ssh {"userName":"USERNAME","expireOn":"EXPIRE_TIME"}

다음을 바꿉니다.

  • KEY_VALUE: 공개 SSH 키 값
  • USERNAME: 사용자 이름입니다. 예를 들면 cloudysanfrancisco 또는 cloudysanfrancisco_gmail_com입니다.

    Linux VM의 경우 루트 로그인을 허용하도록 VM을 구성하지 않으면 USERNAMEroot가 될 수 없습니다. 자세한 내용은 루트 사용자로 인스턴스에 연결을 참조하세요.

    AD Directory(AD)를 사용하는 Windows VM의 경우 사용자 이름은 DOMAIN\ 형식으로 AD 도메인 앞에 추가되어야 합니다. 예를 들어 ad.example.com AD에 있는 사용자 cloudysanfranciscoexample\cloudysanfranciscoUSERNAME을 가집니다.

  • EXPIRE_TIME: ISO 8601 형식의 키 만료 시간. 예를 들면 2021-12-04T20:12:00+0000입니다.

키 사이에 \n을 추가하여 여러 SSH 키를 추가할 수 있습니다.

VM 만들기 이후 인스턴스 메타데이터에 SSH 키 추가

Google Cloud 콘솔, gcloud CLI 또는 Compute Engine API를 사용하여 VM을 만든 후 인스턴스 메타데이터에 SSH 키를 추가할 수 있습니다.

콘솔

Google Cloud 콘솔을 사용하여 인스턴스 메타데이터에 공개 SSH 키를 추가하려면 다음을 수행합니다.

  1. Google Cloud 콘솔에서 VM 인스턴스 페이지로 이동합니다.

    VM 인스턴스로 이동

  2. SSH 키를 추가할 VM의 이름을 클릭합니다.

  3. 수정을 클릭합니다.

  4. SSH 키 아래에서 항목 추가를 클릭합니다.

  5. 텍스트 상자에 공개 키를 추가합니다. 키는 다음 형식 중 하나여야 합니다.

    • 만료 시간이 없는 키 형식:

      KEY_VALUE USERNAME
    • 만료 시간이 있는 키 형식:

      KEY_VALUE google-ssh {"userName":"USERNAME","expireOn":"EXPIRE_TIME"}

    다음을 바꿉니다.

    • KEY_VALUE: 공개 SSH 키 값
    • USERNAME: 사용자 이름입니다. 예를 들면 cloudysanfrancisco 또는 cloudysanfrancisco_gmail_com입니다.

      Linux VM의 경우 루트 로그인을 허용하도록 VM을 구성하지 않으면 USERNAMEroot가 될 수 없습니다. 자세한 내용은 루트 사용자로 Linux VM에 연결을 참조하세요.

      AD Directory(AD)를 사용하는 Windows VM의 경우 사용자 이름은 DOMAIN\ 형식으로 AD 도메인 앞에 추가되어야 합니다. 예를 들어 ad.example.com AD에 있는 사용자 cloudysanfranciscoexample\cloudysanfranciscoUSERNAME을 가집니다.

    • EXPIRE_TIME: ISO 8601 형식의 키 만료 시간. 예를 들면 2021-12-04T20:12:00+0000입니다.
  6. 저장을 클릭합니다.

gcloud

  1. Google Cloud 콘솔에서 Cloud Shell을 활성화합니다.

    Cloud Shell 활성화

    Google Cloud 콘솔 하단에서 Cloud Shell 세션이 시작되고 명령줄 프롬프트가 표시됩니다. Cloud Shell은 Google Cloud CLI가 사전 설치된 셸 환경으로, 현재 프로젝트의 값이 이미 설정되어 있습니다. 세션이 초기화되는 데 몇 초 정도 걸릴 수 있습니다.

  2. 인스턴스 메타데이터에 기존 SSH 키가 있으면 gcloud CLI를 사용하여 새 SSH 키를 추가할 때마다 인스턴스 메타데이터에 이를 다시 추가해야 합니다. 기존 키를 다시 추가하지 않으면 새 키를 추가할 때 기존 키가 지워집니다.

    gcloud CLI를 사용하여 인스턴스 메타데이터에 공개 SSH 키를 추가하려면 다음을 수행합니다.

    1. VM에 인스턴스 수준 공개 SSH 키가 이미 있으면 메타데이터에서 이를 가져와서 새 파일에 추가합니다.

      1. gcloud compute instances describe 명령어를 실행하여 VM의 메타데이터를 가져옵니다.

        gcloud compute instances describe VM_NAME
        

        VM_NAME을 공개 SSH 키를 추가하거나 삭제해야 하는 VM의 이름으로 바꿉니다.

        출력은 다음과 비슷합니다.

        ...
        metadata:
        ...
        - key: ssh-keys
         value: |-
           cloudysanfrancisco:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF...
           baklavainthebalkans:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDQDx3FNVC8... google-ssh {"userName":"baklavainthebalkans","expireOn":"2021-06-14T16:59:03+0000"}
        ...
        
      2. ssh-keys 메타데이터 값을 복사합니다.

      3. 워크스테이션에서 새 텍스트 파일을 만들고 엽니다.

      4. 파일에 방금 복사한 키 목록을 붙여넣습니다.

      5. 다음 형식 중 하나로 목록 끝에 새 키를 추가합니다.

      • 만료 시간이 없는 키 형식:

        USERNAME:KEY_VALUE
      • 만료 시간이 있는 키 형식:

        USERNAME:KEY_VALUE google-ssh {"userName":"USERNAME","expireOn":"EXPIRE_TIME"}

      다음을 바꿉니다.

      • KEY_VALUE: 공개 SSH 키 값
      • USERNAME: 사용자 이름입니다. 예를 들면 cloudysanfrancisco 또는 cloudysanfrancisco_gmail_com입니다.

        Linux VM의 경우 루트 로그인을 허용하도록 VM을 구성하지 않으면 USERNAMEroot가 될 수 없습니다. 자세한 내용은 루트 사용자로 인스턴스에 연결을 참조하세요.

        AD Directory(AD)를 사용하는 Windows VM의 경우 사용자 이름은 DOMAIN\ 형식으로 AD 도메인 앞에 추가되어야 합니다. 예를 들어 ad.example.com AD에 있는 사용자 cloudysanfranciscoexample\cloudysanfranciscoUSERNAME을 가집니다.

      • EXPIRE_TIME: ISO 8601 형식의 키 만료 시간. 예를 들면 2021-12-04T20:12:00+0000입니다.
      1. 저장하고 파일을 닫습니다.
    2. gcloud compute instances add-metadata 명령어를 실행하여 ssh-keys 값을 설정합니다.

      gcloud compute instances add-metadata VM_NAME --metadata-from-file ssh-keys=KEY_FILE
      

      다음을 바꿉니다.

      • VM_NAME: SSH 키를 추가할 VM
      • KEY_FILE을 다음 중 하나로 바꿉니다.
      • VM에 기존 SSH 키가 있는 경우 이전 단계에서 만든 파일의 경로
      • VM에 기존 SSH 키가 없는 경우 새 공개 SSH 키 파일의 경로

REST

인스턴스 메타데이터에 기존 SSH 키가 있으면 Compute Engine API를 사용하여 새 SSH 키를 추가할 때마다 인스턴스 메타데이터에 이를 다시 추가해야 합니다. 기존 키를 다시 추가하지 않으면 새 키를 추가할 때 기존 키가 지워집니다.

Compute Engine API를 사용하여 인스턴스 메타데이터에 공개 SSH 키를 추가하려면 다음을 수행합니다.

  1. instances.get 메서드를 사용하여 메타데이터에서 fingerprintssh-keys 값을 가져옵니다.

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME
    

    다음을 바꿉니다.

    • PROJECT_ID: 프로젝트 ID입니다.
    • ZONE: SSH 키를 추가할 VM의 영역입니다.
    • VM_NAME: SSH 키를 추가할 VM입니다.

    응답은 다음 예시와 유사합니다.

    ...
    "fingerprint": "utgYE_XWtE8=",
    "items": [
    {
     "key": "ssh-keys",
      "value": "cloudysanfrancisco:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF...\nbaklavainthebalkans:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDQDx3FNVC8... google-ssh {"userName":"baklavainthebalkans","expireOn":"2021-06-14T16:59:03+0000"}"
    }
    ]
    ...
    
  2. instances.setMetadata 메서드를 사용하여 새 ssh-keys 값을 추가합니다.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setMetadata
    
    {
    "items": [
     {
      "key": "ssh-keys",
      "value": "EXISTING_SSH_KEYS\nNEW_SSH_KEY"
     }
    ]
    "fingerprint": "FINGERPRINT"
    }
    

    다음을 바꿉니다.

    • PROJECT_ID: 프로젝트 ID입니다.
    • EXISTING_SSH_KEYS: instances.get 요청 응답의 ssh-keys 키 값입니다.
    • FINGERPRINT: projects.get 요청 응답의 fingerprint입니다.
    • NEW_SSH_KEY: 다음 형식 중 하나의 새 SSH 키입니다.

      • 만료 시간이 없는 키 형식:

        USERNAME:KEY_VALUE
      • 만료 시간이 있는 키 형식:

        USERNAME:KEY_VALUE google-ssh {"userName":"USERNAME","expireOn":"EXPIRE_TIME"}

      다음을 바꿉니다.

      • KEY_VALUE: 공개 SSH 키 값
      • USERNAME: 사용자 이름입니다. 예를 들면 cloudysanfrancisco 또는 cloudysanfrancisco_gmail_com입니다.

        Linux VM의 경우 루트 로그인을 허용하도록 VM을 구성하지 않으면 USERNAMEroot가 될 수 없습니다. 자세한 내용은 루트 사용자로 인스턴스에 연결을 참조하세요.

        AD Directory(AD)를 사용하는 Windows VM의 경우 사용자 이름은 DOMAIN\ 형식으로 AD 도메인 앞에 추가되어야 합니다. 예를 들어 ad.example.com AD에 있는 사용자 cloudysanfranciscoexample\cloudysanfranciscoUSERNAME을 가집니다.

      • EXPIRE_TIME: ISO 8601 형식의 키 만료 시간. 예를 들면 2021-12-04T20:12:00+0000입니다.

다음 단계