빠른 단계: Azure에서 Linux VM용 SSH퍼블릭-프라이빗 키 쌍 만들기 및 사용

적용 대상: ✔️ Linux VM ✔️ 유연한 확장 집합

SSH(Secure Shell) 키 쌍을 사용하여 Azure에서 인증에 SSH 키를 사용하는 가상 머신을 만들 수 있습니다. 이 문서에서는 Linux VM용 SSH퍼블릭-프라이빗 키 파일 쌍을 신속하게 생성하고 사용하는 방법을 보여줍니다. Azure Cloud Shell, macOS 또는 Linux 호스트를 사용하여 이러한 단계를 완료할 수 있습니다.

SSH 관련 문제를 해결하는 데 도움이 필요한 경우 실패하거나, 오류가 발생하거나, 거부되는 Azure Linux VM에 대한 SSH 연결 문제 해결을 참조하세요.

참고

SSH 키를 사용하여 만든 VM은 기본적으로 암호가 비활성화된 상태로 구성되므로 무차별 추측 공격의 어려움이 크게 증가합니다.

자세한 배경 및 예제는 SSH 키 쌍을 만드는 자세한 단계를 참조하세요.

Windows 컴퓨터에서 SSH 키를 생성하고 사용하는 추가적인 방법은 Azure에서 Windows를 통해 SSH 키를 사용하는 방법을 참조합니다.

지원되는 SSH 키 형식

Azure에서는 현재 최소 2048비트 길이의 SSH 프로토콜 2(SSH-2) RSA퍼블릭-프라이빗 키 쌍을 지원합니다. ED25519 및 ECDSA와 같은 다른 키 형식은 지원되지 않습니다.

SSH 키 쌍 만들기

ssh-keygen 명령을 사용하여 SSH 공용 및 프라이빗 키 파일을 생성합니다. 기본적으로 이러한 파일은 ~/.ssh 디렉터리에 만들어집니다. 다른 위치와 선택적 암호(암호)를 지정하여 프라이빗 키 파일에 액세스 할 수 있습니다. 이름 같은 SSH 키 쌍이 주어진 위치에 있으면 해당 파일이 덮어쓰여집니다.

다음 명령은 RSA 암호화 및 4096비트 길이를 사용하여 SSH 키 쌍을 만듭니다.

ssh-keygen -m PEM -t rsa -b 4096

참고

SSH 키 생성 및 저장에 설명된 대로 az sshkey create 명령을 사용하여 Azure CLI로 키 쌍을 만들 수도 있습니다.

Azure CLI를 사용하여 az vm create 명령으로 VM을 만드는 경우 --generate-ssh-keys 옵션을 사용하여 SSH 공개 및 프라이빗 키 파일을 선택적으로 생성할 수 있습니다. 키 파일은 --ssh-dest-key-path 옵션으로 달리 지정하지 않는 한 ~/.ssh 디렉터리에 저장됩니다. SSH 키 쌍이 이미 있고 --generate-ssh-keys 옵션을 사용한 경우 새 키 쌍이 생성되지 않고 기존 키 쌍이 대신 사용됩니다. 다음 명령에서 VMnameRGname을 자신의 값으로 바꿉니다.

az vm create --name VMname --resource-group RGname --image UbuntuLTS --generate-ssh-keys 

VM을 배포하는 경우 SSH 공개 키 제공

인증을 위해 SSH 키를 사용하는 Linux VM을 만들려면 Azure Portal, Azure CLI, Azure Resource Manager 템플릿 또는 기타 방법을 사용하여 VM을 만들 때 SSH 공개 키를 지정합니다.

SSH 공개 키 형식에 익숙하지 않은 경우, 다음 cat 명령을 사용하고 필요한 경우 ~/.ssh/id_rsa.pub을 자신의 공개 키 파일의 경로와 파일 이름으로 바꿔서 자신의 공개 키를 표시할 수 있습니다.

cat ~/.ssh/id_rsa.pub

일반적인 공개 키 값의 예는 다음과 같습니다.

