Conexión al sistema Linux de destino en Visual Studio
La compatibilidad con Linux está disponible en Visual Studio 2017 y versiones posteriores.
Puede configurar un proyecto de Linux que tenga como destino una máquina remota o el subsistema Windows para Linux (WSL). Para las máquinas remotas y para WSL, debe configurar una conexión remota en Visual Studio 2017.
Puede configurar un proyecto de Linux que tenga como destino una máquina remota o el subsistema Windows para Linux (WSL). Para una máquina remota, debe configurar una conexión remota en Visual Studio. Para conectarse a WSL, vaya directamente a la sección Conexión a WSL.
Si se usa una conexión remota, Visual Studio crea proyectos de C++ para Linux en la máquina remota. No importa si es una máquina física, una máquina virtual en la nube o WSL. Para crear el proyecto, Visual Studio copia el código fuente en el equipo Linux remoto. A continuación, el código se compila según la configuración de Visual Studio.
Nota
A partir de Visual Studio 2019, versión 16.5, también se admiten conexiones criptográficas compatibles con el Estándar federal de procesamiento de información (FIPS) 140-2 para sistemas Linux de desarrollo remoto. Para usar una conexión compatible con FIPS, siga los pasos que se describen en Configuración del desarrollo de Linux remoto seguro compatible con FIPS en su lugar.
Configuración del servidor SSH en el sistema remoto
Si ssh
todavía no está configurado y en ejecución en el sistema Linux, siga estos pasos para instalarlo. En los ejemplos de este artículo se usa Ubuntu 18.04 LTS con el servidor OpenSSH, versión7.6. No obstante, las instrucciones deben ser iguales para cualquier distribución que use una versión bastante reciente de OpenSSH.
En el sistema Linux, instale e inicie el servidor OpenSSH:
sudo apt install openssh-server sudo service ssh start
Si quiere que el servidor SSH se inicie automáticamente al arrancar el sistema, habilítelo mediante systemctl:
sudo systemctl enable ssh
Configuración de la conexión remota
En Visual Studio, elija Herramientas > Opciones en la barra de menús para abrir el cuadro de diálogo Opciones. Después, seleccione Multiplataforma > Administrador de conexiones para abrir el cuadro de diálogo Administrador de conexiones.
Si no ha configurado anteriormente una conexión en Visual Studio, al crear el proyecto por primera vez, Visual Studio abre automáticamente el cuadro de diálogo Administrador de conexiones.
En el cuadro de diálogo Administrador de conexiones, elija el botón Agregar para agregar una nueva conexión.
En el panel de opciones, CrossPlatform > C++ > Administrador de conexiones está seleccionado y el botón Agregar está resaltado.
Para editar una conexión existente, elija Editar. En cualquier caso, se muestra la ventana Conectar con el sistema remoto.
En la ventana Conectar al sistema remoto, hay campos para el nombre de host, el puerto, el nombre de usuario, el tipo de autenticación y la contraseña. El puerto se establece en 22. El tipo de autenticación se establece en "Contraseña".
Especifique la siguiente información:
Entrada Descripción Nombre de host Nombre o dirección IP del dispositivo de destino Puerto Puerto en el que se ejecuta el servicio SSH, normalmente 22 Nombre de usuario Usuario como el que se autentica Tipo de autenticación Se admite contraseña y clave privada Contraseña Contraseña para el nombre de usuario especificado Archivo de clave privada Archivo de clave privada creado para la conexión ssh Frase de contraseña Frase de contraseña usada con la clave privada seleccionada anteriormente No puede hacer clic en el botón Conectar hasta que se completen todos los campos necesarios y el puerto se establezca en un entero entre 1 y 65 535.
Puede utilizar una contraseña o un archivo de claves y una frase de contraseña para la autenticación. Los archivos de clave son más seguros que el nombre de usuario y la contraseña. Si ya tiene un par de claves, puede reutilizarlo.
Las versiones de Visual Studio anteriores a la 17.10 admiten claves de curva elíptica (EC), Rivert-Shamir-Adleman (RSA) y algoritmo de firma digital (DSA) para conexiones remotas. Debido a problemas de seguridad, las claves RSA y DSA ya no se admiten en VS 17.10 y versiones posteriores. Actualmente solo se admiten claves EC. Para crear un par de claves compatible con el administrador de conexiones, use el comando :
ssh-keygen -m pem -t ecdsa -f <key-name>
Nota:
Si usa
ssh-keygen
para crear la clave privada, debe especificar el modificador-m pem
; de lo contrario, Visual Studio no aceptará la clave. Si la clave privada comienza por-----BEGIN OPENSSH PRIVATE KEY-----
, debe convertirla conssh-keygen -p -f <FILE> -m pem
.Seleccione el botón Conectar para intentar la conexión con el equipo remoto.
Si la conexión se realiza correctamente, Visual Studio configura IntelliSense para usar los encabezados remotos. Para más información, consulte IntelliSense para los encabezados en sistemas remotos.
Si la conexión falla, aparecerá una barra informativa con información sobre el error y los campos que posiblemente tenga que cambiar aparecerán perfilados en rojo.
Si usa archivos de claves para la autenticación, asegúrese de que el servidor SSH de la máquina de destino se esté ejecutando y esté configurada correctamente.
Si tiene problemas para conectarse a WSL en
localhost
, consulte Solución de los problemas de conexión delocalhost
de WSL.
Comprobación de la clave de host
En Visual Studio, versión 16.10 o posteriores, se le pedirá que compruebe la huella digital de la clave de host cuando Visual Studio se conecte a un sistema remoto por primera vez. Es posible que esté familiarizado con este proceso si ha usado antes el cliente de línea de comandos de OpenSSH o PuTTY. La huella digital identifica el servidor. Visual Studio usa la huella digital para asegurarse de que se conecta al servidor de confianza adecuado.
La primera vez que Visual Studio establezca una nueva conexión remota, se le pedirá que acepte o deniegue la huella digital de la clave de host presentada por el servidor. O bien, siempre que haya cambios en una huella digital almacenada en caché. También puede comprobar una huella digital a petición si selecciona una conexión en el Administrador de conexiones y elije Comprobar.
Si actualiza a Visual Studio 16.10 o versiones posteriores desde una versión anterior, se tratarán las conexiones remotas existentes como nuevas conexiones. Se le pedirá que acepte primero la huella digital de la clave de host. A continuación, Visual Studio establece una conexión y almacena en caché la huella digital aceptada.
También puede actualizar las conexiones remotas desde ConnectionManager.exe
mediante el argumento update
.
Algoritmos SSH admitidos
A partir de la versión 16.9 de Visual Studio, se ha eliminado la compatibilidad con los algoritmos SSH anteriores y poco seguros que se usan para cifrar datos e intercambiar claves. Solo se admiten los algoritmos que se indican a continuación. Su uso se admite para la comunicación SSH entre el cliente y el servidor, en ambas direcciones:
Tipo de algoritmo | Algoritmos admitidos |
---|---|
Cifrado | aes128-cbc aes128-ctr aes192-cbc aes192-ctr aes256-cbc aes256-ctr |
HMAC | hmac-sha2-256 hmac-sha2-512 |
Intercambio de claves | diffie-hellman-group14-sha256 diffie-hellman-group16-sha512 diffie-hellman-group-exchange-sha256 ecdh-sha2-nistp256 ecdh-sha2-nistp384 ecdh-sha2-nistp521 |
Clave de host | ecdsa-sha2-nistp256 ecdsa-sha2-nistp384 ecdsa-sha2-nistp521 |
Configuración del servidor SSH
En primer lugar, pongámonos en antecedentes. No se puede seleccionar el algoritmo SSH que se usará en Visual Studio. En su lugar, el algoritmo se determina durante el protocolo de enlace inicial con el servidor SSH. Cada lado (cliente y servidor) proporciona una lista de algoritmos que admite y, luego, se selecciona el primer algoritmo admitido por ambos. La conexión se realizará correctamente siempre que haya un algoritmo que admitan tanto Visual Studio como el servidor para el cifrado, HMAC, el intercambio de claves, etc.
El archivo de configuración de OpenSSH ( sshd_config
) no configura qué algoritmo se debe usar de forma predeterminada. Si no se especifica ningún algoritmo, el servidor SSH debe usar valores predeterminados seguros. Estos dependen de la versión y el proveedor del servidor SSH. Si Visual Studio no admite esos valores predeterminados, es probable que vea un error como: "No se pudo conectar con el sistema remoto. No se ha encontrado ningún algoritmo HMAC de cliente a servidor común". El error también puede aparecer si el servidor SSH está configurado para usar algoritmos que Visual Studio no admite.
En la mayoría de las distribuciones de Linux modernas, el servidor SSH predeterminado debería funcionar con Visual Studio. Sin embargo, puede que esté ejecutando un servidor SSH anterior configurado para usar algoritmos anteriores y poco seguros. En el ejemplo siguiente se explica cómo realizar la actualización a versiones más seguras.
En el ejemplo siguiente, el servidor SSH usa el algoritmo hmac-sha1
no seguro, que Visual Studio 16.9 no admite. Si el servidor SSH usa OpenSSH, puede editar el archivo /etc/ssh/sshd_config
tal y como se muestra a continuación para habilitar algoritmos más seguros. En el caso de otros servidores SSH, consulte la documentación del servidor para obtener información sobre cómo configurarlo.
En primer lugar, compruebe que el conjunto de algoritmos que usa el servidor incluya algoritmos admitidos por Visual Studio. Ejecute el comando siguiente en la máquina remota para mostrar la lista de algoritmos que admite el servidor:
ssh -Q cipher; ssh -Q mac; ssh -Q kex; ssh -Q key
El comando genera una salida como:
3des-cbc
aes128-cbc
aes192-cbc
aes256-cbc
...
ecdsa-sha2-nistp521-cert-v01@openssh.com
sk-ecdsa-sha2-nistp256-cert-v01@openssh.com
La salida muestra todos los algoritmos de cifrado, HMAC, intercambio de claves y clave de host que admite el servidor SSH. Si la lista no incluye algoritmos compatibles con Visual Studio, actualice su servidor SSH antes de continuar.
Puede habilitar los algoritmos que admite Visual Studio editando /etc/ssh/sshd_config
en la máquina remota. En los ejemplos siguientes, se muestra cómo agregar varios tipos de algoritmos a este archivo de configuración.
Los ejemplos se pueden agregar en cualquier parte de /etc/ssh/sshd_config
. Asegúrese de que se encuentren en sus respectivas líneas.
Después de editar el archivo, reinicie el servidor SSH (sudo service ssh restart
en Ubuntu) e intente realizar la conexión de nuevo desde Visual Studio.
Ejemplo de cifrado
Agregue Ciphers <algorithms to enable>
.
Por ejemplo: Ciphers aes128-cbc,aes256-cbc
Ejemplo de HMAC
Agregue MACs <algorithms to enable>
.
Por ejemplo: MACs hmac-sha2-256,hmac-sha2-512
Ejemplo de intercambio de claves
Agregue KexAlgorithms <algorithms to enable>
.
Por ejemplo: KexAlgorithms ecdh-sha2-nistp256,ecdh-sha2-nistp384
Ejemplo de clave de host
Agregue HostKeyAlgorithms <algorithms to enable>
.
Por ejemplo: HostKeyAlgorithms ecdsa-sha2-nistp256,ecdsa-sha2-nistp384
Registro de las conexiones remotas
Puede habilitar el registro para ayudar a solucionar problemas de conexión. En la barra de menús, seleccione Herramientas > Opciones. En el cuadro de diálogo Opciones, seleccione Multiplataforma > Registro:
Las opciones están abiertas en Multiplataforma > Administrador de conexiones > Registro. Habilitar registro está marcado, registro en un archivo está marcado, el directorio del archivo de registro se establece en la carpeta de documentos, y el registro en el panel "Registro multiplataforma" de la ventana de salida está marcado.
Los registros incluyen las conexiones, todos los comandos enviados a la máquina remota (su texto, código de salida y tiempo de ejecución) y toda la salida de Visual Studio al shell. El registro funciona para cualquier proyecto CMake multiplataforma o proyecto Linux basado en MSBuild en Visual Studio.
Puede configurar la salida para que vaya a un archivo o al panel Registro multiplataforma en la Ventana de salida. Para proyectos Linux basados en MSBuild, los comandos de MSBuild emitidos a la máquina remota no se enrutan a la Ventana de salida porque se emiten fuera de proceso. En su lugar, se registran en un archivo con el prefijo "msbuild_".
Utilidad de línea de comandos para el Administrador de conexiones
Visual Studio 2019, versión 16.5 o posteriores: ConnectionManager.exe
es una utilidad de línea de comandos para administrar conexiones de desarrollo remotas fuera de Visual Studio. Resulta útil para tareas como el aprovisionamiento de una nueva máquina de desarrollo. O bien, puede usarla para configurar Visual Studio para la integración continua. Para obtener ejemplos y una referencia completa al comando ConnectionManager, consulte Referencia de ConnectionManager.
Reenvío de puertos TCP
Tanto los proyectos de CMake como los de Linux basados en MSBuild usan el comando rsync
para copiar encabezados de su sistema remoto en Windows, a fin de utilizarlos para IntelliSense. Si no puede habilitar el reenvío de puertos TCP, deshabilite la descarga automática de los encabezados remotos. Para deshabilitarla, vaya a Herramientas > Opciones > Multiplataforma > Administrador de conexiones > Administrador de IntelliSense de encabezados remotos. Si el sistema remoto no tiene habilitado el reenvío de puertos TCP, verá el siguiente error al comenzar la descarga de encabezados remotos para IntelliSense:
La compatibilidad con CMake de Visual Studio también usa rsync
para copiar archivos de origen en el sistema remoto. So no puede habilitar el reenvío de puertos TCP, puede usar sftp
como su método de copia de orígenes en remoto. sftp
suele ser más lento que rsync
, pero no depende del reenvío de puertos TCP. Puede administrar su método de copia de orígenes en remoto con la propiedad remoteCopySourcesMethod
en el Editor de configuraciones de CMake. Si el reenvío de puertos TCP está deshabilitado en su sistema remoto, verá un error en la ventana de salida de CMake al invocarse rsync
por primera vez.
La ventana de salida incluye estos mensajes: Compruebe que el reenvío TCP está habilitado en el servidor, rsync: no se ha visto el saludo del servidor, error rsync: error al iniciar el protocolo cliente-servidor (código 5) en main.c(1675) [sender=3.1.3], No se ha podido abrir un canal SSH.
gdbserver
se puede usar para la depuración en dispositivos incrustados. Si no puede habilitar el reenvío de puertos TCP, tendrá que usar gdb
para todos los escenarios de depuración remota. gdb
se usa de forma predeterminada al depurar proyectos en un sistema remoto.
La compatibilidad con Linux de Visual Studio depende del reenvío de puertos TCP. rsync
y gdbserver
se ven afectados si el reenvío de puertos TCP está deshabilitado en su sistema remoto. Si esta dependencia le afecta, puede votar este vale de sugerencia en Developer Community.
Conexión a WSL
En Visual Studio 2017, se usan los mismos pasos para conectarse a WSL que para un equipo Linux remoto. Utilice localhost
para el nombre de host.
A partir de Visual Studio 2019 versión 16.1, se incluye compatibilidad nativa para usar C++ con el Subsistema de Windows para Linux (WSL). Esto significa que puede compilar y depurar directamente en la instalación local de WSL. Ya no es necesario agregar una conexión remota ni configurar SSH. Encontrará más detalles sobre cómo instalar WSL aquí.
Para configurar la instalación de WSL de modo que funcione con Visual Studio, es necesario tener instaladas las herramientas gcc
o clang
, gdb
, make
, ninja-build
(solo necesario para los proyectos de CMake que usan Visual Studio 2019, versión 16.6 o posteriores), rsync
y zip
. Puede instalarlos en distribuciones que usan apt
mediante este comando, que también instala el compilador g++:
sudo apt install g++ gdb make ninja-build rsync zip
Solución de los problemas de conexión de localhost
de WSL
Al conectarse a Subsistema de Windows para Linux (WSL) en localhost
, puede encontrarse con un conflicto con el cliente ssh
de Windows en el puerto 22. En WSL, cambie el puerto desde el que ssh
espera solicitudes a 23 en /etc/ssh/sshd_config
:
Port 23
Si se va a conectar con una contraseña, asegúrese de que lo siguiente está establecido en /etc/ssh/sshd_config
:
# To disable tunneled clear text passwords, change to no here!
PasswordAuthentication yes
Después de realizar estos cambios, reinicie el servidor SSH (sudo service ssh restart
en Ubuntu).
A continuación, vuelva a intentar la conexión a localhost
con el puerto 23.
Para más información, vea Descargar, instalar y configurar la carga de trabajo de Linux.
Para configurar un proyecto de MSBuild para WSL, consulte Configuración de un proyecto de Linux. Para configurar un proyecto de CMake para WSL, consulte Configuración de un proyecto de CMake en Linux. Para seguir las instrucciones paso a paso para crear una aplicación de consola sencilla con WSL, consulte esta entrada introductoria del blog sobre C++ con Visual Studio 2019 y el subsistema de Windows para Linux (WSL).
Consulte también
Configuración de un proyecto de Linux
Configuración de un proyecto de CMake en Linux
Implementación, ejecución y depuración del proyecto de Linux
Configuración de sesiones de depuración de CMake