Compatibilidad con SSH para Azure App Service en LinuxSSH support for Azure App Service on Linux

Secure Shell (SSH) se suele utilizar para ejecutar comandos administrativos de forma remota desde un terminal de línea de comandos.Secure Shell (SSH) is commonly used to execute administrative commands remotely from a command-line terminal. App Service en Linux proporciona compatibilidad con SSH en el contenedor de la aplicación para todas las imágenes de Docker integradas que se usan para la pila en tiempo de ejecución de nuevas aplicaciones web.App Service on Linux provides SSH support into the app container with each of the built-in Docker images used for the Runtime Stack of new web apps.

Pilas en tiempo de ejecución

Para imágenes personalizadas de Docker, mediante la configuración del servidor SSH de la imagen personalizada.For custom Docker images, by configuring SSH server in your custom image.

También puede conectarse al contenedor directamente desde la máquina de desarrollo local mediante SSH y SFTP.You can also connect to the container directly from your local development machine using SSH and SFTP.

Abrir sesión SSH en el exploradorOpen SSH session in browser

Para realizar una conexión de cliente SSH con el contenedor, la aplicación debe estar en ejecución.To make an SSH client connection with your container, your app should be running.

Pegue la siguiente dirección URL en el explorador y reemplace <app_name> por el nombre de la aplicación:Paste the following URL into your browser and replace <app_name> with your app name:

https://<app_name>.scm.azurewebsites.net/webssh/host

Si no lo está ya, será necesario que se autentique con su suscripción a Azure para poder conectarse.If you are not already authenticated, you are required to authenticate with your Azure subscription to connect. Una vez autenticado, verá un shell del explorador en el que puede ejecutar comandos dentro del contenedor.Once authenticated, you see an in-browser shell, where you can run commands inside your container.

Conexión SSH

Uso de la compatibilidad con SSH para imágenes personalizadas de DockerUse SSH support with custom Docker images

Para que una imagen personalizada de Docker admita la comunicación mediante SSH entre el contenedor y el cliente de Azure Portal, realice los siguientes pasos para su imagen de Docker.In order for a custom Docker image to support SSH communication between the container and the client in the Azure portal, perform the following steps for your Docker image.

Estos pasos se indican en el repositorio de Azure App Service, como un ejemplo.These steps are shown in the Azure App Service repository as an example.

  1. Incluya la instalación openssh-server en la instrucción RUN del Dockerfile de la imagen y establezca la contraseña de la cuenta raíz a "Docker!".Include the openssh-server installation in RUN instruction in the Dockerfile for your image and set the password for the root account to "Docker!".

    Nota

    Esta configuración no permite realizar conexiones externas al contenedor.This configuration does not allow external connections to the container. Solo es posible acceder a SSH a través del sitio de Kudu o SCM, que se autentica con las credenciales de publicación.SSH can only be accessed via the Kudu / SCM Site, which is authenticated using the publishing credentials.

    # ------------------------
    # SSH Server support
    # ------------------------
    RUN apt-get update \
        && apt-get install -y --no-install-recommends openssh-server \
        && echo "root:Docker!" | chpasswd
    
  2. Agregue una instrucción COPY al Dockerfile para copiar un archivo sshd_config en el directorio /etc/ssh/.Add a COPY instruction to the Dockerfile to copy a sshd_config file to the /etc/ssh/ directory. Su archivo de configuración debería basarse en nuestro archivo sshd_config del repositorio de GitHub de Azure App Service, localizable aquí.Your configuration file should be based on the sshd_config file in the Azure-App-Service GitHub repository here.

    Nota

    El archivo sshd_config debe incluir los siguientes elementos o se producirá un error de conexión:The sshd_config file must include the following or the connection fails:

    • Ciphers debe incluir al menos uno de los siguientes elementos: aes128-cbc,3des-cbc,aes256-cbc.Ciphers must include at least one of the following: aes128-cbc,3des-cbc,aes256-cbc.
    • MACs debe incluir al menos uno de los siguientes elementos: hmac-sha1,hmac-sha1-96.MACs must include at least one of the following: hmac-sha1,hmac-sha1-96.
    COPY sshd_config /etc/ssh/
    
  3. Incluya el puerto 2222 en la instrucción EXPOSE del Dockerfile.Include port 2222 in the EXPOSE instruction for the Dockerfile. Aunque se conozca la contraseña raíz, no es posible acceder al puerto 2222 desde Internet.Although the root password is known, port 2222 cannot be accessed from the internet. Se trata de un puerto interno exclusivo al que solo pueden acceder los contenedores que se encuentren en el puente de una red privada virtual.It is an internal only port accessible only by containers within the bridge network of a private virtual network.

    EXPOSE 2222 80
    
  4. No olvide iniciar el servicio SSH mediante un script de shell (vea el ejemplo en init_container.sh).Make sure to start the SSH service using a shell script (see example at init_container.sh).

    #!/bin/bash
    service ssh start
    

El Dockerfile usa la instrucción ENTRYPOINT para ejecutar el script.The Dockerfile uses the ENTRYPOINT instruction to run the script.

```docker
COPY startup /opt/startup
...
RUN chmod 755 /opt/startup/init_container.sh
...
ENTRYPOINT ["/opt/startup/init_container.sh"]
```

