使用 SSH 連線到 HDInsight (Apache Hadoop)

瞭解如何使用 安全殼層 (SSH) 安全地連線到 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 使用:

也有數個圖形化 SSH 用戶端,例如 PuTTYMobaXterm。 雖然這些用戶端可以用來連線到 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 工作階段時自動選取要使用的金鑰。

重要

如果您使用複雜密碼保護私鑰,則必須在使用金鑰時輸入複雜密碼。 之類的 ssh-agent 公用程式可以快取密碼,以方便您使用。

建立 SSH 金鑰組

ssh-keygen使用 命令來建立公用和私鑰檔案。 下列命令會產生可與 HDInsight 搭配使用的 2048 位 RSA 金鑰組:

ssh-keygen -t rsa -b 2048

系統會在金鑰建立程式期間提示您輸入資訊。 例如,儲存金鑰的位置,還是要使用複雜密碼。 程式完成之後,會建立兩個檔案;公鑰和私鑰。

  • 公鑰是用來建立 HDInsight 叢集。 公鑰的延伸名為 .pub

  • 私鑰可用來向 HDInsight 叢集驗證您的用戶端。

重要

您可以使用複雜密碼保護您的金鑰。 複雜密碼實際上是私鑰的密碼。 即使有人取得您的私鑰,他們也必須有複雜密碼才能使用密鑰。

使用公鑰建立 HDInsight

建立方法 如何使用公鑰
Azure 入口網站 取消核取 [使用 SSH 的叢集登入密碼],然後選取 [公鑰 ] 作為 SSH 驗證類型。 最後,選取公鑰檔案,或在 [SSH 公鑰] 字段中貼上檔案的文字內容。
SSH public key dialog in HDInsight cluster creation.
Azure PowerShell -SshPublicKey使用 New-AzHdinsightCluster Cmdlet 的參數,並將公鑰的內容當做字串傳遞。
Azure CLI --sshPublicKey使用 命令的 az hdinsight create 參數,並將公鑰的內容傳遞為字串。
Resource Manager 範本 如需搭配範本使用SSH金鑰的範例,請參閱 使用SSH 金鑰在Linux上部署 HDInsight。 publicKeys azuredeploy.json 檔案中的 元素可用來在建立叢集時將密鑰傳遞至 Azure。

驗證:密碼

SSH 帳戶可以使用密碼來保護。 當您使用 SSH 連線到 HDInsight 時,系統會提示您輸入密碼。

警告

Microsoft 不建議使用 SSH 的密碼驗證。 密碼可以猜測,而且容易受到暴力密碼破解攻擊。 相反地,我們建議您使用 SSH 金鑰進行驗證

重要

SSH 帳戶密碼會在 HDInsight 叢集建立後 70 天到期。 如果密碼到期,您可以使用管理 HDInsight 文件中的資訊來變更密碼。

使用密碼建立 HDInsight

建立方法 如何指定密碼
Azure 入口網站 根據預設,SSH 使用者帳戶的密碼與叢集登入帳戶相同。 若要使用不同的密碼,請取消核取 [使用 SSH 的叢集登入密碼],然後在 [SSH 密碼] 字段中輸入密碼
SSH password dialog in HDInsight cluster creation.
Azure PowerShell --SshCredential使用 New-AzHdinsightCluster Cmdlet 的參數,並傳遞PSCredential包含 SSH 使用者帳戶名稱和密碼的物件。
Azure CLI --ssh-password使用 命令的 az hdinsight create 參數,並提供密碼值。
Resource Manager 範本 如需搭配範本使用密碼的範例,請參閱 使用 SSH 密碼在 Linux 上部署 HDInsight。 linuxOperatingSystemProfileazuredeploy.json檔案中的元素會在建立叢集時,用來將 SSH 帳戶名稱和密碼傳遞至 Azure。

變更 SSH 密碼

如需變更 SSH 使用者帳戶密碼的詳細資訊,請參閱管理 HDInsight 檔的變更密碼一節

已加入驗證網域的 HDInsight

如果您使用 已加入網域的 HDInsight 叢集,您必須在與 SSH 本機用戶連線之後使用 kinit 命令。 此命令會提示您輸入網域用戶和密碼,並使用與叢集相關聯的 Microsoft Entra 網域驗證您的會話。

您也可以使用網域帳戶,在每個已加入網域的節點上啟用 Kerberos 驗證(例如前端節點、邊緣節點)。 若要執行此動作,請編輯 sshd 組態檔:

sudo vi /etc/ssh/sshd_config

取消批注並變更 KerberosAuthenticationyes

sudo service sshd restart

使用 klist 命令來驗證 Kerberos 驗證是否成功。

如需詳細資訊,請參閱 設定已加入網域的 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
    

重要

上述範例假設您使用密碼驗證,或憑證驗證會自動發生。 如果您使用 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 轉送。

注意

直接存取叢集中所有節點的另一種方式是將 HDInsight 安裝到 Azure 虛擬網絡。 然後,您可以將遠端電腦加入相同的虛擬網路,並直接存取叢集中的所有節點。

如需詳細資訊,請參閱 規劃 HDInsight 的虛擬網路。

設定 SSH 代理程式轉送

重要

下列步驟假設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 節點。 線上是使用轉送金鑰建立的。

下一步