Partilhar via


Conectar-se ao seu sistema Linux remoto usando o Visual Studio

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

Você pode configurar um projeto Linux para direcionar uma máquina remota ou o Subsistema Windows para Linux (WSL). Para máquinas remotas e para WSL, você precisa configurar uma conexão remota no Visual Studio 2017.

Você pode configurar um projeto Linux para direcionar uma máquina remota ou o Subsistema Windows para Linux (WSL). Para uma máquina remota, você precisa configurar uma conexão remota no Visual Studio. Para se conectar à WSL, pule para a seção Conectar à WSL .

Ao usar uma conexão remota, o Visual Studio cria projetos C++ Linux na máquina remota. Não importa se é uma máquina física, uma máquina virtual na nuvem ou WSL.

Para criar o projeto, o Visual Studio copia o código-fonte para seu computador Linux remoto. Em seguida, o código é compilado com base nas configurações do Visual Studio.

Observação

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

Configurar o servidor SSH na máquina remota

Se ssh ainda não estiver configurado e em execução no seu sistema Linux, siga estes passos 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 distro 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. Se você quiser que o servidor ssh seja iniciado automaticamente quando o sistema for inicializado, ative-o usando systemctl:

    sudo systemctl enable ssh
    

Configurar a ligação remota

  1. No Visual Studio em seu sistema Windows local, escolha Opções de Ferramentas > na barra de menus para abrir a caixa de diálogo Opções. Em seguida, selecione Gerenciador de conexões entre plataformas > para abrir a caixa de diálogo Gerenciador de conexões.

    Se você não configurou uma conexão no Visual Studio antes, quando você cria seu projeto pela primeira vez, o Visual Studio abre 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++ > Connection Manager é selecionado e o botão Adicionar é realçado.

    Para editar uma conexão existente, escolha Editar. Em ambos os cenários, a janela Conectar ao sistema remoto é exibida.

    Captura de tela da janela Conectar ao sistema remoto do Visual Studio.

    Na janela Conectar ao sistema remoto, há campos para nome do 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 alvo
    Porto Porta em que o serviço SSH está sendo executado, normalmente 22
    Nome de utilizador Usuário para autenticar como
    Tipo de autenticação Senha e chave privada são suportadas
    Senha Palavra-passe para o nome de utilizador introduzido
    Arquivo de chave privada Arquivo de chave privada criado para conexão ssh
    Frase de segurança Senha usada com chave privada selecionada anteriormente

    Não é possível selecionar o 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 frase secreta para autenticação. Os ficheiros chave são mais seguros do que o nome de utilizador/palavra-passe. Se já tiver um par de chaves, é possível reutilizá-lo.

    As versões do Visual Studio anteriores à 17.10 suportam chaves Elliptic Curve (EC), Rivert-Shamir-Adleman (RSA) e Digital signature algorithm (DSA) para conexões remotas. Devido a preocupações de segurança, as chaves DSA não são mais suportadas no VS 17.10 e posterior. As chaves RSA também não eram suportadas no VS 17.10 e VS 17.11, mas alguns tipos são suportados novamente no VS 17.12 e posterior. Para criar um par de chaves compatível com o gerenciador de conexões, você pode usar o comando: ssh-keygen -m pem -t ecdsa -f <key-name>

    Observação

    Se estiver usando ssh-keygen para criar a chave privada, você deve especificar a opção -m pemou a chave não é aceita pelo Visual Studio. Se sua chave privada começar com -----BEGIN OPENSSH PRIVATE KEY-----, você deverá convertê-la com ssh-keygen -p -f <FILE> -m pem.

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

    Se a conexão for bem-sucedida, o Visual Studio configurará o IntelliSense para usar os cabeçalhos remotos. Para obter mais informações, consulte 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ê pode precisar alterar serão delineados em vermelho.

    Captura de tela da janela Conectar ao sistema remoto do Visual Studio. Os campos de nome do host e porta são delineados em vermelho para indicar entradas incorretas.

    Se você usar arquivos de chave para autenticação, verifique se o servidor SSH da máquina 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 de host do servidor sempre que o Visual Studio se conectar a um sistema remoto pela primeira vez. Você pode estar familiarizado com esse processo se já usou o cliente de linha de comando OpenSSH ou PuTTY antes. A impressão digital identifica o servidor. O Visual Studio usa a impressão digital para garantir que ele se conecte ao servidor pretendido e confiável.