Abrir sesión SSH desde un shell remotoOpen SSH session from remote shell

Nota

Esta característica está actualmente en versión preliminar.This feature is currently in Preview.

Mediante la tunelización TCP puede crear una conexión de red entre la máquina de desarrollo y Web App for Containers a través de una conexión de WebSocket autenticada.Using TCP tunneling you can create a network connection between your development machine and Web App for Containers over an authenticated WebSocket connection. Permite abrir una sesión SSH con el contenedor que se ejecuta en App Service desde el cliente de su elección.It enables you to open an SSH session with your container running in App Service from the client of your choice.

Para empezar, es preciso instalar la CLI de Azure.To get started, you need to install Azure CLI. Para ver cómo funciona sin instalar la CLI de Azure, abra Azure Cloud Shell.To see how it works without installing Azure CLI, open Azure Cloud Shell.

Agregue la extensión de App Service más reciente ejecutando az extension add:Add the latest App Service extension by running az extension add:

az extension add --name webapp

Si ya ha ejecutado az extension add antes, ejecute az extension update en su lugar:If you've already run az extension add before, run az extension update instead:

az extension update --name webapp

Abra una conexión remota a la aplicación mediante el comando az webapp remote-connection create.Open a remote connection to your app using the az webapp remote-connection create command. Especifique <group_name> y _<app_name> para la aplicación y sustituya <port> por un número de puerto local.Specify <group_name> and \<app_name>_ for your app, and replace <port> with a local port number.

az webapp remote-connection create --resource-group <group_name> -n <app_name> -p <port> &

Sugerencia

El & al final del comando es solo para su comodidad si usa Cloud Shell.& at the end of the command is just for convenience if you are using Cloud Shell. El proceso se ejecuta en segundo plano, por lo que puede ejecutar el siguiente comando en el mismo shell.It runs the process in the background so that you can run the next command in the same shell.

La salida del comando le ofrece la información necesaria para abrir una sesión SSH.The command output gives you the information you need to open an SSH session.

Port 21382 is open
SSH is available { username: root, password: Docker! }
Start your favorite client and connect to port 21382

Abra una sesión SSH con el contenedor con el cliente de su elección mediante el puerto local.Open an SSH session with your container with the client of your choice, using the local port. En el ejemplo siguiente se utiliza el comando ssh predeterminado:The following example uses the default ssh command:

ssh root@127.0.0.1 -p <port>

Cuando se solicite, escriba yes para continuar con la conexión.When being prompted, type yes to continue connecting. Se le pedirá la contraseña.You are then prompted for the password. Use Docker!, que ya apareció anteriormente.Use Docker!, which was shown to you earlier.

Warning: Permanently added '[127.0.0.1]:21382' (ECDSA) to the list of known hosts.
root@127.0.0.1's password:

Una vez autenticado, debería ver la pantalla de inicio de sesión.Once you're authenticated, you should see the session welcome screen.

  _____
  /  _  \ __________ _________   ____
 /  /_\  \___   /  |  \_  __ \_/ __ \
/    |    \/    /|  |  /|  | \/\  ___/
\____|__  /_____ \____/ |__|    \___  >
        \/      \/                  \/
A P P   S E R V I C E   O N   L I N U X

0e690efa93e2:~#

Ahora está conectado a su conector.You are now connected to your connector.

Intente ejecutar el comandotop.Try running the top command. Debe poder ver el proceso de la aplicación en la lista de procesos.You should be able to see your app's process in the process list. En la salida del ejemplo siguiente, es el marcado con PID 263.In the example output below, it's the one with PID 263.

Mem: 1578756K used, 127032K free, 8744K shrd, 201592K buff, 341348K cached
CPU:   3% usr   3% sys   0% nic  92% idle   0% io   0% irq   0% sirq
Load average: 0.07 0.04 0.08 4/765 45738
  PID  PPID USER     STAT   VSZ %VSZ CPU %CPU COMMAND
    1     0 root     S     1528   0%   0   0% /sbin/init
  235     1 root     S     632m  38%   0   0% PM2 v2.10.3: God Daemon (/root/.pm2)
  263   235 root     S     630m  38%   0   0% node /home/site/wwwroot/app.js
  482   291 root     S     7368   0%   0   0% sshd: root@pts/0
45513   291 root     S     7356   0%   0   0% sshd: root@pts/1
  291     1 root     S     7324   0%   0   0% /usr/sbin/sshd
  490   482 root     S     1540   0%   0   0% -ash
45539 45513 root     S     1540   0%   0   0% -ash
45678 45539 root     R     1536   0%   0   0% top
45733     1 root     Z        0   0%   0   0% [init]
45734     1 root     Z        0   0%   0   0% [init]
45735     1 root     Z        0   0%   0   0% [init]
45736     1 root     Z        0   0%   0   0% [init]
45737     1 root     Z        0   0%   0   0% [init]
45738     1 root     Z        0   0%   0   0% [init]

Pasos siguientesNext steps

Puede publicar preguntas y problemas en el foro de Azure.You can post questions and concerns on the Azure forum.

Para obtener más información sobre Web App for Containers, vea:For more information on Web App for Containers, see: