Connettersi al sistema Linux di destinazione in Visual Studio

Il supporto per Linux è disponibile in Visual Studio 2017 e versioni successive.

È possibile configurare un progetto Linux destinato a un computer remoto o al sottosistema Windows per Linux (WSL). Per i computer remoti e per WSL, è necessario configurare una connessione remota in Visual Studio 2017.

È possibile configurare un progetto Linux destinato a un computer remoto o al sottosistema Windows per Linux (WSL). Per un computer remoto, è necessario configurare una connessione remota in Visual Studio. Per connettersi a WSL, passare alla sezione Connessione a WSL.

Quando si usa una connessione remota, Visual Studio compila progetti Linux C++ nel computer remoto. Non importa se si tratta di una macchina fisica, di una macchina virtuale nel cloud o di WSL. Per compilare il progetto, Visual Studio copia il codice sorgente nel computer Linux remoto. Il codice viene quindi compilato in base alle impostazioni di Visual Studio.

Nota

A partire da Visual Studio 2019 versione 16.5, Visual Studio supporta connessioni crittografiche sicure e conformi a FIPS (Federal Information Processing Standard) 140-2 ai sistemi Linux per lo sviluppo remoto. Per usare una connessione conforme a FIPS, seguire la procedura descritta in Configurare invece lo sviluppo di Linux remoto sicuro conforme a FIPS.

Configurare il server SSH nel sistema remoto

Se ssh non è già configurato e in esecuzione nel sistema Linux, seguire questa procedura per installarlo. Gli esempi in questo articolo usano Ubuntu 18.04 LTS con il server OpenSSH versione 7.6. Tuttavia, le istruzioni devono essere le stesse per qualsiasi distribuzione che usa una versione moderatamente recente di OpenSSH.

  1. Nel sistema Linux installare e avviare il server OpenSSH:

    sudo apt install openssh-server
    sudo service ssh start
    
  2. Se si vuole che il server ssh venga avviato automaticamente all'avvio del sistema, abilitarlo usando systemctl:

    sudo systemctl enable ssh
    

Configurare la connessione remota

  1. In Visual Studio scegliere Strumenti Opzioni sulla barra dei menu per aprire la finestra di dialogo Opzioni.> Selezionare quindi Gestione connessioni multipiattaforma > per aprire la finestra di dialogo Gestione connessioni.

    Se non è stata configurata una connessione in Visual Studio prima, quando si compila il progetto per la prima volta, Visual Studio apre automaticamente la finestra di dialogo Gestione connessioni.

  2. Nella finestra di dialogo Gestione connessioni scegliere il pulsante Aggiungi per aggiungere una nuova connessione.

    Screenshot del riquadro delle opzioni di Visual Studio.

    Nel riquadro delle opzioni è selezionato CrossPlatform > > Gestione connessioni C++ e il pulsante Aggiungi è evidenziato.

    Per modificare una connessione esistente, scegliere Modifica. In entrambi gli scenari viene visualizzata la finestra Connessione a Sistema remoto.

    Screenshot della finestra Di sistema remoto di Visual Studio Connessione.

    Nella finestra Connessione sistema remoto sono disponibili campi per nome host, porta, nome utente, tipo di autenticazione e password. La porta è impostata su 22. Il tipo di autenticazione è impostato su "Password".

  3. Immettere le informazioni seguenti:

    Movimento Descrizione
    Host Name Nome o indirizzo IP del dispositivo di destinazione
    Porta Porta sui cui è in esecuzione il servizio SSH, solitamente 22
    Nome utente Utente da autenticare
    Tipo di autenticazione Password e chiave privata sono entrambi supportati
    Password Password per il nome utente immesso
    File di chiave privata File di chiave privata creato per la connessione SSH
    Passphrase Passphrase usata con la chiave privata selezionata in precedenza

    Non è possibile fare clic sul pulsante Connessione finché non vengono completati tutti i campi obbligatori e la porta è impostata su un numero intero compreso tra 1 e 65535.

    È possibile usare una password o un file di chiave e una passphrase per l'autenticazione. Per molti scenari di sviluppo, l'autenticazione delle password è sufficiente, ma i file chiave sono più sicuri. Se si ha già una coppia di chiavi, è possibile riutilizzarla.

    Le versioni di Visual Studio precedenti alla 17.10 supportano le chiavi EC, RSA e DSA per le connessioni remote. A causa dei problemi di sicurezza, le chiavi RSA e DSA non sono più supportate in VS 17.10 e versioni successive. Attualmente sono supportate solo le chiavi EC. Per creare una coppia di chiavi compatibile con la gestione connessione, usare il comando : ssh-keygen -m pem -t ecdsa -f <key-name>

    Nota

    Se si usa ssh-keygen per creare la chiave privata, è necessario specificare l'opzione -m pemoppure la chiave non verrà accettata da Visual Studio. Se la chiave privata inizia con -----BEGIN OPENSSH PRIVATE KEY-----, è necessario convertirla con ssh-keygen -p -f <FILE> -m pem.

  4. Scegliere il pulsante Connessione per tentare una connessione al computer remoto.

    Se la connessione ha esito positivo, Visual Studio configura IntelliSense per l'uso delle intestazioni remote. Per altre informazioni, vedere IntelliSense per le intestazioni nei sistemi remoti.

    Se la connessione non riesce, viene visualizzata una barra delle informazioni con informazioni sull'errore e i campi che potrebbero essere necessari per modificare sono evidenziati in rosso.

    Screenshot della finestra Di sistema remoto di Visual Studio Connessione. I campi nome host e porta sono evidenziati in rosso per indicare voci non corrette.

    Se si usano i file di chiave per l'autenticazione, assicurarsi che il server SSH del computer di destinazione sia in esecuzione e configurato correttamente.

    Se si verificano problemi di connessione a WSL in localhost, vedere Risolvere i problemi di connessione WSLlocalhost.

