Łą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:
Klient OpenSSH. Ten klient jest opcjonalną funkcją wprowadzoną w aktualizacji Windows 10 Fall Creators Update.
Usługa Azure Cloud Shell. Usługa Cloud Shell udostępnia środowisko powłoki Bash w przeglądarce.
Git.
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ładssh -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. |
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. |
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
, gdzieclustername
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
, gdzieedgenodename
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:
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
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.
Za pomocą edytora tekstów otwórz plik
~/.ssh/config
. Jeśli ten plik nie istnieje, możesz go utworzyć, wprowadzając polecenietouch ~/.ssh/config
w wierszu polecenia.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.
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.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.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
- Use SSH tunneling with HDInsight (Używanie tunelowania SSH z usługą HDInsight)
- Use edge nodes in HDInsight (Używanie węzłów krawędzi w usłudze HDInsight)
- Korzystanie z usługi SCP w usłudze HDInsight