Udostępnij za pośrednictwem


Nawiązywanie połączenia 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 Łączy się z...
<clustername>-ssh.azurehdinsight.net 22 Podstawowy węzeł główny
<clustername>-ssh.azurehdinsight.net 23 Drugorzędny węzeł zarządzający
<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. Zastąp <edgenodename> nazwą węzła krawędzi.

Jeśli klaster zawiera węzeł brzegowy, zalecamy zawsze nawiązywanie połączenia z węzłem brzegowym przy użyciu protokołu SSH. Węzły główne hostują usługi, które mają kluczowe znaczenie dla kondycji usługi Hadoop. Węzeł brzegowy uruchamia tylko to, co na nim umieścisz. Aby uzyskać więcej informacji na temat korzystania z węzłów brzegowych, zobacz Używanie węzłów brzegowych w usłudze HDInsight.

Wskazówka

Po pierwszym nawiązaniu połączenia z usługą HDInsight klient SSH może wyświetlić ostrzeżenie, że nie można ustanowić autentyczności hosta. Po wyświetleniu monitu wybierz pozycję "tak", aby dodać hosta do listy zaufanych serwerów klienta SSH.

Jeśli wcześniej nawiązaliśmy połączenie z serwerem o tej samej nazwie, może zostać wyświetlone ostrzeżenie, że przechowywany klucz hosta nie jest zgodny z kluczem hosta serwera. Zapoznaj się z dokumentacją klienta SSH, aby dowiedzieć się, jak usunąć istniejący wpis nazwy serwera.

Klienci SSH

Systemy Linux, Unix i macOS udostępniają polecenia ssh i scp. Klient ssh jest często używany do tworzenia zdalnej sesji terminalowej z systemem Linux lub Unix. Klient scp jest używany do bezpiecznego kopiowania plików między klientem 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. Chociaż ci klienci mogą służyć do nawiązywania połączenia z usługą HDInsight, proces nawiązywania połączenia różni się od korzystania z ssh narzędzia . 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 zapewniają łatwy sposób zabezpieczania dostępu do klastra usługi Hadoop.

Jeśli konto SSH jest zabezpieczone przy użyciu klucza, klient musi podać pasujący klucz prywatny podczas nawiązywania połączenia:

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

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

  • Jeśli masz wiele kluczy prywatnych do użycia z różnymi serwerami, rozważ użycie narzędzia takiego 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

Jeśli klucz prywatny zostanie zabezpieczony przy użyciu hasła, musisz wprowadzić hasło podczas korzystania z klucza. Narzędzia, takie jak ssh-agent, mogą buforować hasło dla wygody.

Tworzenie pary kluczy SSH

Użyj polecenia , ssh-keygen aby utworzyć pliki kluczy publicznych i prywatnych. Następujące polecenie generuje parę kluczy RSA 2048-bitową, która może być używana z usługą HDInsight:

ssh-keygen -t rsa -b 2048

Podczas procesu tworzenia klucza zostanie wyświetlony monit o podanie informacji. Na przykład gdzie klucze są przechowywane lub czy mają być używane hasło. Po zakończeniu procesu zostaną utworzone dwa pliki; klucz publiczny i klucz prywatny.

  • Klucz publiczny służy do tworzenia klastra usługi HDInsight. Klucz publiczny 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. Hasło jest w rzeczywistości hasłem w kluczu prywatnym. Nawet jeśli ktoś uzyska klucz prywatny, musi mieć hasło, aby użyć klucza.

Tworzenie usługi HDInsight przy użyciu klucza publicznego

Metoda tworzenia Jak używać klucza publicznego
Portal Azure 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 .
Okno dialogowe klucza publicznego SSH w tworzeniu klastra usługi HDInsight.
Azure PowerShell Użyj parametru -SshPublicKey polecenia cmdlet New-AzHdinsightCluster i przekaż zawartość klucza publicznego jako ciąg znaków.
Azure CLI --sshPublicKey Użyj parametru az hdinsight create polecenia i przekaż zawartość klucza publicznego jako ciąg.
Szablon Resource Manager Przykład użycia kluczy SSH 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 służy do przekazywania kluczy do platformy Azure podczas tworzenia klastra.

Uwierzytelnianie: hasło

Konta SSH można zabezpieczyć 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

Firma Microsoft nie zaleca używania uwierzytelniania haseł dla protokołu SSH. Hasła można odgadnąć i są narażone na ataki siłowe. Zamiast tego zalecamy użycie kluczy SSH do uwierzytelniania.

Ważne