ssh-rsa AAAAB3NzaC1yc2EAABADAQABAAACAQC1/KanayNr+Q7ogR5mKnGpKWRBQU7F3Jjhn7utdf7Z2iUFykaYx+MInSnT3XdnBRS8KhC0IP8ptbngIaNOWd6zM8hB6UrcRTlTpwk/SuGMw1Vb40xlEFphBkVEUgBolOoANIEXriAMvlDMZsgvnMFiQ12tD/u14cxy1WNEMAftey/vX3Fgp2vEq4zHXEliY/sFZLJUJzcRUI0MOfHXAuCjg/qyqqbIuTDFyfg8k0JTtyGFEMQhbXKcuP2yGx1uw0ice62LRzr8w0mszftXyMik1PnshRXbmE2xgINYg5xo/ra3mq2imwtOKJpfdtFoMiKhJmSNHBSkK7vFTeYgg0v2cQ2+vL38lcIFX4Oh+QCzvNF/AXoDVlQtVtSqfQxRVG79Zqio5p12gHFktlfV7reCBvVIhyxc2LlYUkrq4DHzkxNY5c9OGSHXSle9YsO3F1J5ip18f6gPq4xFmo6dVoJodZm9N0YMKCkZ4k1qJDESsJBk2ujDPmQQeMjJX3FnDXYYB182ZCGQzXfzlPDC29cWVgDZEXNHuYrOLmJTmYtLZ4WkdUhLLlt5XsdoKWqlWpbegyYtGZgeZNRtOOdN6ybOPJqmYFd2qRtb4sYPniGJDOGhx4VodXAjT09omhQJpE6wlZbRWDvKC55R2d/CSPHJscEiuudb+1SG2uA/oik/WQ== username@domainname

Azure Portal 또는 Resource Manager 템플릿에서 사용할 공개 키 파일의 내용을 복사하여 붙여넣으려는 경우 후행 공백은 복사하지 않아야 합니다. macOS에서 공개 키를 복사하려면 공개 키 파일을 pbcopy로 파이프하면 됩니다. 마찬가지로 Linux에서 공개 키 파일을 xclip과 같은 프로그램에 파이프할 수 있습니다

Azure에서 Linux VM에 배치하는 공개 키는 키 쌍을 만들 때 다른 위치를 지정하지 않는다면, 기본적으로 ~/.ssh/id_rsa.pub에 저장됩니다. 기존 공개 키를 사용하여 VM을 만들기 위해 Azure CLI 2.0을 사용하는 경우 --ssh-key-values 옵션과 함께 az vm create 명령을 사용하여 이 공개 키의 값과 위치(선택 사항)을 지정합니다. 다음 명령에서 myVM, myResourceGroup, UbuntuLTS, azureuser, mysshkey.pub를 사용자 고유의 값으로 바꿉니다.

az vm create \
  --resource-group myResourceGroup \
  --name myVM \
  --image UbuntuLTS \
  --admin-username azureuser \
  --ssh-key-values mysshkey.pub

VM에서 여러 SSH 키를 사용하려는 경우 이 --ssh-key-values sshkey-desktop.pub sshkey-laptop.pub와 같이 공백으로 구분된 목록에 키를 입력할 수 있습니다.

VM에 SSH 수행

Azure VM에 공개 키를 배포하고 로컬 시스템에 프라이빗 키를 배포하여 VM의 IP 주소 또는 DNS 이름을 사용하여 VM에 SSH를 수행합니다. 다음 명령에서 azureusermyvm.westus.cloudapp.azure.com을 관리자 사용자 이름과 정규화된 도메인 이름(또는 IP 주소)으로 바꿉니다.

ssh azureuser@myvm.westus.cloudapp.azure.com

이 VM에 처음 연결하는 경우 호스트의 지문을 확인하라는 메시지가 표시됩니다. 제공된 지문을 간단히 허용하려고 하지만, 이러한 접근 방식은 사용자를 중간에 공격 가능성이 있는 사람에게 노출됩니다. 항상 호스트의 지문을 확인해야 합니다. 클라이언트에서 처음 연결할 때만 이 작업을 수행하면 됩니다. 포털을 통해 호스트 지문을 가져오려면 실행 명령 기능을 사용하여 ssh-keygen -lf /etc/ssh/ssh_host_ecdsa_key.pub | awk '{print $2}' 명령을 실행합니다.

Screenshot showing using the Run Command to validate the host fingerprint.

CLI를 사용하여 명령을 실행하려면 az vm run-command invoke를 사용합니다.

키 쌍을 만들 때 암호를 지정한 경우 로그인 프로세스 중에 메시지가 표시되면 해당 암호를 입력합니다. VM이 ~/.ssh/known_hosts 파일에 추가되고, Azure VM의 공개 키가 변경되거나 ~/.ssh/known_hosts에서 서버 이름이 제거될 때까지 다시 연결하라는 메시지가 표시되지 않습니다.

VM이 Just-In-Time 액세스 정책을 사용하는 경우에는 액세스 권한을 요청해야 VM에 연결할 수 있습니다. Just-In-Time 정책과 관련된 자세한 내용은 Just-In-Time 정책을 사용하여 가상 머신 액세스 관리를 참조하세요.

다음 단계