Conectar-se a seu sistema Linux de destino no Visual Studio

O suporte ao Linux está disponível no Visual Studio 2017 e posterior.

É possível configurar um projeto do Linux para ter como destino um computador remoto ou o WSL (Subsistema Windows para Linux). Nos computadores remotos e no Subsistema do Windows para Linux, é necessário configurar uma conexão remota no Microsoft Visual Studio 2017.

É possível configurar um projeto do Linux para ter como destino um computador remoto ou o WSL (Subsistema Windows para Linux). Para um computador remoto, é necessário configurar uma conexão remota no Microsoft Visual Studio. Para conectar-se ao Subsistema do Windows para Linux, pule para a seção Conectar ao WSL.

Ao usar uma conexão remota, o Microsoft Visual Studio cria projetos do Linux C++ no computador remoto. Não importa se é um computador físico, uma virtual na nuvem ou WSL. Para criar o projeto, o Microsoft Visual Studio copia o código-fonte para o computador Linux remoto. Em seguida, o código é compilado com base nas configurações do Microsoft Visual Studio.

Observação

A partir do Microsoft Visual Studio 2019 versão 16.5, o Microsoft Visual Studio tem suporte para conexões criptográficas seguras em conformidade com o FIPS (Federal Information Processing Standard) 140-2 para sistemas Linux de desenvolvimento remoto. Para usar uma conexão compatível com FIPS, siga as etapas em Configurar o desenvolvimento remoto do Linux seguro em conformidade com FIPS.

Configurar o servidor SSH no sistema remoto

Se ssh ainda não estiver configurado e em execução em seu sistema Linux, siga estas etapas para instalá-lo. Os exemplos neste artigo usam o Ubuntu 18.04 LTS com o servidor OpenSSH versão 7.6. No entanto, as instruções devem ser as mesmas para qualquer distribuição usando uma versão moderadamente recente do OpenSSH.

  1. No sistema Linux, instale e inicie o servidor OpenSSH:

    sudo apt install openssh-server
    sudo service ssh start
    
  2. Para que o servidor de SSH seja iniciado automaticamente quando o sistema for, habilite-o usando systemctl:

    sudo systemctl enable ssh
    

Configurar a conexão remota

  1. No Microsoft Visual Studio, escolha Ferramentas > Opções na barra de menus para abrir a caixa de diálogo Opções. Em seguida, selecione Gerenciador de Conexões multiplataforma > para abrir a caixa de diálogo Gerenciador de Conexões.

    Se não tiver configurado previamente uma conexão no Microsoft Visual Studio, ao compilar seu projeto pela primeira vez, o Microsoft Visual Studio abrirá a caixa de diálogo Gerenciador de Conexões para você.

  2. Na caixa de diálogo Gerenciador de Conexões, escolha o botão Adicionar para adicionar uma nova conexão.

    Captura de tela do painel de opções do Visual Studio.

    No painel de opções, CrossPlatform > C++ > Gerenciador de Conexões é selecionado e o botão Adicionar é realçado.

    Para editar uma conexão existente, escolha Editar. Em qualquer cenário, a janela Conectar ao sistema remoto será exibida.

    Captura de tela da janela Conectar ao Sistema Remoto do Visual Studio.

    Na janela Conectar ao Sistema Remoto, há campos para nome de host, porta, nome de usuário, tipo de autenticação e senha. A porta está definida como 22. O tipo de autenticação está definido como "Senha".

  3. Insira as seguintes informações:

    Entrada Descrição
    Nome do Host Nome ou endereço IP do dispositivo de destino
    Porta Porta na qual o serviço SSH está em execução, normalmente 22
    Nome de usuário Usuário como o qual será autenticado
    Tipo de autenticação Há suporte para senha e para chave privada
    Senha A senha do nome de usuário inserido
    Arquivo de chave privada Arquivo de chave privada criado para conexão ssh
    Frase secreta Frase secreta usada com a chave privada selecionada acima

    Não é possível clicar no botão Conectar até que todos os campos obrigatórios estejam preenchidos e a porta esteja definida como um número inteiro entre 1 e 65535.

    Você pode usar uma senha ou um arquivo de chave e a frase secreta para autenticação. Em vários cenários de desenvolvimento, a autenticação de senha é suficiente, mas os arquivos de chave são mais seguros. Se você já tem um par de chaves, é possível reutilizá-lo.

    As versões do Visual Studio anteriores à 17.10 dão suporte para chaves EC, RSA e DSA para conexões remotas. Devido a questões de segurança, não há mais suporte para chaves RSA e DSA no VS 17.10 e posteriores. No momento, há suporte somente para chaves EC. Para criar um par de chaves compatível com o gerenciador de conexões, use o comando: ssh-keygen -m pem -t ecdsa -f <key-name>

    Observação

    Ao usar ssh-keygen para criar a chave privada, é necessário especificar a opção -m pem ou a chave não será aceita pelo Visual Studio. Se a chave privada começar com -----BEGIN OPENSSH PRIVATE KEY-----, converta-a com ssh-keygen -p -f <FILE> -m pem.

  4. Selecione o botão Conectar para tentar estabelecer uma conexão com o computador remoto.

    Se a conexão for bem-sucedida, o Microsoft Visual Studio configurará o IntelliSense para usar os cabeçalhos remotos. Para saber mais, veja IntelliSense para cabeçalhos em sistemas remotos.

    Se a conexão falhar, uma barra de informações com informações de erro será exibida e os campos que você talvez precise alterar estarão contornados em vermelho.

    Captura de tela da janela Conectar ao Sistema Remoto do Visual Studio. Os campos de nome de host e porta estão contornados em vermelho para indicar entradas incorretas.

    Se você usa arquivos de chave para autenticação, certifique-se de que o servidor SSH do computador de destino está em execução e configurado corretamente.

    Se você tiver problemas para se conectar ao WSL no localhost, consulte Corrigir problemas de conexão WSL localhost.

Verificação da chave do host

No Visual Studio versão 16.10 ou posterior, você é solicitado a verificar a impressão digital da chave do host do servidor sempre que o Visual Studio se conectar a um sistema remoto pela primeira vez. Se você já usou o cliente de linha de comando OpenSSH ou o PuTTY antes, pode estar familiarizado com esse processo. A impressão digital identifica o servidor. O Microsoft Visual Studio usa a impressão digital para garantir que está se conectando ao servidor pretendido e confiável.

Na primeira vez que o Visual Studio estabelecer uma nova conexão remota, você será solicitado a aceitar ou negar a impressão digital da chave do host apresentada pelo servidor. Ou, sempre que houver alterações em uma impressão digital armazenada em cache. Também possível verificar uma impressão digital sob demanda: selecione uma conexão no Gerenciador de Conexões e escolha Verificar.

Se você atualizar para o Microsoft Visual Studio 16.10 ou posterior a partir de uma versão mais antiga, ele tratará todas as conexões remotas existentes como novas conexões. Você será solicitado a aceitar a impressão digital da chave do host primeiro. Em seguida, o Microsoft Visual Studio estabelecerá uma conexão e armazenará a impressão digital aceita em cache.

Também é possível atualizar conexões remotas de ConnectionManager.exe usando o argumento update.

Algoritmos SSH com suporte

A partir da versão 16.9 do Visual Studio, o suporte para algoritmos SSH mais antigos e inseguros usados para criptografar dados e trocar chaves foi removido. Há suporte apenas para os algoritmos a seguir. Eles têm suporte para comunicação SSH cliente a servidor e servidor a cliente:

Tipo de algoritmo Algoritmos compatíveis
Criptografia aes128-cbc
aes128-ctr
aes192-cbc
aes192-ctr
aes256-cbc
aes256-ctr
HMAC hmac-sha2-256
hmac-sha2-512
Troca de chaves diffie-hellman-group14-sha256
diffie-hellman-group16-sha512
diffie-hellman-group-exchange-sha256
ecdh-sha2-nistp256
ecdh-sha2-nistp384
ecdh-sha2-nistp521
Chave de host ecdsa-sha2-nistp256
ecdsa-sha2-nistp384
ecdsa-sha2-nistp521

Configurar o servidor SSH

Primeiro, um pouco de contexto. Não é possível selecionar o algoritmo SSH a ser usado no Microsoft Visual Studio. Em vez disso, o algoritmo é determinado durante o handshake inicial com o servidor SSH. Cada lado (cliente e servidor) fornece uma lista de algoritmos com suporte e, em seguida, o primeiro algoritmo comum a ambos é selecionado. A conexão será bem-sucedida se houver pelo menos um algoritmo em comum entre o Microsoft Visual Studio e o servidor para criptografia, HMAC, troca de chaves e assim por diante.

O arquivo de configuração Open SSH (sshd_config) não configura qual algoritmo será usado por padrão. O servidor SSH deve usar padrões seguros quando nenhum algoritmo é especificado. Esses padrões dependem da versão e do fornecedor do servidor SSH. Se o Microsoft Visual Studio não der suporte a esses padrões, você provavelmente verá um erro como: "Não foi possível conectar ao sistema remoto. Nenhum cliente comum para o algoritmo HMAC do servidor foi encontrado." O erro também poderá aparecer se o servidor SSH estiver configurado para usar algoritmos para os quais o Microsoft Visual Studio não oferece suporte.

