Łączenie się z usługą HDInsight (Apache Hadoop) przy użyciu protokołu SSH

Dowiedz się, jak bezpiecznie nawiązać połączenie z usługą Apache Hadoop w usłudze Azure HDInsight przy użyciu protokołu Secure Shell (SSH ). Aby uzyskać informacje na temat nawiązywania połączenia za pośrednictwem sieci wirtualnej, zobacz Architektura sieci wirtualnej usługi Azure HDInsight. Zobacz również Planowanie wdrożenia sieci wirtualnej dla klastrów usługi Azure HDInsight.

Poniższa tabela zawiera informacje o adresach i portach wymaganych podczas nawiązywania połączenia z usługą HDInsight przy użyciu klienta SSH:

Adres Port Element docelowy połączenia
<clustername>-ssh.azurehdinsight.net 22 Podstawowy węzeł główny
<clustername>-ssh.azurehdinsight.net 23 Dodatkowy węzeł główny
<edgenodename>.<clustername>-ssh.azurehdinsight.net 22 węzeł krawędzi (dowolny inny typ klastra, jeśli istnieje węzeł brzegowy)

Zastąp ciąg <clustername> nazwą klastra. Element <edgenodename> należy zastąpić nazwą węzła krawędzi.

Jeśli klaster zawiera węzeł krawędzi, zalecamy, aby zawsze łączyć się z węzłem krawędzi przy użyciu protokołu SSH. Węzły główne hostują usługi o krytycznym znaczeniu dla kondycji usługi Hadoop. W węźle krawędzi działają tylko obciążenia umieszczone przez użytkownika. Więcej informacji dotyczących używania węzłów krawędzi można znaleźć w temacie Use edge nodes in HDInsight (Używanie węzłów krawędzi w usłudze HDInsight).

Napiwek

Po pierwszym połączeniu z usługą HDInsight Twój klient SSH może wyświetlić ostrzeżenie, że nie można ustalić autentyczności hosta. Po wyświetleniu monitu wybierz opcję „tak”, aby dodać hosta do listy zaufanych serwerów klienta SSH.

Jeśli wcześniej miało miejsce połączenie z serwerem o takiej samej nazwie, może pojawić się ostrzeżenie, że przechowywany klucz hosta nie odpowiada kluczowi hosta serwera. W dokumentacji klienta SSH można znaleźć informacje, jak usunąć istniejący wpis dla nazwy serwera.

Klienci SSH

Systemy Linux, Unix i macOS obejmują polecenia ssh i scp. Klient ssh jest najczęściej używany do tworzenia zdalnej sesji wiersza polecenia za pomocą systemu Linux lub Unix. Klient scp służy do bezpiecznego kopiowania plików między klientem użytkownika a systemem zdalnym.

System Microsoft Windows domyślnie nie instaluje żadnych klientów SSH. Klienci ssh i scp są dostępni dla systemu Windows za pośrednictwem następujących pakietów:

Istnieje również kilka graficznych klientów SSH, takich jak PuTTY i MobaXterm. Mimo że ci klienci umożliwiają nawiązywanie połączeń z usługą HDInsight, proces łączenia się jest inny niż w przypadku narzędzia ssh. Aby uzyskać więcej informacji, zobacz dokumentację używanego klienta graficznego.

Uwierzytelnianie: klucze SSH

Klucze SSH używają kryptografii klucza publicznego do uwierzytelniania sesji SSH. Klucze SSH są bezpieczniejsze niż hasła i umożliwiają łatwe zabezpieczenie dostępu do klastra usługi Hadoop.

