SSH を使用して HDInsight (Apache Hadoop) に接続する
Secure Shell (SSH) を使って Azure HDInsight の Apache Hadoop に安全に接続する方法について説明します。 仮想ネットワークを介した接続については、「Azure HDInsight 仮想ネットワーク アーキテクチャ」を参照してください。 また、Azure HDInsight クラスター用の仮想ネットワークのデプロイ計画に関する記事も参照してください。
次の表に、SSH クライアントを使用して HDInsight に接続する際に必要なアドレスとポートの情報を示します。
Address | Port | 接続先 |
---|---|---|
<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 システムでは、ssh
コマンドと scp
コマンドが用意されています。 ssh
クライアントは、通常、Linux または Unix ベースのシステムとの間にリモートのコマンドライン セッションを作成するために使用します。 scp
クライアントは、クライアントとリモート システムの間でファイルを安全にコピーするために使用します。
Microsoft Windows には、既定では SSH クライアントがインストールされていません。 Windows 用の ssh
クライアントと scp
クライアントは、次の各パッケージで入手できます。
OpenSSH クライアント。 このクライアントは、Windows 10 Fall Creators Update で導入されるオプション機能です。
Azure Cloud Shell。 Cloud Shell は、ブラウザー内で Bash 環境を提供します。
Git.
PuTTY や MobaXterm などのグラフィカルな SSH クライアントもいくつか存在します。 これらのクライアントは HDInsight への接続に使用できますが、接続するプロセスは、ssh
ユーティリティを使用する場合とは異なります。 詳細については、お使いのグラフィカル クライアントに関するドキュメントを参照してください。
認証: SSH キー
SSH キーでは、公開キー暗号化を使用して SSH セッションを認証します。 SSH キーは、パスワードよりも安全性が高く、Hadoop クラスターへのアクセスをセキュリティで保護する簡単な方法を提供します。
SSH アカウントがキーを使用してセキュリティ保護されている場合、クライアントは対応する秘密キーを接続時に提供する必要があります。
ほとんどのクライアントは、既定のキー を使用するように構成できます。 たとえば、Linux 環境または Unix 環境では、
ssh
クライアントは~/.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 で使用できる 2,048 ビットの RSA キー ペアが生成されます。
ssh-keygen -t rsa -b 2048
キーの作成プロセス中には、情報の入力が求められます。 たとえば、キーが格納されている場所や、パスフレーズを使用するかどうかなどです。 プロセスが完了すると、公開キーと秘密キーの 2 つのファイルが作成されます。
公開キー は、HDInsight クラスターの作成に使用します。 公開キーの拡張子は
.pub
です。秘密キー は、HDInsight クラスターでクライアントを認証するために使用します。
重要
キーはパスフレーズを使用してセキュリティ保護することができます。 パスフレーズは実質的には秘密キーのパスワードです。 だれかが秘密キーを入手したとしても、パスフレーズがないと使用できません。
秘密キーを使用して HDInsight を作成する
作成方法 | 公開キーの使用方法 |
---|---|
Azure portal | [SSH のクラスター ログイン パスワードを使用する] チェック ボックスをオフにし、[SSH 認証の種類] で [公開キー] を選択します。 最後に、公開キー ファイルを選択するか、ファイルのテキストの内容を [SSH 公開キー] フィールドに貼り付けます。 |
Azure PowerShell | New-AzHdinsightCluster コマンドレットの -SshPublicKey パラメーターを使用し、公開キーの内容を文字列として渡します。 |
Azure CLI | az hdinsight create コマンドの --sshPublicKey パラメーターを使用し、公開キーの内容を文字列として渡します。 |
Resource Manager テンプレート | テンプレートでの SSH キーの使用例については、SSH キーを使用した Linux での HDInsight のデプロイに関する記事を参照してください。 azuredeploy.json ファイルの publicKeys 要素は、クラスターの作成時にキーを Azure に渡すために使用されます。 |
認証: パスワード
SSH アカウントは、パスワードを使用してセキュリティ保護することができます。 SSH を使用して HDInsight に接続すると、パスワードの入力を求められます。
警告
SSH でパスワード認証を使用することはお勧めしません。 パスワードは推測可能であり、ブルート フォース攻撃に対して脆弱です。 代わりに、SSH キーによる認証を行うことをお勧めします。
重要
SSH アカウントのパスワードは、HDInsight クラスターの作成後 70 日で期限切れになります。 パスワードの期限が切れた場合は、HDInsight の管理に関するドキュメントの情報を使用して変更できます。
パスワードを使用して HDInsight を作成する
作成方法 | パスワードの指定方法 |
---|---|
Azure portal | 既定では、SSH ユーザー アカウントには、クラスター ログイン アカウントと同じパスワードがあります。 別のパスワードを使用するには、[SSH のクラスター ログイン パスワードを使用する] チェック ボックスをオフにし、[SSH パスワード] フィールドにパスワードを入力します。 |
Azure PowerShell | New-AzHdinsightCluster コマンドレットの --SshCredential パラメーターを使用して、SSH ユーザー アカウントの名前とパスワードを含む PSCredential オブジェクトを渡します。 |
Azure CLI | az hdinsight create コマンドの --ssh-password パラメーターを使用して、パスワードの値を提供します。 |
Resource Manager テンプレート | テンプレートを使用したパスワードの使用例については、SSH パスワードを使用した Linux での HDInsight のデプロイに関する記事を参照してください。 azuredeploy.json ファイルの linuxOperatingSystemProfile 要素は、クラスターの作成時に SSH アカウントの名前とパスワードを Azure に渡すために使用されます。 |
SSH パスワードを変更する
SSH ユーザー アカウントのパスワード変更に関する詳細については、HDInsight の管理に関するドキュメントの「パスワードの変更」セクションを参照してください。
認証ドメイン参加済み HDInsight
ドメイン参加済み HDInsight クラスター を使用している場合は、SSH ローカル ユーザーと接続した後で kinit
コマンドを使用する必要があります。 このコマンドを実行すると、ドメイン ユーザーとパスワードの入力が求められ、クラスターに関連付けられた Microsoft Entra ドメインによってセッションが認証されます。
また、ドメイン アカウントを使用して SSH 接続するために、各ドメイン参加済みノード (たとえば、ヘッド ノード、エッジ ノード) で Kerberos 認証を有効にすることができます。 これを行うには、sshd 構成ファイルを編集します。
sudo vi /etc/ssh/sshd_config
コメントを解除し、KerberosAuthentication
を yes
に変更します。
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 ノードには、インターネットから直接アクセスすることはできません。 これらのノードには、クラスターのヘッド ノードまたはエッジ ノードからアクセスできます。 他のノードに接続するための一般的な手順は次のとおりです。
SSH を使用してヘッド ノードまたはエッジ ノードに接続します。
ssh sshuser@myedge.mycluster-ssh.azurehdinsight.net
ヘッド ノードまたはエッジ ノードへの SSH 接続から、
ssh
コマンドを使用してクラスター内のワーカー ノードに接続します。ssh sshuser@wn0-myhdi
ノード名の一覧を取得するには、Apache Ambari REST API を使用した HDInsight の管理に関するページを参照してください。
SSH アカウントが パスワード を使用してセキュリティで保護されている場合は、接続時にパスワードを入力します。
SSH アカウントが SSH キー を使用してセキュリティで保護されている場合は、クライアント側で SSH の転送が有効になっていることを確認します。
注意
別の方法でクラスター内のすべてのノードに直接アクセスするには、Azure 仮想ネットワークに HDInsight をインストールします。 次に、リモート マシンを同じ仮想ネットワーク内に参加させることで、クラスター内のすべてのノードに直接アクセスできます。
詳細については、「Plan a virtual network for HDInsight」 (HDInsight 用の仮想ネットワークの計画) を参照してください。
SSH エージェント転送を構成する
重要
次の手順では、Linux または UNIX ベースのシステムを想定して Bash on Windows 10 を使用します。 次の手順をお使いのシステムで利用できない場合は、必要に応じて SSH クライアントのドキュメントを参照してください。
テキスト エディターを使用して
~/.ssh/config
を開きます。 このファイルが存在しない場合は、コマンド ラインで「touch ~/.ssh/config
」と入力して作成できます。config
ファイルに次のテキストを追加します。Host <edgenodename>.<clustername>-ssh.azurehdinsight.net ForwardAgent yes
Host 情報を、SSH での接続先となるノードのアドレスで置き換えます。 前の例ではエッジ ノードを使用しています。 このエントリにより、指定したノード用に SSH エージェント転送が構成されます。
端末から次のコマンドを使用して、SSH エージェント転送をテストします。
echo "$SSH_AUTH_SOCK"
このコマンドでは、次のテキストのような情報が返されます。
/tmp/ssh-rfSUL1ldCldQ/agent.1792
何も返されない場合は、
ssh-agent
が実行されていません。ssh-agent が実行していることを確認したら、次のコマンドを使用して SSH 秘密キーをエージェントに追加します。
ssh-add ~/.ssh/id_rsa
秘密キーを別のファイルに格納している場合は、
~/.ssh/id_rsa
をそのファイルのパスに置き換えます。SSH を使用して、クラスターのエッジ ノードまたはヘッド ノードに接続します。 次に、SSH コマンドを使用して、ワーカー ノードまたは Zookeeper ノードに接続します。 転送されたキーを使用して、接続が確立します。