O servidor SSH padrão funciona com o Microsoft Visual Studio na maioria das distribuições modernas do Linux. No entanto, talvez você esteja executando um servidor SSH mais antigo configurado para usar algoritmos mais antigos e não seguros. O exemplo a seguir explica como atualizar para versões mais seguras.

No exemplo a seguir, o servidor SSH usa o algoritmo inseguro hmac-sha1, ao qual o Visual Studio 16.9 não dá suporte. Se o servidor SSH usar OpenSSH, você poderá editar o arquivo /etc/ssh/sshd_config conforme mostrado abaixo para habilitar algoritmos mais seguros. Para outros servidores SSH, consulte a documentação do servidor para saber como configurá-los.

Primeiro, verifique se o conjunto de algoritmos que seu servidor está usando inclui algoritmos com suporte para Microsoft Visual Studio. Execute o seguinte comando no computador remoto para listar os algoritmos com suporte pelo servidor:

ssh -Q cipher; ssh -Q mac; ssh -Q kex; ssh -Q key

O comando produz uma saída como:

3des-cbc
aes128-cbc
aes192-cbc
aes256-cbc
...
ecdsa-sha2-nistp521-cert-v01@openssh.com
sk-ecdsa-sha2-nistp256-cert-v01@openssh.com

A saída lista todos os algoritmos de criptografia, HMAC, troca de chaves e chave de host com suporte pelo servidor SSH. Se a lista não incluir algoritmos compatíveis com o Visual Studio, atualize seu servidor SSH antes de continuar.

É possível habilitar algoritmos com suporte pelo Microsoft Visual Studio editando /etc/ssh/sshd_config no computador remoto. Os exemplos a seguir mostram como adicionar vários tipos de algoritmos a esse arquivo de configuração.

Esses exemplos podem ser adicionados em qualquer lugar em /etc/ssh/sshd_config. Verifique se eles estão em suas próprias linhas.

Depois de editar o arquivo, reinicie o servidor SSH (sudo service ssh restart no Ubuntu) e tente conectar-se novamente a partir do Microsoft Visual Studio.

Exemplo de criptografia

Adicionar: Ciphers <algorithms to enable>
Por exemplo: Ciphers aes128-cbc,aes256-cbc

Exemplo de HMAC

Adicionar: MACs <algorithms to enable>
Por exemplo: MACs hmac-sha2-256,hmac-sha2-512

Exemplo de troca de chaves

Adicionar: KexAlgorithms <algorithms to enable>
Por exemplo: KexAlgorithms ecdh-sha2-nistp256,ecdh-sha2-nistp384

Exemplo de chave de host

Adicionar: HostKeyAlgorithms <algorithms to enable>
Por exemplo: HostKeyAlgorithms ecdsa-sha2-nistp256,ecdsa-sha2-nistp384

Registro em log de conexões remotas

Habilite o registro em log para ajudar a solucionar problemas de conexão. Na barra de menu, selecione Ferramentas > Opções. Na caixa de diálogo Opções, selecione Plataforma cruzada >Registrar em log:

Captura de tela das opções do Visual Studio.

As opções estão abertas para Plataforma Cruzada > Gerenciador de Conexões > Registrar em log. A opção Habilitar registro está marcada, a opção registrar em um arquivo está marcada, o diretório do arquivo de log está definido como a pasta de documentos e a opção registrar em log no painel "Log de plataforma cruzada" na janela de saída está marcada.

Os logs incluem conexões, todos os comandos enviados para o computador remoto (texto, código de saída e tempo de execução) e toda a saída do Visual Studio para o shell. O registro em log funciona para qualquer projeto CMake de plataforma cruzada ou do Linux com base em MSBuild no Visual Studio.

Você pode configurar a saída para que vá a um arquivo ou ao painel Registrar em log de plataforma cruzada na Janela de saída. Nos projetos Linux baseados no Microsoft Build Engine, os comandos do Microsoft Build Engine enviados para o computador remoto não são roteados para a Janela de saída porque são emitidos fora do processo. Em vez disso, eles são registrados em um arquivo, com um prefixo de "msbuild_".

Utilitário de linha de comando para o Gerenciador de Conexões

Microsoft Visual Studio 2019 versão 16.5 ou posterior: ConnectionManager.exe é um utilitário de linha de comando para gerenciar conexões de desenvolvimento remoto fora do Microsoft Visual Studio. Ele é útil para tarefas como provisionamento de uma nova máquina de desenvolvimento. Ou você pode usá-lo para configurar o Microsoft Visual Studio para integração contínua. Para obter exemplos e uma referência completa ao comando ConnectionManager, consulte a Referência ao ConnectionManager.

Encaminhamento de porta TCP