Verifica della chiave host

In Visual Studio versione 16.10 o successiva viene chiesto di verificare l'impronta digitale della chiave host del server ogni volta che Visual Studio si connette a un sistema remoto per la prima volta. È possibile avere familiarità con questo processo se in precedenza è stato usato il client della riga di comando OpenSSH o PuTTY. L'impronta digitale identifica il server. Visual Studio usa l'impronta digitale per assicurarsi che si connetta al server previsto e attendibile.

La prima volta che Visual Studio stabilisce una nuova connessione remota, viene chiesto di accettare o negare l'impronta digitale della chiave host presentata dal server. In alternativa, in qualsiasi momento ci sono modifiche a un'impronta digitale memorizzata nella cache. È anche possibile verificare un'impronta digitale su richiesta: selezionare una connessione nel Gestione connessioni e scegliere Verifica.

Se si esegue l'aggiornamento a Visual Studio 16.10 o versione successiva da una versione precedente, le connessioni remote esistenti vengono considerate nuove connessioni. Viene richiesto di accettare prima di tutto l'impronta digitale della chiave host. Visual Studio stabilisce quindi una connessione e memorizza nella cache l'impronta digitale accettata.

È anche possibile aggiornare le connessioni remote usando ConnectionManager.exe l'argomento update .

Algoritmi SSH supportati

A partire da Visual Studio versione 16.9, viene rimosso il supporto per algoritmi SSH meno recenti e non sicuri usati per crittografare i dati e scambiare chiavi. Sono supportati solo gli algoritmi seguenti. Sono supportati sia per la comunicazione SSH da client a server che da server a client:

Tipo di algoritmo Algoritmi supportati
Crittografia aes128-cbc
aes128-ctr
aes192-cbc
aes192-ctr
aes256-cbc
aes256-ctr
HMAC hmac-sha2-256
hmac-sha2-512
Scambio di chiave diffie-hellman-group14-sha256
diffie-hellman-group16-sha512
diffie-hellman-group-exchange-sha256
ecdh-sha2-nistp256
ecdh-sha2-nistp384
ecdh-sha2-nistp521
Chiave host ecdsa-sha2-nistp256
ecdsa-sha2-nistp384
ecdsa-sha2-nistp521

Configurare il server SSH

Prima di tutto, un po' di sfondo. Non è possibile selezionare l'algoritmo SSH da usare da Visual Studio. L'algoritmo viene invece determinato durante l'handshake iniziale con il server SSH. Ogni lato (client e server) fornisce un elenco di algoritmi supportati e quindi viene selezionato il primo algoritmo comune a entrambi. La connessione ha esito positivo, purché sia presente almeno un algoritmo in comune tra Visual Studio e il server per la crittografia, HMAC, scambio di chiavi e così via.

Il file di configurazione Open SSH (sshd_config) non configura l'algoritmo da usare per impostazione predefinita. Il server SSH deve usare impostazioni predefinite sicure quando non vengono specificati algoritmi. Queste impostazioni predefinite dipendono dalla versione e dal fornitore del server SSH. Se Visual Studio non supporta tali impostazioni predefinite, è probabile che venga visualizzato un errore simile al seguente: "Non è stato possibile connettersi al sistema remoto. Non è stato trovato alcun client comune per l'algoritmo HMAC del server." L'errore può essere visualizzato anche se il server SSH è configurato per l'uso di algoritmi non supportati da Visual Studio.