Na primeira vez que o Visual Studio estabelece uma nova conexão remota, você é 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. Você também pode verificar uma impressão digital sob demanda: selecione uma conexão no Connection Manager e escolha Verificar.

Se você atualizar para o Visual Studio 16.10 ou posterior a partir de uma versão mais antiga, ele tratará quaisquer 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 Visual Studio estabelece uma conexão e armazena em cache a impressão digital aceita.

Você também pode atualizar conexões remotas usando ConnectionManager.exe o update argumento.

Algoritmos SSH suportados

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 é removido. Apenas os seguintes algoritmos são suportados. Eles são suportados para comunicação SSH cliente-servidor e servidor-cliente:

Tipo de algoritmo Algoritmos suportados
Encriptação 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 do anfitrião ecdsa-sha2-nistp256
ecdsa-sha2-nistp384
ecdsa-sha2-nistp521
rsa-sha2-512
rsa-sha2-256

Configurar o servidor SSH

Primeiro, um pouco de fundo. Você não pode selecionar o algoritmo SSH para usar do 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 que suporta e, em seguida, o primeiro algoritmo comum a ambos é selecionado. A conexão é bem-sucedida desde que haja pelo menos um algoritmo em comum entre o 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 usar por padrão. O servidor SSH deve usar padrões seguros quando nenhum algoritmo for especificado. Esses padrões dependem da versão e do fornecedor do servidor SSH. Se o Visual Studio não oferecer suporte a esses padrões, você provavelmente verá um erro como: Não foi possível se conectar ao sistema remoto. Nenhum algoritmo HMAC comum de cliente para servidor foi encontrado. O erro também pode aparecer se o servidor SSH estiver configurado para usar algoritmos que o Visual Studio não suporta.

O servidor SSH padrão na maioria das distribuições Linux modernas deve funcionar com o Visual Studio. No entanto, você pode estar executando um servidor SSH mais antigo configurado para usar algoritmos mais antigos e inseguros. O exemplo a seguir explica como atualizar para versões mais seguras.

Neste exemplo, o servidor SSH usa o algoritmo inseguro hmac-sha1 , que o Visual Studio 16.9 não suporta. Se o servidor SSH usa OpenSSH, você pode editar o /etc/ssh/sshd_config arquivo 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 suportados pelo Visual Studio. Execute o seguinte comando na máquina remota para listar os algoritmos suportados pelo servidor:

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

O comando produz saídas 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 suportados pelo seu servidor SSH. Se a lista não incluir algoritmos suportados pelo Visual Studio, atualize seu servidor SSH antes de continuar.

Você pode habilitar algoritmos suportados pelo Visual Studio editando /etc/ssh/sshd_config na máquina remota. Os exemplos a seguir mostram como adicionar vários tipos de algoritmos a esse arquivo de configuração.

Estes exemplos podem ser adicionados em qualquer parte do /etc/ssh/sshd_config. Certifique-se de que 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 se conectar novamente a partir do Visual Studio.

Exemplo de cifra

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

Exemplo de HMAC

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

Exemplo de troca de chaves

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

Exemplo de chave de host

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

Registro em log para conexões remotas

Você pode habilitar o registro em log para ajudar a solucionar problemas de conexão. Na barra de menus, selecione Opções de ferramentas>. Na caixa de diálogo Opções, selecione Registro em log entre plataformas>:

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

