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 Connetti 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.
Nel sistema Linux installare e avviare il server OpenSSH:
sudo apt install openssh-server sudo service ssh start
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
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.
Nella finestra di dialogo Gestione connessioni scegliere il pulsante Aggiungi per aggiungere una nuova connessione.
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 Connetti al sistema remoto.
Nella finestra Connetti al 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".
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 Connetti 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. I file di chiave sono più sicuri rispetto a nome utente/password. Se si ha già una coppia di chiavi, è possibile riutilizzarla.
Le versioni di Visual Studio precedenti alla 17.10 supportano le chiavi Elliptic Curve (EC), Rivert-Shamir-Adleman (RSA) e Digital Signature Algorithm (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 pem
oppure la chiave non verrà accettata da Visual Studio. Se la chiave privata inizia con-----BEGIN OPENSSH PRIVATE KEY-----
, è necessario convertirla conssh-keygen -p -f <FILE> -m pem
.Scegliere il pulsante Connetti 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.
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>:
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 ConnectionManager, vedere Informazioni di riferimento su ConnectionManager.
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:
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, viene visualizzato un errore nella finestra di output di CMake la prima volta che richiama 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
, make
gdb
, , ninja-build
(necessari solo per i progetti CMake che usano Visual Studio 2019 versione 16.6 o successiva), rsync
e 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 ssh
prevede 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