Conexión a HDInsight (Apache Hadoop) mediante SSHConnect to HDInsight (Apache Hadoop) using SSH

Aprenda a usar Secure Shell (SSH) para conectarse de forma segura a Apache Hadoop en Azure HDInsight.Learn how to use Secure Shell (SSH) to securely connect to Apache Hadoop on Azure HDInsight. Para obtener información acerca de cómo conectarse a través de una red virtual, consulte Arquitectura de red virtual de Azure HDInsight y Planeamiento de la implementación de una red virtual para clústeres de Azure HDInsight.For information on connecting through a virtual network, see Azure HDInsight virtual network architecture and Plan a virtual network deployment for Azure HDInsight clusters.

La tabla siguiente contiene la información de dirección y puerto necesaria para conectarse a HDInsight a través de un cliente SSH:The following table contains the address and port information needed when connecting to HDInsight using an SSH client:

DirecciónAddress PortPort Se conecta a...Connects to...
<clustername>-ssh.azurehdinsight.net 2222 Nodo principal primarioPrimary headnode
<clustername>-ssh.azurehdinsight.net 2323 Nodo principal secundarioSecondary headnode
<clustername>-ed-ssh.azurehdinsight.net 2222 Nodo perimetral (Machine Learning Services en HDInsight)Edge node (ML Services on HDInsight)
<edgenodename>.<clustername>-ssh.azurehdinsight.net 2222 Nodo perimetral (cualquier otro tipo de clúster, si existe un nodo perimetral)Edge node (any other cluster type, if an edge node exists)

Reemplace <clustername> por el nombre del clúster.Replace <clustername> with the name of your cluster. Reemplace <edgenodename> con el nombre del nodo perimetral.Replace <edgenodename> with the name of the edge node.

Si el clúster contiene un nodo perimetral, se recomienda que siempre se conecte al nodo perimetral mediante SSH.If your cluster contains an edge node, we recommend that you always connect to the edge node using SSH. Los nodos principales hospedan servicios que son críticos para el estado de Hadoop.The head nodes host services that are critical to the health of Hadoop. El nodo perimetral ejecuta solo lo que incluya en él.The edge node runs only what you put on it. Para más información, consulte Uso de nodos perimetrales en HDInsight.For more information on using edge nodes, see Use edge nodes in HDInsight.

Sugerencia

Cuando se conecte por primera vez a HDInsight, el cliente SSH puede mostrar una advertencia de que no se puede establecer la autenticidad del host.When you first connect to HDInsight, your SSH client may display a warning that the authenticity of the host can't be established. Cuando se le pida, seleccione "sí" para agregar el host a la lista de servidores de confianza de su cliente SSH.When prompted select 'yes' to add the host to your SSH client's trusted server list.

Si se ha conectado anteriormente a un servidor con el mismo nombre, puede recibir una advertencia de que la clave del host almacenada no coincide con la del servidor.If you have previously connected to a server with the same name, you may receive a warning that the stored host key does not match the host key of the server. Consulte la documentación del cliente SSH sobre cómo el nombre del servidor existente.Consult the documentation for your SSH client on how to remove the existing entry for the server name.

Clientes SSHSSH clients

Los sistemas Linux, Unix y macOS proporcionan los comandos ssh y scp.Linux, Unix, and macOS systems provide the ssh and scp commands. El cliente ssh se usa normalmente para crear una sesión de línea de comandos remota con un sistema basado en Unix o Linux.The ssh client is commonly used to create a remote command-line session with a Linux or Unix-based system. El cliente scp se usa para copiar archivos entre el cliente y el sistema remoto de forma segura.The scp client is used to securely copy files between your client and the remote system.

Microsoft Windows no instala clientes SSH de forma predeterminada.Microsoft Windows does not install any SSH clients by default. Los clientes ssh y scp están disponibles para Windows a través de los siguientes paquetes:The ssh and scp clients are available for Windows through the following packages:

También hay varios clientes SSH gráficos, como PuTTY y MobaXterm.There are also several graphical SSH clients, such as PuTTY and MobaXterm. Aunque estos clientes se pueden usar para conectar con HDInsight, el proceso de conexión es diferente a usar la utilidad ssh.While these clients can be used to connect to HDInsight, the process of connecting is different than using the ssh utility. Para más información, consulte la documentación del cliente gráfico que esté usando.For more information, see the documentation of the graphical client you are using.

Autenticación: Claves SSHAuthentication: SSH Keys

Las claves SSH utilizan criptografía de clave pública para autenticar las sesiones de SSH.SSH keys use public-key cryptography to authenticate SSH sessions. Las claves SSH son más seguras que las contraseñas y proporcionan una manera fácil para proteger el acceso al clúster de Hadoop.SSH keys are more secure than passwords, and provide an easy way to secure access to your Hadoop cluster.

Si su cuenta SSH se protege utilizando una clave, el cliente tiene que proporcionar la clave privada correspondiente al conectarse:If your SSH account is secured using a key, the client must provide the matching private key when you connect:

  • La mayoría de los clientes pueden configurarse para utilizar una clave predeterminada.Most clients can be configured to use a default key. Por ejemplo, el cliente ssh busca una clave privada en ~/.ssh/id_rsa en entornos Linux y Unix.For example, the ssh client looks for a private key at ~/.ssh/id_rsa on Linux and Unix environments.

  • Puede especificar la ruta de acceso a una clave privada.You can specify the path to a private key. Con el cliente ssh, el parámetro -i se utiliza para especificar la ruta de acceso a la clave privada.With the ssh client, the -i parameter is used to specify the path to private key. Por ejemplo, ssh -i ~/.ssh/id_rsa sshuser@myedge.mycluster-ssh.azurehdinsight.net.For example, ssh -i ~/.ssh/id_rsa sshuser@myedge.mycluster-ssh.azurehdinsight.net.

  • Si tiene varias claves privadas para su uso con distintos servidores, considere la posibilidad de usar una utilidad como ssh-agent (https://en.wikipedia.org/wiki/Ssh-agent).If you have multiple private keys for use with different servers, consider using a utility such as ssh-agent (https://en.wikipedia.org/wiki/Ssh-agent). La utilidad ssh-agent se puede usar para seleccionar automáticamente la clave que se usará al establecer una sesión de SSH.The ssh-agent utility can be used to automatically select the key to use when establishing an SSH session.

Importante

Si se protege la clave privada con una frase de contraseña, tiene que escribir la frase de contraseña cuando se use la clave.If you secure your private key with a passphrase, you must enter the passphrase when using the key. Utilidades como ssh-agent puede almacenar en caché la contraseña para su comodidad.Utilities such as ssh-agent can cache the password for your convenience.

Creación de un par de claves SSHCreate an SSH key pair

Use el comando ssh-keygen para crear archivos de clave pública y privada.Use the ssh-keygen command to create public and private key files. El comando siguiente genera un par de claves de RSA de 2048 bits que puede utilizarse con HDInsight:The following command generates a 2048-bit RSA key pair that can be used with HDInsight:

ssh-keygen -t rsa -b 2048

Se le pedirá información durante el proceso de creación de claves.You are prompted for information during the key creation process. Por ejemplo, dónde se almacenan las claves o si se debe usar una frase de contraseña.For example, where the keys are stored or whether to use a passphrase. Una vez completado el proceso, se crean dos archivos: una clave pública y una clave privada.After the process completes, two files are created; a public key and a private key.

  • La clave pública se utiliza para crear un clúster de HDInsight.The public key is used to create an HDInsight cluster. La clave pública tiene una extensión .pub.The public key has an extension of .pub.

  • La clave privada se utiliza para autenticar el cliente al clúster de HDInsight.The private key is used to authenticate your client to the HDInsight cluster.

Importante

Puede proteger las claves con una frase de contraseña.You can secure your keys using a passphrase. Una frase de contraseña es efectivamente una contraseña de la clave privada.A passphrase is effectively a password on your private key. Incluso si alguien obtiene la clave privada, tienen que tener la frase de contraseña para poder usar la clave.Even if someone obtains your private key, they must have the passphrase to use the key.

Creación de HDInsight usando la clave públicaCreate HDInsight using the public key

Método de creaciónCreation method Cómo usar la clave públicaHow to use the public key
Portal de AzureAzure portal Desactive la opción __Utilizar la misma contraseña que en el inicio de sesión del clúster__y, a continuación, seleccione Clave pública como el tipo de autenticación de SSH.Uncheck Use same password as cluster login, and then select Public Key as the SSH authentication type. Por último, seleccione el archivo de clave pública o pegue el contenido de texto del archivo en el campo Clave pública SSH.Finally, select the public key file or paste the text contents of the file in the SSH public key field.
Cuadro de diálogo de clave pública SSH en la creación de clústeres de HDInsightSSH public key dialog in HDInsight cluster creation
Azure PowerShellAzure PowerShell Use el parámetro -SshPublicKey del cmdlet New-AzHdinsightCluster y pase el contenido de la clave pública como una cadena.Use the -SshPublicKey parameter of the New-AzHdinsightCluster cmdlet and pass the contents of the public key as a string.
CLI de AzureAzure CLI Use el parámetro --sshPublicKey del comando az hdinsight create y pase el contenido de la clave pública como una cadena.Use the --sshPublicKey parameter of the az hdinsight create command and pass the contents of the public key as a string.
Plantilla de Resource ManagerResource Manager Template Para obtener un ejemplo del uso de claves SSH con una plantilla, consulte la implementación de HDInsight en Linux con una clave SSH.For an example of using SSH keys with a template, see Deploy HDInsight on Linux with SSH key. El elemento publicKeys en el archivo azuredeploy.json se usa para pasar las claves a Azure al crear el clúster.The publicKeys element in the azuredeploy.json file is used to pass the keys to Azure when creating the cluster.

Autenticación: ContraseñaAuthentication: Password

Las cuentas SSH se pueden proteger mediante una contraseña.SSH accounts can be secured using a password. Cuando se conecta a HDInsight usando SSH, se le pedirá que escriba la contraseña.When you connect to HDInsight using SSH, you are prompted to enter the password.

Advertencia

Microsoft no recomienda usar la autenticación de contraseña para SSH.Microsoft does not recommend using password authentication for SSH. Las contraseñas se pueden adivinar y son vulnerables a ataques por fuerza bruta.Passwords can be guessed and are vulnerable to brute force attacks. En su lugar, recomendamos que use claves SSH para la autenticación.Instead, we recommend that you use SSH keys for authentication.

Importante

La contraseña de la cuenta SSH expira 70 días después de crear el clúster de HDInsight.The SSH account password expires 70 days after the HDInsight cluster is created. Si la contraseña expira, se puede cambiar con la información del documento sobre la administración de HDInsight.If your password expires, you can change it using the information in the Manage HDInsight document.

Creación de HDInsight usando una contraseñaCreate HDInsight using a password

Método de creaciónCreation method Cómo especificar la contraseñaHow to specify the password
Portal de AzureAzure portal De forma predeterminada, la cuenta de usuario SSH tiene la misma contraseña que la cuenta de inicio de sesión de clúster.By default, the SSH user account has the same password as the cluster login account. Para usar una contraseña diferente, desactive la opción __Utilizar la misma contraseña que en el inicio de sesión del clúster__y, a continuación, escriba la contraseña en el campo Contraseña SSH.To use a different password, uncheck Use same password as cluster login, and then enter the password in the SSH password field.
Cuadro de diálogo de contraseña SSH en la creación de clústeres de HDInsightSSH password dialog in HDInsight cluster creation
Azure PowerShellAzure PowerShell Use el parámetro --SshCredential del cmdlet New-AzHdinsightCluster y pase un objeto PSCredential que contenga el nombre de cuenta de usuario SSH y la contraseña.Use the --SshCredential parameter of the New-AzHdinsightCluster cmdlet and pass a PSCredential object that contains the SSH user account name and password.
CLI de AzureAzure CLI Use el parámetro --sshPassword del comando az hdinsight create y proporcione el valor de contraseña.Use the --sshPassword parameter of the az hdinsight create command and provide the password value.
Plantilla de Resource ManagerResource Manager Template Para obtener un ejemplo del uso de contraseña con una plantilla, consulte la implementación de HDInsight en Linux con una contraseña SSH.For an example of using a password with a template, see Deploy HDInsight on Linux with SSH password. El elemento linuxOperatingSystemProfile en el archivo azuredeploy.json se usa para pasar el nombre de cuenta de SSH y la contraseña a Azure al crear el clúster.The linuxOperatingSystemProfile element in the azuredeploy.json file is used to pass the SSH account name and password to Azure when creating the cluster.

Cambio de contraseña de SSHChange the SSH password

Para información acerca de cómo cambiar la contraseña de cuenta de usuario SSH, consulte la sección Cambio de contraseñas del documento sobre administración de HDInsight.For information on changing the SSH user account password, see the Change passwords section of the Manage HDInsight document.

Autenticación: HDInsight unido a un dominioAuthentication: Domain-joined HDInsight

Si está usando un clúster de HDInsight unido a un dominio, tiene que utilizar el comando kinit después de conectarse con el usuario local de SSH.If you are using a domain-joined HDInsight cluster, you must use the kinit command after connecting with SSH local user. Este comando le pide un usuario de dominio y una contraseña y autentica la sesión con el dominio de Azure Active Directory asociado con el clúster.This command prompts you for a domain user and password, and authenticates your session with the Azure Active Directory domain associated with the cluster.

También puede habilitar la autenticación Kerberos en cada nodo unido a un dominio (por ejemplo, nodo principal, nodo perimetral) para realizar un ssh mediante la cuenta de dominio.You can also enable Kerberos Authentication on each domain joined node (for example, head node, edge node) in order to ssh using the domain account. Para ello, edite el archivo de configuración de sshd:To do this edit sshd config file:

sudo vi /etc/ssh/sshd_config

Quite los comentarios y cambie KerberosAuthentication a yesuncomment and change KerberosAuthentication to yes

sudo service sshd restart

En cualquier momento, para verificar si la autenticación de Kerberos se ha realizado correctamente, utilice el comando klist.At any time, in order to verify whether the Kerberos authentication was successful or not, use klist command.

Para más información, consulte Configuración de clústeres de HDInsight unidos a un dominio.For more information, see Configure domain-joined HDInsight.

Conexión a nodosConnect to nodes

Los nodos principales y el nodo perimetral (si hay alguno) son accesibles a través de Internet en los puertos 22 y 23.The head nodes and edge node (if there is one) can be accessed over the internet on ports 22 and 23.

  • Cuando se conecte a los nodos principales, use el puerto 22 para conectarse al nodo principal primario y el puerto 23 para conectarse al nodo principal secundario.When connecting to the head nodes, use port 22 to connect to the primary head node and port 23 to connect to the secondary head node. El nombre de dominio completo que se debe usar es clustername-ssh.azurehdinsight.net, donde clustername es el nombre del clúster.The fully qualified domain name to use is clustername-ssh.azurehdinsight.net, where clustername is the name of your cluster.

    # 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
    
  • Al conectarse al nodo perimetral, utilice el puerto 22.When connecting to the edge node, use port 22. El nombre de dominio completo es edgenodename.clustername-ssh.azurehdinsight.net, donde edgenodename es el nombre que proporcionó al crear el nodo perimetral.The fully qualified domain name is edgenodename.clustername-ssh.azurehdinsight.net, where edgenodename is a name you provided when creating the edge node. clustername es el nombre del clúster.clustername is the name of the cluster.

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

Importante

En los ejemplos anteriores se supone que está usando la autenticación con contraseña, o que la autenticación de certificados se está produciendo automáticamente.The previous examples assume that you are using password authentication, or that certificate authentication is occurring automatically. Si usa un par de claves SSH para la autenticación y el certificado no se utiliza automáticamente, use el parámetro -i para especificar la clave privada.If you use an SSH key-pair for authentication, and the certificate is not used automatically, use the -i parameter to specify the private key. Por ejemplo, ssh -i ~/.ssh/mykey sshuser@clustername-ssh.azurehdinsight.net.For example, ssh -i ~/.ssh/mykey sshuser@clustername-ssh.azurehdinsight.net.

Una vez conectado, el símbolo del sistema cambia para indicar el nombre de usuario SSH y el nodo al que está conectado.Once connected, the prompt changes to indicate the SSH user name and the node you are connected to. Por ejemplo, cuando se conecta al nodo principal primario como sshuser, el símbolo del sistema es sshuser@hn0-clustername:~$.For example, when connected to the primary head node as sshuser, the prompt is sshuser@hn0-clustername:~$.

Conexión a los nodos de Apache Zookeeper y de trabajoConnect to worker and Apache Zookeeper nodes

Los nodos de trabajo y los nodos de Zookeeper no son directamente accesibles desde Internet.The worker nodes and Zookeeper nodes are not directly accessible from the internet. Solo se puede acceder a ellos desde los nodos principales y perimetrales del clúster.They can be accessed from the cluster head nodes or edge nodes. Estos son los pasos generales para conectarse a otros nodos:The following are the general steps to connect to other nodes:

  1. Use SSH para conectarse al nodo principal o perimetral:Use SSH to connect to a head or edge node:

     ssh sshuser@myedge.mycluster-ssh.azurehdinsight.net
    
  2. En la conexión SSH con el nodo principal o perimetral, use el comando ssh para conectarse a un nodo de trabajador en el clúster:From the SSH connection to the head or edge node, use the ssh command to connect to a worker node in the cluster:

     ```bash
     ssh sshuser@wn0-myhdi
     ```
    

    Para recuperar una lista de los nombres de nodos, consulte el documento Administración de HDInsight con la API REST de Apache Ambari.To retrieve a list of the node names, see the Manage HDInsight by using the Apache Ambari REST API document.

Si la cuenta SSH se protege utilizando un contraseña, escriba la contraseña al conectarse.If the SSH account is secured using a password, enter the password when connecting.

Si la cuenta SSH se protege utilizando claves SSH, asegúrese de que el reenvío de SSH está habilitado en el cliente.If the SSH account is secured using SSH keys, make sure that SSH forwarding is enabled on the client.

Nota

Otra manera de obtener acceso directo a todos los nodos del clúster es instalar HDInsight en una instancia de Azure Virtual Network.Another way to directly access all nodes in the cluster is to install HDInsight into an Azure Virtual Network. A continuación, puede unir la máquina remota a la misma red virtual y tener acceso directamente a todos los nodos del clúster.Then, you can join your remote machine to the same virtual network and directly access all nodes in the cluster.

Para más información, consulte Planeamiento de una red virtual para HDInsight.For more information, see Plan a virtual network for HDInsight.

Configuración del reenvío del agente SSHConfigure SSH agent forwarding

Importante

Los pasos siguientes presuponen un sistema basado en Linux o UNIX y funcionan con Bash en Windows 10.The following steps assume a Linux or UNIX-based system, and work with Bash on Windows 10. Si estos pasos no funcionan en su sistema, es posible que deba consultar la documentación para el cliente SSH.If these steps do not work for your system, you may need to consult the documentation for your SSH client.

  1. Abra ~/.ssh/configcon un editor de texto.Using a text editor, open ~/.ssh/config. Si este archivo no existe, puede crearlo si escribe touch ~/.ssh/config en la línea de comandos.If this file doesn't exist, you can create it by entering touch ~/.ssh/config at a command line.

  2. Agregue al archivo config el texto siguiente.Add the following text to the config file.

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

    Reemplace la información de Host con la dirección del nodo al que se conecta a través de SSH.Replace the Host information with the address of the node you connect to using SSH. El ejemplo anterior utiliza el nodo perimetral.The previous example uses the edge node. Esta entrada configura el reenvío del agente SSH para el nodo especificado.This entry configures SSH agent forwarding for the specified node.

  3. Use el siguiente comando desde el terminal para probar el desvío del agente SSH:Test SSH agent forwarding by using the following command from the terminal:

     echo "$SSH_AUTH_SOCK"
    

    Este comando devuelve información similar al texto siguiente:This command returns information similar to the following text:

     /tmp/ssh-rfSUL1ldCldQ/agent.1792
    

    Si no se devuelve nada, ssh-agent no se está ejecutando.If nothing is returned, then ssh-agent is not running. Consulte la información de los scripts de inicio del agente en Using ssh-agent with ssh http://mah.everybody.org/docs/ssh) (Uso de ssh-agent con ssh) o la documentación del cliente SSH para más información.For more information, see the agent startup scripts information at Using ssh-agent with ssh (http://mah.everybody.org/docs/ssh) or consult your SSH client documentation.

  4. Una vez que haya comprobado que ssh-agent está en ejecución, use lo siguiente para agregar la clave privada SSH al agente:Once you have verified that ssh-agent is running, use the following to add your SSH private key to the agent:

     ssh-add ~/.ssh/id_rsa
    

    Si la clave privada está almacenada en un archivo distinto, reemplace ~/.ssh/id_rsa por la ruta de acceso al archivo.If your private key is stored in a different file, replace ~/.ssh/id_rsa with the path to the file.

  5. Conecte con el nodo perimetral o nodos principales del clúster usando SSH.Connect to the cluster edge node or head nodes using SSH. A continuación, use el comando SSH para conectarse a un nodo de trabajo o de zookeeper.Then use the SSH command to connect to a worker or zookeeper node. La conexión se establece mediante la clave reenviada.The connection is established using the forwarded key.

Copiar archivosCopy files

La utilidad scp puede utilizarse para copiar archivos a los nodos individuales del clúster y desde ellos.The scp utility can be used to copy files to and from individual nodes in the cluster. Por ejemplo, el siguiente comando copia el directorio test.txt desde el sistema local en el nodo principal primario:For example, the following command copies the test.txt directory from the local system to the primary head node:

scp test.txt sshuser@clustername-ssh.azurehdinsight.net:

Dado que no se especifica ninguna ruta de acceso después de :, el archivo se coloca en el directorio principal sshuser.Since no path is specified after the :, the file is placed in the sshuser home directory.

En el ejemplo siguiente, se copia el archivo test.txt desde el directorio principal sshuser al nodo principal primario del sistema local:The following example copies the test.txt file from the sshuser home directory on the primary head node to the local system:

scp sshuser@clustername-ssh.azurehdinsight.net:test.txt .

Importante

scp solo puede tener acceso al sistema de archivos de los nodos individuales dentro del clúster.scp can only access the file system of individual nodes within the cluster. No se puede utilizar para acceder a datos en el almacenamiento compatible con HDFS para el clúster.It cannot be used to access data in the HDFS-compatible storage for the cluster.

Use scp cuando necesite cargar un recurso para utilizarse desde una sesión de SSH.Use scp when you need to upload a resource for use from an SSH session. Por ejemplo, cargue un script de Python y, a continuación, ejecútelo desde una sesión de SSH.For example, upload a Python script and then run the script from an SSH session.

Para obtener información sobre cómo cargar directamente los datos en el almacenamiento compatible con HDFS, consulte los siguientes documentos:For information on directly loading data into the HDFS-compatible storage, see the following documents:

Pasos siguientesNext steps