Connettersi al sistema Linux di destinazione in Visual Studio

Il supporto 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 Connetti a WSL .

Quando si usa una connessione remota, Visual Studio compila progetti Linux C++ nel computer remoto. Non importa se è un computer fisico, una macchina virtuale nel cloud o 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, Federal Information Processing Standard (FIPS) 140-2 conformi 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 installarla. Gli esempi in questo articolo usano Ubuntu 18.04 LTS con Il server OpenSSH versione 7.6. Tuttavia, le istruzioni devono essere uguali per qualsiasi distribuzione usando 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 quando il sistema viene avviato, abilitarlo usando systemctl:

    sudo systemctl enable ssh
    

Configurare la connessione remota

  1. In Visual Studio scegliere Opzioni strumenti > nella barra dei menu per aprire la finestra di dialogo Opzioni. Selezionare quindi Cross Platform > Gestione connessioni per aprire la finestra di dialogo Gestione connessioni.

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

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

    Screenshot che mostra il riquadro delle opzioni e CrossPlatform > C più > Gestione connessioni selezionato. Il pulsante Aggiungi è evidenziato.

    In entrambi gli scenari viene visualizzata la finestra Connetti al sistema remoto .

    Screenshot che mostra la finestra Connetti al sistema remoto con campi per nome host, porta, nome utente, tipo di autenticazione e password.

  3. Immettere le seguenti informazioni:

    Voce 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

    È 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. Visual Studio supporta attualmente solo le chiavi RSA e DSA per le connessioni remote.

    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 Connetti per tentare una connessione al computer remoto.

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

    Se la connessione non riesce, le caselle delle voci che devono essere modificate sono evidenziate in rosso.

    Screenshot della finestra Connetti al sistema remoto con il nome host e i campi porta descritti in rosso per indicare che non sono corretti.

    Se si usano i file 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 verrà 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 acquisire familiarità con questo processo se è stato usato il client della riga di comando OpenSSH o PuTTY prima. L'impronta digitale identifica il server. Visual Studio usa l'impronta digitale per assicurarsi che si stia connettendo al server previsto e attendibile.

La prima volta che Visual Studio stabilisce una nuova connessione remota, verrà 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 nella Gestione connessioni e scegliere Verifica.

Se si esegue l'aggiornamento a Visual Studio 16.10 o versione successiva da una versione precedente, vengono considerate le connessioni remote esistenti come nuove connessioni. Verrà richiesto di accettare prima 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, è stato rimosso il supporto per gli algoritmi SSH meno recenti e insicuri usati per crittografare i dati e le chiavi di scambio. Sono supportati solo gli algoritmi seguenti. Sono supportati sia per la comunicazione SSH da client a server che da server a server:

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
ssh-dss
ssh-rsa

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 il primo algoritmo comune a entrambi è selezionato. La connessione ha esito positivo purché sia presente almeno un algoritmo in comune tra Visual Studio e il server per la crittografia, HMAC, lo scambio di chiavi e così via.

Il file di configurazione SSH aperto (sshd_config) non configura l'algoritmo da usare per impostazione predefinita. Il server SSH deve usare impostazioni predefinite sicure quando non vengono specificati algoritmi. Tali 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: "Impossibile connettersi al sistema remoto. Non è stato trovato alcun client comune per il server HMAC. L'errore può essere visualizzato anche se il server SSH è configurato per l'uso di algoritmi che Visual Studio non supporta.

Il server SSH predefinito nelle distribuzioni Linux più moderne deve funzionare con Visual Studio. Tuttavia, è possibile che sia in esecuzione un server SSH meno recente configurato per l'uso di algoritmi meno recenti e non sicuri. Nell'esempio seguente viene illustrato come aggiornare le versioni più sicure.

Nell'esempio seguente il server SSH usa l'algoritmo non sicuro hmac-sha1 , che non è supportato da Visual Studio 16.9. 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 come configurarle.

Verificare innanzitutto 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, è necessario 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 si tratti di linee personalizzate.

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 ssh-dss,ssh-rsa

Registrazione per le connessioni remote

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

Screenshot della schermata Registrazione remota con le opzioni per abilitare la registrazione, il percorso del file di log e se accedere alla finestra di output.

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 di 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 ConnectionManager, vedere Informazioni di riferimento su ConnectionManager.

TCP Port Forwarding

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

Screenshot che mostra un errore che indica che non è stato possibile aprire il canale SSH e un percorso del file di log per altri dettagli.

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 delle impostazioni di CMake. Se il port forwarding TCP è disabilitato nel sistema remoto, verrà visualizzato un errore nella finestra di output di CMake la prima volta che richiama rsync.

Screenshot della finestra di output che mostra un errore Rsync che non è stato possibile aprire il 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 di Linux di Visual Studio ha una dipendenza dal port forwarding TCP. gdbserver Sia rsync che sono interessati se il port forwarding TCP è disabilitato nel sistema remoto. Se questa dipendenza influisce sull'utente, votare per questo ticket di suggerimento su Developer Community.

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, gdb, makeninja-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 sia impostato quanto segue 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).

Riprovare quindi a localhost usare 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)).

Vedere 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