Il server SSH predefinito nella maggior parte delle distribuzioni Linux moderne deve funzionare con Visual Studio. Tuttavia, è possibile che sia in esecuzione un server SSH precedente configurato per l'uso di algoritmi meno recenti e non sicuri. Nell'esempio seguente viene illustrato come eseguire l'aggiornamento a versioni più sicure.

Nell'esempio seguente il server SSH usa l'algoritmo non sicuro hmac-sha1 , che Visual Studio 16.9 non supporta. Se il server SSH usa OpenSSH, è possibile modificare il /etc/ssh/sshd_config file come illustrato di seguito per abilitare algoritmi più sicuri. Per altri server SSH, vedere la documentazione del server per informazioni su come configurarle.

Prima di tutto, verificare che il set di algoritmi usati dal server includa algoritmi supportati da Visual Studio. Eseguire il comando seguente nel computer remoto per elencare gli algoritmi supportati dal server:

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

Il comando genera un output simile al seguente:

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

L'output elenca tutti gli algoritmi di crittografia, HMAC, scambio di chiavi e chiavi host supportati dal server SSH. Se l'elenco non include algoritmi supportati da Visual Studio, aggiornare il server SSH prima di procedere.

È possibile abilitare gli algoritmi supportati da Visual Studio modificando /etc/ssh/sshd_config nel computer remoto. Negli esempi seguenti viene illustrato come aggiungere vari tipi di algoritmi a tale file di configurazione.

Questi esempi possono essere aggiunti ovunque in /etc/ssh/sshd_config. Assicurarsi che siano sulle proprie linee.

Dopo aver modificato il file, riavviare il server SSH (sudo service ssh restart in Ubuntu) e tentare di connettersi di nuovo da Visual Studio.

Esempio di crittografia

Aggiungere: Ciphers <algorithms to enable>
Ad esempio: Ciphers aes128-cbc,aes256-cbc

Esempio di HMAC

Aggiungere: MACs <algorithms to enable>
Ad esempio: MACs hmac-sha2-256,hmac-sha2-512

Esempio di scambio di chiavi

Aggiungere: KexAlgorithms <algorithms to enable>
Ad esempio: KexAlgorithms ecdh-sha2-nistp256,ecdh-sha2-nistp384

Esempio di chiave host

Aggiungere: HostKeyAlgorithms <algorithms to enable>
Ad esempio: HostKeyAlgorithms ecdsa-sha2-nistp256,ecdsa-sha2-nistp384

Registrazione per le connessioni remote

È possibile abilitare la registrazione per risolvere i problemi di connessione. Sulla barra dei menu selezionare Opzioni strumenti>. Nella finestra di dialogo Opzioni selezionare Registrazione multipiattaforma>:

Screenshot della schermata delle opzioni di Visual Studio.

Le opzioni sono aperte a Registrazione > Gestione connessioni > multipiattaforma. L'abilitazione della registrazione è selezionata, viene controllato il log in un file, la directory logfile viene impostata sulla cartella documents e si accede al riquadro "Registrazione multipiattaforma" nella finestra di output è selezionata.

I log includono le connessioni, tutti i comandi inviati al computer remoto (testo, codice di uscita e tempo di esecuzione) e tutto l'output da Visual Studio alla shell. La registrazione funziona per qualsiasi progetto CMake multipiattaforma o per un progetto Linux basato su MSBuild in Visual Studio.

È possibile configurare l'output per passare a un file o al riquadro Registrazione multipiattaforma nella finestra Output. Per i progetti Linux basati su MSBuild, i comandi MSBuild inviati al computer remoto non vengono indirizzati alla finestra di output perché vengono generati out-of-process. Vengono invece registrati in un file, con un prefisso "msbuild_".

Utilità della riga di comando per il Gestione connessioni

Visual Studio 2019 versione 16.5 o successiva: ConnectionManager.exe è un'utilità della riga di comando per gestire le connessioni di sviluppo remoto all'esterno di Visual Studio. È utile per attività come il provisioning di un nuovo computer di sviluppo. In alternativa, è possibile usarlo per configurare Visual Studio per l'integrazione continua. Per esempi e un riferimento completo al comando Connessione ionManager, vedere informazioni di riferimento su Connessione ionManager.

TCP Port Forwarding