O comando rsync é usado por projetos Linux baseados no Microsoft Build Engine e projetos do CMake para copiar cabeçalhos do sistema remoto para o Windows para uso pelo IntelliSense. Quando não for possível habilitar o encaminhamento de porta TCP, desabilite o download automático de cabeçalhos remotos. Para desabilitá-lo, use Ferramentas > Opções > Plataforma cruzada > Gerenciador de Conexões > Gerenciador dos cabeçalhos remotos IntelliSense. Se o sistema remoto não tiver o encaminhamento de porta TCP habilitado, esse erro será exibido quando o download de cabeçalhos remotos do IntelliSense for iniciado:

Captura de tela de uma mensagem de erro do Visual Studio informando que o canal SSH não pôde ser aberto. O caminho para um arquivo de log é fornecido.

rsync também é usado pelo suporte de CMake do Microsoft Visual Studio para copiar arquivos de origem para o sistema remoto. Se não for possível habilitar o encaminhamento de porta TCP, será possível usar sftp como seu método de fontes de cópia remota. sftp geralmente é mais lento do que rsync, mas não tem uma dependência do encaminhamento de porta TCP. É possível gerenciar o método de fontes de cópia remota com a propriedade remoteCopySourcesMethod no Editor de Configurações do CMake. Se o encaminhamento de porta TCP estiver desabilitado em seu sistema remoto, um erro aparecerá na janela de saída do CMake na primeira vez que ele invocar rsync.

Captura de tela da janela de saída do Visual Studio que exibe uma mensagem de erro Rsync.

A janela de saída inclui estas mensagens: Verifique se o encaminhamento TCP está habilitado no servidor, rsync: não viu a saudação do servidor, erro rsync: erro ao iniciar o protocolo cliente-servidor (código 5) em main.c(1675) [sender=3.1.3], Um canal SSH não pôde ser aberto.

gdbserver pode ser usado para depuração em dispositivos inseridos. Se não for possível habilitar o encaminhamento de porta TCP, será necessário usar gdb em todos os cenários de depuração remota. gdb é usado por padrão ao depurar projetos em um sistema remoto.

O suporte ao Linux do Microsoft Visual Studio tem uma dependência do encaminhamento de porta TCP. rsync e gdbserver serão afetados se o encaminhamento de porta TCP estiver desabilitado no sistema remoto. Se essa dependência afetar você, vote neste tíquete de sugestão no Developer Community.

Conectar ao WSL

No Microsoft Visual Studio 2017, as mesmas etapas são usadas para conectar ao WSL e para conectar a um computador Linux remoto. Use localhost no Nome do Host.

A partir do Microsoft Visual Studio 2019 versão 16.1, o Microsoft Visual Studio apresenta suporte nativo para uso de C++ com o WSL (Subsistema do Windows para Linux). Isso significa que é possível compilar e depurar diretamente a instalação local do WSL. Não é mais necessário adicionar uma conexão remota ou configurar o SSH. É possível encontrar detalhes sobre como instalar o WSL aqui.

Para configurar sua instalação do WSL para que funcione com o Microsoft Visual Studio, as seguintes ferramentas devem ser instaladas: gcc ou clang, gdb, make, ninja-build (necessário apenas para projetos do CMake usando o Microsoft Visual Studio 2019 versão 16.6 ou posterior), rsync e zip. É possível instalá-las em distribuições que usam apt usando este comando, que também instala o compilador g++:

sudo apt install g++ gdb make ninja-build rsync zip

Corrigir problemas de conexão WSL localhost

Ao conectar-se ao Subsistema do Windows para Linux (WSL) em localhost, um conflito poderá ocorrer com o cliente Windows ssh na porta 22. No WSL, altere a porta que sshespera solicitações de 23 em /etc/ssh/sshd_config:

Port 23

Se estiver conectando-se usando uma senha, verifique se a seguinte opção está definida em /etc/ssh/sshd_config:

# To disable tunneled clear text passwords, change to no here!
PasswordAuthentication yes

Depois de fazer essas alterações, reinicie o servidor SSH (sudo service ssh restart no Ubuntu).

Em seguida, repita a conexão com localhost usando a porta 23.

Para obter mais informações, confira Baixar, instalar e configurar a carga de trabalho do Linux.

Para configurar um projeto do Microsoft Build Engine para WSL, consulte Configurar um projeto do Linux. Para configurar um projeto do CMake para WSL, consulte Configurar um projeto do CMake do Linux. Para seguir as instruções passo a passo para criar um aplicativo de console simples com o WSL, confira esta postagem introdutória no blog sobre C++ com Visual Studio 2019 e o WSL (Subsistema Windows para Linux).

Consulte Também

Configurar um projeto do Linux
Configurar um projeto do Linux CMake
Implantar, executar e depurar o projeto do Linux
Configurar sessões de depuração do CMake