SSH를 사용하여 HDInsight(Apache Hadoop)에 연결

SSH(Secure Shell)를 사용하여 Azure HDInsight의 Apache Hadoop에 안전하게 연결하는 방법에 대해 알아봅니다. 가상 네트워크를 통해 연결하는 방법에 대한 자세한 내용은 Azure HDInsight 가상 네트워크 아키텍처를 참조하세요. 자세한 내용은 Azure HDInsight 클러스터에 대한 가상 네트워크 배포 계획을 참조하세요.

다음 테이블에서는 SSH를 사용하여 HDInsight에 연결할 때 필요한 주소와 포트 정보를 포함합니다.

주소 포트 다음에 연결...
<clustername>-ssh.azurehdinsight.net 22 기본 헤드 노드
<clustername>-ssh.azurehdinsight.net 23 보조 헤드 노드
<edgenodename>.<clustername>-ssh.azurehdinsight.net 22 에지 노드(에지 노드가 있는 경우 다른 클러스터 형식)

<clustername>을 클러스터의 이름으로 바꿉니다. <edgenodename>을 에지 노드의 이름으로 바꿉니다.

클러스터에 에지 노드가 있는 경우 항상 SSH를 사용하여 에지 노드에 연결하는 것이 좋습니다. 헤드 노드는 Hadoop의 상태에 중요한 서비스를 호스팅합니다. 에지 노드는 배치한 내용을 실행합니다. 에지 노드를 사용하는 방법에 대한 자세한 내용은 HDInsight에서 에지 노드 사용을 참조하세요.

HDInsight에 처음 연결할 때 호스트의 신뢰성을 설정할 수 없다는 경고가 SSH 클라이언트에 표시될 수도 있습니다. 메시지가 표시되면 ‘예’를 선택하여 SSH 클라이언트의 신뢰할 수 있는 서버 목록에 호스트를 추가합니다.

이전에 같은 이름의 서버에 연결한 경우 저장된 호스트 키 서버의 호스트 키와 일치하지 않는다는 경고가 나타날 수도 있습니다. 서버 이름에 대한 기존 항목을 제거하는 방법에 대해 SSH 클라이언트에 대한 설명서를 참조하세요.

SSH 클라이언트

Linux, Unix 및 macOS 시스템은 sshscp 명령을 제공합니다. ssh 클라이언트는 일반적으로 Linux 또는 Unix 기반 시스템에서 원격 명령줄 세션을 만드는 데 사용됩니다. scp 클라이언트는 클라이언트와 원격 시스템 간에 파일을 안전하게 복사하는 데 사용됩니다.

Microsoft Windows는 기본적으로 SSH 클라이언트를 설치하지 않습니다. sshscp 클라이언트는 Windows에서 다음 패키지를 통해 사용할 수 있습니다.

또한 PuTTYMobaXterm과 같은 여러 그래픽 SSH 클라이언트가 있습니다. 이러한 클라이언트를 사용하여 HDInsight에 연결할 수 있지만, 연결하는 프로세스는 ssh 유틸리티를 사용하는 것과 다릅니다. 자세한 내용은 사용하는 그래픽 클라이언트의 설명서를 참조하세요.

인증: SSH 키

SSH 키는 공개 키 암호화를 사용하여 SSH 세션을 인증합니다. SSH 키는 암호보다 더 안전하며, Hadoop 클러스터에 대한 액세스를 안전하게 보호하는 쉬운 방법을 제공합니다.

