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.
No sistema Linux, instale e inicie o servidor OpenSSH:
sudo apt install openssh-server sudo service ssh start
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
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ê.
Na caixa de diálogo Gerenciador de Conexões, escolha o botão Adicionar para adicionar uma nova conexão.
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.
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".
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. Os arquivos de chave são mais seguros do que o nome de usuário/senha. Se você já tem um par de chaves, é possível reutilizá-lo.
As versões do Visual Studio anteriores à 17.10 dão suporte às chaves EC (Curva Elíptica), RSA (Rivert-Shamir-Adleman) e DSA (algoritmo de assinatura digital) 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 comssh-keygen -p -f <FILE> -m pem
.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.
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 WSLlocalhost
.
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:
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:
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
.
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 ssh
espera 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