As opções estão abertas para Cross Platform > Connection Manager > Logging. Ativar registro em log está marcado, log em um arquivo é verificado, o diretório do arquivo de log é definido a pasta de documentos e log no painel 'Cross Platform Logging' na janela de saída é marcado.

Os logs incluem conexões, todos os comandos enviados para a máquina remota (seu 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 projeto Linux baseado em MSBuild no Visual Studio.

Você pode configurar a saída para ir para um arquivo ou para o painel Log entre plataformas na janela Saída. Para projetos Linux baseados em MSBuild, os comandos do MSBuild enviados para a máquina remota 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 Connection Manager

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 Visual Studio. É útil para tarefas como provisionar uma nova máquina de desenvolvimento. Ou, você pode usá-lo para configurar o Visual Studio para integração contínua. Para obter exemplos e uma referência completa ao ConnectionManager comando, consulte Referência do ConnectionManager.

Reencaminhamento de portas TCP

O rsync comando é usado por projetos Linux baseados em MSBuild e projetos CMake para copiar cabeçalhos do seu sistema remoto para o Windows para uso pelo IntelliSense. Quando não for possível ativar o encaminhamento de porta TCP, desative o download automático de cabeçalhos remotos. Para desativá-lo, use Opções de Ferramentas >> Cross Platform > Connection Manager > Remote Headers IntelliSense Manager. Se o sistema remoto não tiver o encaminhamento de porta TCP habilitado, esse erro aparecerá quando o download de cabeçalhos remotos para o IntelliSense começar:

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 CMake do Visual Studio para copiar arquivos de origem para o sistema remoto. Se não conseguir ativar o reencaminhamento de portas TCP, pode utilizar sftp como método de fontes de cópia remota. sftp é geralmente mais lento do que rsynco , mas não depende do encaminhamento de porta TCP. Você pode gerenciar seu método de fontes de cópia remota com a remoteCopySourcesMethod propriedade no CMake Settings Editor. Se o encaminhamento de porta TCP estiver desativado no 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 exibindo uma mensagem de erro Rsync.

A janela de saída inclui estas mensagens: Verifique se o encaminhamento TCP está ativado 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], Não foi possível abrir um canal SSH.

gdbserver pode ser usado para depuração em dispositivos incorporados. Se não for possível habilitar o encaminhamento de porta TCP, você deverá usá-lo gdb para todos os cenários de depuração remota. gdb é usado por padrão ao depurar projetos em um sistema remoto.

O suporte Linux do Visual Studio depende do encaminhamento de porta TCP. Ambos rsync e gdbserver são afetados se o encaminhamento de porta TCP estiver desativado no seu sistema remoto. Se essa dependência afetar você, vote neste tíquete de sugestão na Comunidade de desenvolvedores.

Conecte-se à WSL

No Visual Studio 2017, você usa as mesmas etapas para se conectar ao Windows Subsystem for Linux (WSL) que usa para uma máquina Linux remota. Use localhost para o Nome do Host.

A partir do Visual Studio 2019 versão 16.1, o Visual Studio tem suporte nativo para usar C++ com o Windows Subsystem for Linux (WSL). Isso significa que você pode criar e depurar diretamente em sua instalação WSL local. Você não precisa mais adicionar uma conexão remota ou configurar o SSH. Você pode encontrar detalhes sobre como instalar o WSL aqui.

Para configurar sua instalação WSL para funcionar com o Visual Studio, você precisa das seguintes ferramentas instaladas: gcc ou clang, gdb, make, ninja-build (necessário apenas para projetos CMake usando o Visual Studio 2019 versão 16.6 ou posterior), rsynce zip. Você pode instalá-los em distros 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 WSL no localhost, você pode entrar em conflito com o cliente Windows ssh na porta 22. No WSL, altere a porta que ssh espera solicitações de para 23 em /etc/ssh/sshd_config:

Port 23

Se você estiver se conectando usando uma senha, verifique se o seguinte está definido 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, tente novamente a conexão usando a localhost porta 23.

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

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

Ver também