키를 사용하여 SSH 계정을 보호한 경우 클라이언트는 연결할 때 일치하는 프라이빗 키를 제공해야 합니다.

  • 대부분의 클라이언트는 기본 키를 사용하도록 구성될 수 있습니다. 예를 들어 ssh 클라이언트는 Linux 및 Unix 환경의 ~/.ssh/id_rsa에서 프라이빗 키를 찾습니다.

  • 프라이빗 키에 대한 경로를 지정할 수 있습니다. ssh 클라이언트에서 -i 매개 변수를 사용하여 프라이빗 키에 대한 경로를 지정합니다. 예: ssh -i ~/.ssh/id_rsa sshuser@myedge.mycluster-ssh.azurehdinsight.net.

  • 다른 서버에 사용할 수 있는 여러 프라이빗 키가 있는 경우 ssh-agent(https://en.wikipedia.org/wiki/Ssh-agent) 같은 유틸리티를 고려해 볼 수 있습니다. ssh-agent 유틸리티를 사용하여 SSH 세션을 설정할 때 사용할 키를 자동으로 선택할 수 있습니다.

Important

암호를 사용하여 프라이빗 키를 보호하는 경우 키를 사용할 때 암호를 입력해야 합니다. ssh-agent와 같은 유틸리티는 편의상 암호를 캐시할 수 있습니다.

SSH 키 쌍 만들기

ssh-keygen 명령을 사용하여 공용 및 프라이빗 키 파일을 만듭니다. 다음 명령은 HDInsight와 함께 사용할 수 있는 2048비트 RSA 키 쌍을 생성합니다.

ssh-keygen -t rsa -b 2048

키 생성 프로세스 중에 정보를 묻는 메시지가 표시됩니다. 예를 들어, 키가 저장되는 위치 또는 암호를 사용할지 여부를 묻습니다. 프로세스가 완료된 후에 공개 키와 프라이빗 키라는 두 개의 파일이 만들어집니다.

  • 공개 키는 HDInsight 클러스터를 만드는 데 사용됩니다. 공개 키의 확장명은 .pub입니다.

  • 프라이빗 키는 HDInsight 클러스터에 클라이언트를 인증하는 데 사용됩니다.

Important

암호를 사용하여 키를 보호할 수 있습니다. 암호는 사실상 프라이빗 키의 암호입니다. 누군가 사용자의 프라이빗 키를 얻게 되더라도 키를 사용하기 위해 암호가 있어야 합니다.

공용 키를 사용하여 HDInsight 만들기

생성 방법 공개 키를 사용하는 방법
Azure Portal SSH에 클러스터 로그인 암호 사용 선택을 취소하고 SSH 인증 형식으로 공개 키를 선택합니다. 마지막으로 공개 키 파일을 선택하거나 SSH 공개 키 필드에 파일의 텍스트 내용을 붙여 넣습니다.
SSH public key dialog in HDInsight cluster creation.
Azure PowerShell New-AzHdinsightCluster cmdlet의 -SshPublicKey 매개 변수를 사용하고 문자열로 공개 키의 내용을 전달합니다.
Azure CLI az hdinsight create 명령의 --sshPublicKey 매개 변수를 사용하여 공개 키의 내용을 문자열로 전달합니다.
Resource Manager 템플릿 템플릿에서 SSH 키를 사용하는 예제는 SSH 키를 사용하여 Linux에서 HDInsight 배포를 참조하세요. azuredeploy.json 파일의 publicKeys 요소는 클러스터를 만들 때 Azure에 키를 전달하는 데 사용됩니다.

인증: 암호

SSH 계정은 암호를 사용하여 보호될 수 있습니다. SSH를 사용하여 HDInsight에 연결할 경우 암호를 입력하라는 메시지가 표시됩니다.

Warning

Microsoft는 SSH에 암호 인증을 사용하는 것을 권장하지 않습니다. 암호는 추측할 수 있고 무차별 암호 대입 공격에 취약합니다. 대신 인증하기 위한 SSH 키를 사용하는 것이 좋습니다.

Important

SSH 계정 암호는 HDInsight 클러스터가 만들어지고 70일 후에 만료됩니다. 암호가 만료되면 HDInsight 관리 문서의 정보를 사용하여 암호를 변경할 수 있습니다.

암호를 사용하여 HDInsight 만들기

생성 방법 암호를 지정하는 방법
Azure Portal 기본적으로 SSH 사용자 계정에는 클러스터 로그인 계정인 동일한 암호가 있습니다. 다른 암호를 사용하려면 SSH에 클러스터 로그인 암호 사용 선택을 취소하고 SSH 암호 필드에 암호를 입력합니다.
SSH password dialog in HDInsight cluster creation.
Azure PowerShell New-AzHdinsightCluster cmdlet의 --SshCredential 매개 변수를 사용하고 SSH 사용자 계정 및 암호를 포함하는 PSCredential 개체를 전달합니다.
Azure CLI az hdinsight create 명령의 --ssh-password 매개 변수를 사용하여 암호 값을 제공합니다.
Resource Manager 템플릿 템플릿에서 암호를 사용하는 예제는 SSH 암호를 사용하여 Linux에서 HDInsight 배포를 참조하세요. azuredeploy.json 파일의 linuxOperatingSystemProfile 요소는 클러스터를 만들 때 Azure에 SSH 계정 이름 및 암호를 전달하는 데 사용됩니다.

SSH 암호 변경

SSH 사용자 계정 암호를 변경하는 방법에 대한 내용은 HDInsight 관리 문서의 암호 변경 섹션을 참조하세요.

인증 도메인에 조인된 HDInsight

도메인 조인 HDInsight 클러스터를 사용하는 경우 SSH 로컬 사용자와 연결한 후 kinit 명령을 사용해야 합니다. 이 명령은 도메인 사용자 및 암호를 묻는 메시지를 표시하고 클러스터와 연결된 Microsoft Entra 도메인을 사용하여 세션을 인증합니다.

도메인 계정을 사용하여 ssh가 가능하도록 도메인 조인 노드(예: 헤드 노드, 에지 노드)마다 Kerberos 인증을 사용할 수도 있습니다. 이렇게 하려면 sshd 구성 파일을 편집합니다.

sudo vi /etc/ssh/sshd_config

주석 처리를 제거하고 KerberosAuthenticationyes로 변경합니다.

sudo service sshd restart

Kerberos 인증에 성공했는지 확인하려면 klist 명령을 사용합니다.

자세한 내용은 도메인에 조인된 HDInsight 구성을 참조하세요.

노드에 연결

헤드 노드 및 에지 노드(있는 경우)는 인터넷을 통해 포트 22 및 23에 액세스할 수 있습니다.

  • 헤드 노드에 연결할 경우 기본 헤드 노드에 연결하려면 22 포트, 보조 헤드 노드에 연결하려면 23 포트를 사용하세요. 사용할 정규화된 도메인 이름은 clustername-ssh.azurehdinsight.net이며, 여기서 clustername은 사용자의 클러스터 이름입니다.

    # Connect to primary head node
    # port not specified since 22 is the default
    ssh sshuser@clustername-ssh.azurehdinsight.net
    
    # Connect to secondary head node
    ssh -p 23 sshuser@clustername-ssh.azurehdinsight.net
    
  • 에지 노드에 연결할 때 포트 22를 사용합니다. 정규화된 도메인 이름은 edgenodename.clustername-ssh.azurehdinsight.net이며, 여기서 edgenodename은 에지 노드 연결 시 사용자가 제공한 이름입니다. clustername은 클러스터의 이름입니다.

    # Connect to edge node
    ssh sshuser@edgnodename.clustername-ssh.azurehdinsight.net
    

Important

이전 예에서는 암호 인증을 사용하고 있고 인증서 인증이 자동으로 발생하고 있다고 가정합니다. 인증에 SSH 키 쌍을 사용하고 인증서가 자동으로 사용되지 않을 경우 -i 매개 변수를 사용하여 프라이빗 키를 지정합니다. 예: ssh -i ~/.ssh/mykey sshuser@clustername-ssh.azurehdinsight.net.

연결되면 SSH 사용자 이름 및 사용자가 연결된 노드를 표시하도록 프롬프트가 변경됩니다. 예를 들어, sshuser로 기본 헤드 노드에 연결된 경우 프롬프트는 sshuser@<active-headnode-name>:~$입니다.

작업자 및 Apache Zookeeper 노드에 연결

작업자 노드와 Zookeeper 노드는 인터넷에서 직접 액세스할 수 없으며, 클러스터 헤드 노드 또는 에지 노드에서 액세스할 수 있습니다. 다음은 다른 노드에 연결하는 일반적인 단계입니다.

  1. SSH를 사용하여 헤드 또는 가장자리 노드에 연결:

    ssh sshuser@myedge.mycluster-ssh.azurehdinsight.net
    
  2. 헤드 또는 가장자리 노드에 대한 SSH 연결에서는 ssh 명령을 사용하여 클러스터의 작업자 노드에 연결합니다.

    ssh sshuser@wn0-myhdi
    

    노드 이름 목록을 검색하려면 Apache Ambari REST API를 사용하여 HDInsight 관리 문서를 참조하세요.

암호를 사용하여 SSH 계정을 보호하는 경우 연결할 때 해당 암호를 입력합니다.

SSH 키를 사용하여 SSH 계정을 보호하는 경우 SSH 전달이 클라이언트에서 활성화되어 있는지 확인합니다.

참고 항목

클러스터에서 모든 노드에 직접 액세스하는 다른 방법은 Azure Virtual Network에 HDInsight를 설치하는 것입니다. 그런 다음 동일한 가상 네트워크에 원격 컴퓨터를 조인하고 클러스터에 있는 모든 노드에 직접 액세스할 수 있습니다.

자세한 내용은 HDInsight에 대한 가상 네트워크 계획을 참조하세요.

SSH 에이전트 전달 구성

Important

다음 단계에서는 Linux 또는 UNIX 기반 시스템이며 Windows 10의 Bash를 통해 작업한다고 가정합니다. 이 단계가 시스템에서 작동하지 않는다면 해당 SSH 클라이언트에 대한 설명서를 참조해야 할 수 있습니다.

  1. 텍스트 편집기를 사용하여 ~/.ssh/config를 엽니다. 이 파일이 존재하지 않으면 명령줄에 touch ~/.ssh/config를 입력하여 만들 수 있습니다.

  2. config 파일에 다음 텍스트를 추가합니다.

    Host <edgenodename>.<clustername>-ssh.azurehdinsight.net
        ForwardAgent yes
    

    호스트 정보를 SSH를 사용하여 연결한 노드의 주소로 바꿉니다. 이전 예제에서는 에지 노드를 사용합니다. 이 항목은 지정된 노드에 대한 SSH 에이전트 전달을 구성합니다.

  3. 터미널에서 다음 명령을 사용하여 SSH 에이전트 전달을 테스트합니다.

    echo "$SSH_AUTH_SOCK"
    

    이 명령은 다음 텍스트와 유사한 정보를 반환합니다.

    /tmp/ssh-rfSUL1ldCldQ/agent.1792
    

    아무 것도 반환되지 않는 경우 ssh-agent가 실행되지 않는 것입니다.

  4. ssh-agent가 실행 중인지 확인한 후 다음을 사용하여 에이전트에 SSH 프라이빗 키를 추가합니다.

    ssh-add ~/.ssh/id_rsa
    

    프라이빗 키가 다른 파일에 저장된 경우 ~/.ssh/id_rsa를 해당 파일의 경로로 바꿉니다.

  5. SSH를 사용하여 클러스터 에지 노드 또는 헤드 노드에 연결합니다. SSH 명령을 사용하여 작업자 또는 zookeeper 노드에 연결합니다. 전달된 키를 사용하여 연결이 설정됩니다.

다음 단계