Hasło do konta SSH wygasa 70 dni po utworzeniu klastra usługi HDInsight. Jeśli hasło wygaśnie, możesz go zmienić, korzystając z informacji w dokumencie Zarządzanie usługą HDInsight .

Tworzenie usługi HDInsight przy użyciu hasła

Metoda tworzenia Jak określić hasło
Portal Azure Domyślnie konto użytkownika SSH ma takie samo hasło jak konto logowania 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 .
Okno dialogowe hasła SSH w tworzeniu klastra usługi HDInsight.
Azure PowerShell Użyj parametru --SshCredential polecenia cmdlet New-AzHdinsightCluster i przekaż obiekt PSCredential zawierający nazwę użytkownika i hasło konta SSH.
Azure CLI Użyj parametru --ssh-password polecenia az hdinsight create i podaj wartość hasła.
Szablon Resource Manager Przykład użycia hasła 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 służy do przekazywania nazwy konta SSH i hasła do platformy Azure podczas tworzenia klastra.

Zmienianie hasła SSH

Aby uzyskać informacje na temat zmiany hasła konta użytkownika SSH, zobacz sekcję Zmienianie haseł w dokumencie Zarządzanie usługą HDInsight .

Przyłączona do domeny uwierzytelniania usługa HDInsight

Jeśli używasz klastra usługi HDInsight przyłączonego do domeny, musisz użyć kinit polecenia po nawiązaniu połączenia z lokalnym użytkownikiem 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ć, edytuj plik konfiguracji sshd:

sudo vi /etc/ssh/sshd_config

usuń komentarz 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 Konfigurowanie przyłączonej do domeny usługi HDInsight.

Połącz 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 nawiązać połączenie z podstawowym węzłem głównym i portem 23 , aby nawiązać połączenie z pomocniczym węzłem głównym. W pełni kwalifikowana nazwa domeny do użycia to clustername-ssh.azurehdinsight.net, gdzie clustername jest nazwą 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
    
  • Podczas nawiązywania połączenia z węzłem krawędzi 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 to nazwa klastra.

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

Ważne

W poprzednich przykładach założono, że używasz uwierzytelniania za pomocą hasła lub że uwierzytelnianie certyfikatu odbywa się automatycznie. Jeśli używasz pary kluczy SSH do uwierzytelniania, a certyfikat nie jest używany automatycznie, użyj 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, gdy jesteś połączony z podstawowym węzłem głównym jako sshuser, pojawia się monit sshuser@<active-headnode-name>:~$.

Nawiązywanie połączenia z węzłami procesu roboczego i węzłami usługi Apache Zookeeper

Węzły robocze i węzły Zookeeper nie mają bezpośredniego dostępu do internetu. Dostęp do nich można uzyskać z węzłów głównych klastra lub węzłów brzegowych. Poniżej przedstawiono ogólne kroki łączenia się z innymi węzłami:

  1. Użyj protokołu SSH, aby nawiązać połączenie z węzłem głównym lub krawędziowym:

    ssh sshuser@myedge.mycluster-ssh.azurehdinsight.net
    
  2. Z poziomu połączenia SSH z węzłem zarządzającym lub węzłem krawędzi użyj polecenia ssh, aby nawiązać połączenie z węzłem roboczym w klastrze:

    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 bezpośredniego uzyskiwania dostępu do wszystkich węzłów w klastrze jest zainstalowanie usługi HDInsight w usłudze Azure Virtual Network. Następnie możesz dołączyć maszynę zdalną do tej samej sieci wirtualnej i uzyskać bezpośredni dostęp do wszystkich węzłów w klastrze.

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

Skonfiguruj przekazywanie agenta SSH

Ważne

Poniższe kroki zakładają użycie systemu Linux lub UNIX oraz możliwość pracy z powłoką Bash w systemie Windows 10. Jeśli te kroki nie działają w systemie, może być konieczne zapoznanie się z dokumentacją 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
    

    Zastąp informacje o hoście adresem węzła, z którym nawiązujesz połączenie przy użyciu protokołu SSH. W poprzednim przykładzie użyto węzła krawędzi. Ten wpis konfiguruje przekazywanie agenta SSH dla określonego węzła.

  3. Przetestuj przekazywanie agenta SSH przy użyciu następującego polecenia z poziomu terminalu:

    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 ciąg ścieżką do pliku.

  5. Połącz się z węzłem krawędzi klastra lub węzłami głównymi przy użyciu protokołu SSH. Następnie użyj polecenia SSH, aby nawiązać połączenie z węzłem roboczym lub węzłem Zookeeper. Połączenie jest ustanawiane przy użyciu klucza przekazanego.

Następne kroki