Il rsync comando viene usato sia dai progetti Linux basati su MSBuild che dai progetti CMake per copiare le intestazioni dal sistema remoto a Windows per l'uso da Parte di IntelliSense. Quando non è possibile abilitare il port forwarding TCP, disabilitare il download automatico delle intestazioni remote. Per disabilitarla, usare Strumenti > Opzioni > multipiattaforma > Gestione connessioni > Gestione intestazioni remote intelliSense. Se il sistema remoto non dispone dell'inoltro delle porte TCP abilitato, questo errore viene visualizzato quando inizia il download di intestazioni remote per IntelliSense:

Screenshot di un messaggio di errore di Visual Studio che indica che non è stato possibile aprire il canale SSH. Viene fornito il percorso di un file di log.

rsync viene usato anche dal supporto CMake di Visual Studio per copiare i file di origine nel sistema remoto. Se non è possibile abilitare il port forwarding TCP, è possibile usare sftp come metodo di origine di copia remota. sftp è spesso più lento di rsync, ma non ha una dipendenza dal port forwarding TCP. È possibile gestire il metodo delle origini di copia remota con la remoteCopySourcesMethod proprietà nell'editor Impostazioni CMake. Se il port forwarding TCP è disabilitato nel sistema remoto, viene visualizzato un errore nella finestra di output di CMake la prima volta che richiama rsync.

Screenshot della finestra di output di Visual Studio che mostra un messaggio di errore Rsync.

La finestra di output include questi messaggi: verificare che l'inoltro TCP sia abilitato nel server, rsync: non è stato visualizzato il messaggio di saluto del server, errore rsync: errore durante l'avvio del protocollo client-server (codice 5) in main.c(1675) [sender=3.1.3], non è stato possibile aprire un canale SSH.

gdbserver può essere usato per il debug nei dispositivi incorporati. Se non è possibile abilitare il port forwarding TCP, è necessario usare gdb per tutti gli scenari di debug remoto. gdb viene usato per impostazione predefinita durante il debug di progetti in un sistema remoto.

Il supporto linux di Visual Studio ha una dipendenza dall'inoltro delle porte TCP. Sia rsync che gdbserver sono interessati se il port forwarding TCP è disabilitato nel sistema remoto. Se questa dipendenza influisce sull'utente, votare per questo ticket di suggerimento nella community degli sviluppatori.

Connettersi a WSL

In Visual Studio 2017 si usano gli stessi passaggi per connettersi a WSL usati per un computer Linux remoto. Usare localhost per il nome host.

A partire da Visual Studio 2019 versione 16.1, Visual Studio offre supporto nativo per l'uso di C++ con il sottosistema Windows per Linux (WSL). Ciò significa che è possibile compilare ed eseguire il debug direttamente nell'installazione WSL locale. Non è più necessario aggiungere una connessione remota o configurare SSH. Informazioni dettagliate su come installare WSL sono disponibili qui.

Per configurare l'installazione di WSL per l'uso con Visual Studio, sono necessari gli strumenti seguenti installati: gcc o clang, makegdb, , ninja-build (necessari solo per i progetti CMake che usano Visual Studio 2019 versione 16.6 o successiva), rsynce zip. È possibile installarli nelle distribuzioni che usano apt usando questo comando, che installa anche il compilatore g++:

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

Risolvere i problemi di connessione WSL localhost

Quando ci si connette a sottosistema Windows per Linux (WSL) in localhost, è possibile che si verifichi un conflitto con il client Windows ssh sulla porta 22. In WSL modificare la porta che sshprevede le richieste da a 23 in /etc/ssh/sshd_config:

Port 23

Se ci si connette usando una password, assicurarsi che quanto segue sia impostato in /etc/ssh/sshd_config:

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

Dopo aver apportato queste modifiche, riavviare il server SSH (sudo service ssh restart in Ubuntu).

Ripetere quindi la connessione con localhost la porta 23.

Per altre informazioni, vedere Scaricare, installare e configurare il carico di lavoro Linux.

Per configurare un progetto MSBuild per WSL, vedere Configurare un progetto Linux. Per configurare un progetto CMake per WSL, vedere Configurare un progetto CMake Linux. Per seguire le istruzioni dettagliate per la creazione di una applicazione console semplice con WSL, vedere il post di blog introduttivo C++ with Visual Studio 2019 and the Windows Subsystem for Linux (WSL) (C++ con Visual Studio 2019 e il sottosistema Windows per Linux (WSL)).

Vedi anche

Configurare un progetto Linux
Configurare un progetto CMake per Linux
Distribuire, eseguire e sottoporre a debug il progetto Linux
Configurare le sessioni di debug di CMake