Jeśli konto SSH zostanie zabezpieczone za pomocą klucza, podczas nawiązywania połączenia klient musi podać zgodny klucz prywatny:

  • Większość klientów można skonfigurować do używania domyślnego klucza. Na przykład w środowiskach Linux i Unix klient ssh szuka klucza prywatnego w lokalizacji ~/.ssh/id_rsa.

  • Można określić ścieżkę do klucza prywatnego. W przypadku klienta ssh do określenia ścieżki do klucza prywatnego służy parametr -i. Na przykład ssh -i ~/.ssh/id_rsa sshuser@myedge.mycluster-ssh.azurehdinsight.net.

  • Jeśli masz wiele kluczy prywatnych, których używasz na różnych serwerach, rozważ użycie takiego narzędzia jak ssh-agent (https://en.wikipedia.org/wiki/Ssh-agent)). Narzędzie ssh-agent może służyć do automatycznego wybierania klucza do użycia podczas ustanawiania sesji SSH.

Ważne

W przypadku zabezpieczenia klucza prywatnego za pomocą hasła musisz je podać przed użyciem klucza. Takie narzędzia, jak ssh-agent, umożliwiają wygodne przechowywanie haseł w pamięci podręcznej.

Tworzenie pary kluczy SSH

Do tworzenia plików klucza publicznego i prywatnego służy polecenie ssh-keygen. Następujące polecenie generuje parę 2048-bitowych kluczy RSA, która pozwala połączyć się z usługą HDInsight:

ssh-keygen -t rsa -b 2048

Podczas procesu tworzenia klucza zostanie wyświetlony monit o podanie informacji. Mogą one dotyczyć na przykład hasła lub lokalizacji przechowywania kluczy. Po zakończeniu tego procesu zostaną utworzone dwa pliki: klucz publiczny i klucz prywatny.

  • Klucz publiczny służy do tworzenia klastra usługi HDInsight i ma rozszerzenie .pub.

  • Klucz prywatny służy do uwierzytelniania klienta w klastrze usługi HDInsight.

Ważne

Klucze można zabezpieczyć przy użyciu hasła. W praktyce hasłem zabezpiecza się klucz prywatny. Nawet w przypadku uzyskania klucza prywatnego przez inną osobę do jego użycia jest potrzebne hasło.

Tworzenie klastrów usługi HDInsight przy użyciu klucza publicznego

Metoda tworzenia Sposób użycia klucza publicznego
Azure Portal Usuń zaznaczenie pola wyboru Użyj hasła logowania klastra dla protokołu SSH, a następnie wybierz pozycję Klucz publiczny jako typ uwierzytelniania SSH. Na koniec wybierz plik klucza publicznego lub wklej zawartość tekstową pliku w polu klucz publiczny SSH.
SSH public key dialog in HDInsight cluster creation.
Azure PowerShell -SshPublicKey Użyj parametru polecenia cmdlet New-AzHdinsightCluster i przekaż zawartość klucza publicznego jako ciąg.
Interfejs wiersza polecenia platformy Azure Użyj parametru --sshPublicKey polecenia az hdinsight create i przekaż zawartość klucza publicznego jako ciąg.
Szablon usługi Resource Manager Przykład użycia kluczy SSH razem z szablonem można znaleźć w temacie Deploy HDInsight on Linux with SSH key (Wdrażanie usługi HDInsight w systemie Linux przy użyciu klucza SSH). Element publicKeys w pliku azuredeploy.json umożliwia przekazanie kluczy do platformy Azure podczas tworzenia klastra.

Uwierzytelnianie: hasło

Konta SSH mogą być chronione przy użyciu hasła. Po nawiązaniu połączenia z usługą HDInsight przy użyciu protokołu SSH zostanie wyświetlony monit o wprowadzenie hasła.

Ostrzeżenie

W przypadku protokołu SSH firma Microsoft nie zaleca korzystania z uwierzytelniania za pomocą hasła. Hasła można złamać i są one podatne na ataki siłowe. Zamiast tego zalecamy używanie kluczy SSH w celu uwierzytelniania.

Ważne

Hasło do konta SSH wygasa 70 dni po utworzeniu klastra usługi HDInsight. Jeśli hasło wygaśnie, można je zmienić przy użyciu informacji zawartych w dokumencie Zarządzanie usługą HDInsight.

Tworzenie klastrów usługi HDInsight przy użyciu hasła

Metoda tworzenia Sposób określenia hasła
Azure Portal Domyślnie hasło do konta użytkownika SSH jest takie samo jak hasło do konta umożliwiającego logowanie do klastra. Aby użyć innego hasła, usuń zaznaczenie pola Użyj hasła logowania klastra dla protokołu SSH, a następnie wprowadź hasło w polu Hasło SSH.
SSH password dialog in HDInsight cluster creation.
Azure PowerShell --SshCredential Użyj parametru polecenia cmdlet New-AzHdinsightCluster i przekaż PSCredential obiekt zawierający nazwę i hasło konta użytkownika SSH.
Interfejs wiersza polecenia platformy Azure Użyj parametru --ssh-password polecenia az hdinsight create i podaj hasło.
Szablon usługi Resource Manager Przykład użycia hasła razem z szablonem można znaleźć w temacie Deploy HDInsight on Linux with SSH password (Wdrażanie usługi HDInsight w systemie Linux przy użyciu hasła SSH). Element linuxOperatingSystemProfile w pliku azuredeploy.json umożliwia przekazanie nazwy konta SSH i hasła do platformy Azure podczas tworzenia klastra.

Zmienianie hasła SSH

Informacje dotyczące zmiany hasła użytkownika konta SSH można znaleźć w sekcji Change passwords (Zmienianie haseł) dokumentu Manage HDInsight (Zarządzanie usługą HDInsight).

Przyłączona do domeny uwierzytelniania usługa HDInsight

Jeśli używasz przyłączonego do domeny klastra usługi HDInsight, musisz użyć kinit polecenia po nawiązaniu połączenia z użytkownikiem lokalnym SSH. To polecenie wyświetla monit o podanie hasła i użytkownika domeny oraz uwierzytelnia sesję w domenie Microsoft Entra skojarzonej z klastrem.

Możesz również włączyć uwierzytelnianie Kerberos w każdym węźle przyłączonym do domeny (na przykład węźle głównym, węźle brzegowym) na potrzeby protokołu SSH przy użyciu konta domeny. Aby to zrobić, należy edytować plik konfiguracji sshd:

sudo vi /etc/ssh/sshd_config

usuń znaczniki komentarza i zmień KerberosAuthentication na yes

sudo service sshd restart

Użyj klist polecenia , aby sprawdzić, czy uwierzytelnianie Kerberos zakończyło się pomyślnie.

Aby uzyskać więcej informacji, zobacz Configure domain-joined HDInsight (Konfigurowanie przyłączonej do domeny usługi HDInsight).

Nawiązywanie połączeń z węzłami

Węzły główne i węzeł krawędzi (jeśli istnieje) mogą być dostępne za pośrednictwem Internetu na portach 22 i 23.

  • Podczas nawiązywania połączenia z węzłami głównymi użyj portu 22, aby łączyć się z podstawowym węzłem głównym, oraz portu 23, aby łączyć się z pomocniczym węzłem głównym. W pełni kwalifikowana nazwa domeny do zastosowania to clustername-ssh.azurehdinsight.net, gdzie clustername jest nazwą Twojego klastra.

    # 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
    
  • W przypadku nawiązywania połączenia z węzłem brzegowym użyj portu 22. W pełni kwalifikowana nazwa domeny to edgenodename.clustername-ssh.azurehdinsight.net, gdzie edgenodename jest nazwą podaną podczas tworzenia węzła brzegowego. clustername jest nazwą klastra.

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

Ważne

Poprzednie przykłady zakładają, że korzystasz z uwierzytelniania przy użyciu hasła lub że uwierzytelnianie certyfikatu odbywa się automatycznie. Jeśli korzystasz z pary kluczy SSH do uwierzytelniania, a certyfikat nie jest używany automatycznie, skorzystaj z parametru -i, aby określić klucz prywatny. Na przykład ssh -i ~/.ssh/mykey sshuser@clustername-ssh.azurehdinsight.net.

Po nawiązaniu połączenia monit zmieni się, aby wskazać nazwę użytkownika SSH i węzeł, z którym masz połączenie. Na przykład w przypadku połączenia z podstawowym węzłem głównym jako użytkownik sshuser wiersz polecenia będzie wyglądać następująco: sshuser@<active-headnode-name>:~$.

Połączenie do węzłów procesu roboczego i węzłów usługi Apache Zookeeper

Węzły procesu roboczego i węzły usługi Zookeeper nie są bezpośrednio dostępne z Internetu. Można uzyskać do nich dostęp z węzłów głównych lub węzłów krawędzi klastra. Poniżej przedstawiono ogólny zarys czynności, które należy wykonać w celu nawiązania połączenia z innymi węzłami:

  1. Połącz się z węzłem głównym lub węzłem krawędzi za pomocą protokołu SSH:

    ssh sshuser@myedge.mycluster-ssh.azurehdinsight.net
    
  2. Z poziomu połączenia SSH z węzłem głównym lub węzłem krawędzi połącz się z węzłem procesu roboczego w klastrze za pomocą polecenia ssh:

    ssh sshuser@wn0-myhdi
    

    Aby pobrać listę nazw węzłów, zobacz dokument Manage HDInsight by using the Apache Ambari REST API (Zarządzanie usługą HDInsight przy użyciu interfejsu API REST apache Ambari).

Jeśli konto SSH jest zabezpieczone przy użyciu hasła, wprowadź hasło podczas nawiązywania połączenia.

Jeśli konto SSH jest zabezpieczone przy użyciu kluczy SSH, upewnij się, że na kliencie jest włączone przekazywanie SSH.

Uwaga

Innym sposobem uzyskiwania bezpośredniego dostępu do wszystkich węzłów w klastrze jest zainstalowanie usługi HDInsight w usłudze Azure Virtual Network. Pozwoli to na przyłączenie komputera zdalnego do tej samej sieci wirtualnej i uzyskiwanie bezpośredniego dostępu do wszystkich węzłów w klastrze.

Aby uzyskać więcej informacji, zobacz Planowanie sieci wirtualnej dla usługi HDInsight.

Konfigurowanie przekazywania przez agenta SSH

Ważne

W poniższej procedurze założono korzystanie z systemu opartego na systemie Linux lub UNIX, ale działa ona również w przypadku powłoki Bash w systemie Windows 10. Jeśli te czynności nie działają w Twoim systemie, zapoznaj się z dokumentacją używanego klienta SSH.

  1. Za pomocą edytora tekstów otwórz plik ~/.ssh/config. Jeśli ten plik nie istnieje, możesz go utworzyć, wprowadzając polecenie touch ~/.ssh/config w wierszu polecenia.

  2. Dodaj następujący tekst do pliku config.

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

    Informacje w sekcji Host zastąp adresem węzła, z którym łączysz się przy użyciu protokołu SSH. W poprzednim przykładzie użyto węzła krawędzi. Wpis ten umożliwia skonfigurowanie przekazywania przez agenta SSH dla określonego węzła.

  3. Przetestuj agenta przekazywania SSH za pomocą następującego polecenia z terminala:

    echo "$SSH_AUTH_SOCK"
    

    To polecenie zwraca informacje podobne do następującego tekstu:

    /tmp/ssh-rfSUL1ldCldQ/agent.1792
    

    Jeśli nic nie zostanie zwrócone, ssh-agent nie jest uruchomione.

  4. Po sprawdzeniu, czy agent ssh-agent jest uruchomiony, użyj następującego polecenia, aby dodać klucz prywatny SSH do agenta:

    ssh-add ~/.ssh/id_rsa
    

    Jeśli klucz prywatny jest przechowywany w innym pliku, zastąp ~/.ssh/id_rsa ścieżką do pliku.

  5. Połącz się z węzłem krawędzi lub węzłami głównymi klastra przy użyciu protokołu SSH. Następnie połącz się z węzłem procesu roboczego lub węzłem dozorcy przy użyciu polecenia SSH. Połączenie zostanie nawiązane przy użyciu przekazanego klucza.

Następne kroki