Verbinding maken met uw linux-doelsysteem in Visual Studio
Linux-ondersteuning is beschikbaar in Visual Studio 2017 en hoger.
U kunt een Linux-project configureren om te richten op een machine op afstand of het Windows-subsysteem voor Linux (WSL). Voor zowel externe machines als voor WSL moet u een externe verbinding instellen in Visual Studio 2017.
U kunt een Linux-project configureren om te richten op een externe machine of het Windows-subsysteem voor Linux (WSL). Voor een externe computer moet u een externe verbinding instellen in Visual Studio. Als u verbinding wilt maken met WSL, gaat u verder naar de sectie Verbinding maken met WSL.
Wanneer u een externe verbinding gebruikt, bouwt Visual Studio C++ Linux-projecten op de externe computer. Het maakt niet uit of het een fysieke machine, een virtuele machine in de cloud of WSL is. Visual Studio kopieert de broncode naar uw externe Linux-computer om het project te bouwen. Vervolgens wordt de code gecompileerd op basis van Visual Studio-instellingen.
Notitie
Vanaf Visual Studio 2019 versie 16.5 biedt Visual Studio ondersteuning voor veilige, fips-compatibele cryptografische verbindingen (Federal Information Processing Standard) 140-2 met Linux-systemen voor externe ontwikkeling. Om een FIPS-conforme verbinding te gebruiken, volgt u in plaats daarvan de stappen in FIPS-conforme veilige externe Linux-ontwikkeling instellen.
De SSH-server instellen op het externe systeem
Als ssh
nog niet is ingesteld en wordt uitgevoerd op uw Linux-systeem, volgt u deze stappen om het te installeren. In de voorbeelden in dit artikel wordt Ubuntu 18.04 LTS gebruikt met OpenSSH-serverversie 7.6. De instructies moeten echter hetzelfde zijn voor elke distributie met behulp van een redelijk recente versie van OpenSSH.
Installeer en start de OpenSSH-server op het Linux-systeem:
sudo apt install openssh-server sudo service ssh start
Als u wilt dat de ssh-server automatisch wordt gestart wanneer het systeem wordt opgestart, schakelt u deze in met behulp van systemctl:
sudo systemctl enable ssh
De externe verbinding instellen
Kies in Visual Studio Extra > Opties op de menubalk om het dialoogvenster Opties te openen. Selecteer vervolgens Cross Platform > Connection Manager om het dialoogvenster Verbindingsbeheer te openen.
Als u nog geen verbinding hebt ingesteld in Visual Studio, wordt het dialoogvenster Verbindingsbeheer voor u geopend wanneer u uw project voor de eerste keer bouwt.
Kies in het dialoogvenster Verbindingsbeheer de knop Toevoegen om een nieuwe verbinding toe te voegen.
In het deelvenster Opties is CrossPlatform > C++ > Verbindingsbeheer geselecteerd en is de knop Toevoegen gemarkeerd.
Als u een bestaande verbinding wilt bewerken, kiest u Bewerken. In beide scenario's wordt het venster Verbinding maken met extern systeem weergegeven.
In het venster Verbinding maken met extern systeem zijn er velden voor hostnaam, poort, gebruikersnaam, verificatietype en wachtwoord. Poort is ingesteld op 22. Het verificatietype is ingesteld op 'Wachtwoord'.
Voer de volgende gegevens in:
Ingang Beschrijving hostnaam Naam of IP-adres van uw doelapparaat poort Poort waarop de SSH-service wordt uitgevoerd, meestal 22 gebruikersnaam Gebruiker die moet worden geverifieerd als verificatietype Wachtwoord en persoonlijke sleutel worden beide ondersteund wachtwoord Wachtwoord voor de ingevoerde gebruikersnaam persoonlijke sleutelbestand Persoonlijke-sleutelbestand gemaakt voor ssh-verbinding wachtwoordzin Wachtwoordzin die wordt gebruikt met een persoonlijke sleutel die hierboven is geselecteerd U kunt niet op de knop Verbinden klikken totdat alle vereiste velden zijn voltooid en de poort is ingesteld op een geheel getal tussen 1 en 65535.
U kunt een wachtwoord of een sleutelbestand en wachtwoordzin voor verificatie gebruiken. Sleutelbestanden zijn veiliger dan gebruikersnaam/wachtwoord. Als u al een sleutelpaar hebt, is het mogelijk om het opnieuw te gebruiken.
Versies van Visual Studio vóór 17.10 ondersteunen Elliptic Curve (EC), Rivert-Shamir-Adleman (RSA) en DSA-sleutels (Digital Signature Algorithm) voor externe verbindingen. Vanwege beveiligingsproblemen worden DSA-sleutels niet meer ondersteund in VS 17.10 en hoger. RSA-sleutels werden ook niet ondersteund in VS 17.10 en VS 17.11, maar sommige typen worden opnieuw ondersteund in VS 17.12 en hoger. Als u een sleutelpaar wilt maken dat compatibel is met het verbindingsbeheer, kunt u de volgende opdracht gebruiken:
ssh-keygen -m pem -t ecdsa -f <key-name>
Notitie
Als u
ssh-keygen
gebruikt om de persoonlijke sleutel te maken, moet u de switch opgeven-m pem
of wordt de sleutel niet geaccepteerd door Visual Studio. Als uw persoonlijke sleutel begint met-----BEGIN OPENSSH PRIVATE KEY-----
, moet u deze converteren metssh-keygen -p -f <FILE> -m pem
.Kies de knop Verbinding maken om verbinding te maken met de externe computer.
Als de verbinding slaagt, configureert Visual Studio IntelliSense voor het gebruik van de externe headers. Voor meer informatie, zie IntelliSense voor headers op externe systemen.
Als de verbinding mislukt, wordt er een informatiebalk met foutinformatie weergegeven en worden de velden die u mogelijk moet wijzigen rood weergegeven.
Als u sleutelbestanden gebruikt voor verificatie, controleert u of de SSH-server van de doelcomputer wordt uitgevoerd en juist is geconfigureerd.
Als u problemen ondervindt bij het maken van verbinding met WSL op
localhost
, raadpleegt u Verbindingsproblemen met WSLlocalhost
oplossen.
Verificatie van hostsleutels
In Visual Studio versie 16.10 of hoger wordt u gevraagd om de vingerafdruk van de hostsleutel van de server te controleren wanneer Visual Studio voor het eerst verbinding maakt met een extern systeem. Mogelijk bent u bekend met dit proces als u de OpenSSH-opdrachtregelclient of PuTTY eerder hebt gebruikt. De vingerafdruk identificeert de server. Visual Studio gebruikt de vingerafdruk om ervoor te zorgen dat deze verbinding maakt met de beoogde en vertrouwde server.
De eerste keer dat Visual Studio een nieuwe externe verbinding tot stand brengt, wordt u gevraagd de vingerafdruk van de hostsleutel te accepteren of te weigeren die door de server wordt weergegeven. Of wanneer er wijzigingen in een vingerafdruk in de cache zijn. U kunt ook een vingerafdruk op aanvraag controleren: selecteer een verbinding in Verbindingsbeheer en kies Controleren.
Als u een upgrade uitvoert naar Visual Studio 16.10 of hoger vanuit een oudere versie, worden bestaande externe verbindingen behandeld als nieuwe verbindingen. U wordt gevraagd eerst de vingerafdruk van de hostsleutel te accepteren. Vervolgens brengt Visual Studio een verbinding tot stand en slaat de geaccepteerde vingerafdruk in de cache op.
U kunt externe verbindingen ook bijwerken vanuit ConnectionManager.exe
met behulp van het argument update
.
Ondersteunde SSH-algoritmen
Vanaf Visual Studio versie 16.9 wordt ondersteuning voor oudere, onveilige SSH-algoritmen die worden gebruikt voor het versleutelen van gegevens en uitwisselingssleutels verwijderd. Alleen de volgende algoritmen worden ondersteund. Ze worden ondersteund voor zowel client-naar-server- als server-naar-client-SSH-communicatie:
Algoritmetype | Ondersteunde algoritmen |
---|---|
Encryptie | aes128-cbc aes128-ctr aes192-cbc aes192-ctr aes256-cbc aes256-ctr |
HMAC | hmac-sha2-256 hmac-sha2-512 |
Sleuteluitwisseling | diffie-hellman-group14-sha256 diffie-hellman-group16-sha512 diffie-hellman-group-exchange-sha256 ecdh-sha2-nistp256 ecdh-sha2-nistp384 ecdh-sha2-nistp521 |
Hostsleutel | ecdsa-sha2-nistp256 ecdsa-sha2-nistp384 ecdsa-sha2-nistp521 rsa-sha2-512 rsa-sha2-256 |
De SSH-server configureren
Eerst een beetje achtergrond. U kunt het SSH-algoritme dat u wilt gebruiken vanuit Visual Studio niet selecteren. In plaats daarvan wordt het algoritme bepaald tijdens de eerste handshake met de SSH-server. Elke zijde (client en server) biedt een lijst met algoritmen die worden ondersteund en vervolgens wordt het eerste algoritme geselecteerd dat voor beide wordt gebruikt. De verbinding slaagt zolang er ten minste één algoritme is tussen Visual Studio en de server voor versleuteling, HMAC, sleuteluitwisseling, enzovoort.
Het open SSH-configuratiebestand (sshd_config
) configureert niet welk algoritme standaard moet worden gebruikt. De SSH-server moet veilige standaardwaarden gebruiken wanneer er geen algoritmen zijn opgegeven. Deze standaardinstellingen zijn afhankelijk van de versie en leverancier van de SSH-server. Als Visual Studio deze standaardinstellingen niet ondersteunt, ziet u waarschijnlijk een foutbericht als: 'Kan geen verbinding maken met het externe systeem. Er is geen algemene client-naar-server-HMAC-algoritme gevonden. De fout kan ook worden weergegeven als de SSH-server is geconfigureerd voor het gebruik van algoritmen die visual Studio niet ondersteunt.
De standaard-SSH-server op de meeste moderne Linux-distributies moet werken met Visual Studio. Mogelijk voert u echter een oudere SSH-server uit die is geconfigureerd voor het gebruik van oudere, onveilige algoritmen. In het volgende voorbeeld wordt uitgelegd hoe u bijwerkt naar veiligere versies.
In het volgende voorbeeld gebruikt de SSH-server het onveilige hmac-sha1
-algoritme, dat visual Studio 16.9 niet ondersteunt. Als de SSH-server OpenSSH gebruikt, kunt u het /etc/ssh/sshd_config
-bestand bewerken, zoals hieronder wordt weergegeven om veiligere algoritmen in te schakelen. Raadpleeg de documentatie van de server voor andere SSH-servers voor het configureren ervan.
Controleer eerst of de set algoritmen die uw server gebruikt, algoritmen bevat die worden ondersteund door Visual Studio. Voer de volgende opdracht uit op de externe computer om de algoritmen weer te geven die door de server worden ondersteund:
ssh -Q cipher; ssh -Q mac; ssh -Q kex; ssh -Q key
De opdracht produceert uitvoer zoals:
3des-cbc
aes128-cbc
aes192-cbc
aes256-cbc
...
ecdsa-sha2-nistp521-cert-v01@openssh.com
sk-ecdsa-sha2-nistp256-cert-v01@openssh.com
De uitvoer bevat alle versleutelings-, HMAC-, sleuteluitwisselings- en hostsleutelalgoritmen die worden ondersteund door uw SSH-server. Als de lijst geen algoritmen bevat die worden ondersteund door Visual Studio, voert u een upgrade uit van uw SSH-server voordat u doorgaat.
U kunt algoritmen die worden ondersteund door Visual Studio inschakelen door /etc/ssh/sshd_config
op de externe computer te bewerken. In de volgende voorbeelden ziet u hoe u verschillende typen algoritmen aan dat configuratiebestand toevoegt.
Deze voorbeelden kunnen overal in /etc/ssh/sshd_config
worden toegevoegd. Zorg ervoor dat ze op hun eigen lijnen staan.
Nadat u het bestand hebt bewerkt, start u de SSH-server (sudo service ssh restart
op Ubuntu) opnieuw op en probeert u opnieuw verbinding te maken vanuit Visual Studio.
Voorbeeld van codering
Toevoegen: Ciphers <algorithms to enable>
Bijvoorbeeld: Ciphers aes128-cbc,aes256-cbc
HMAC-voorbeeld
Toevoegen: MACs <algorithms to enable>
Bijvoorbeeld: MACs hmac-sha2-256,hmac-sha2-512
Voorbeeld van sleuteluitwisseling
Toevoegen: KexAlgorithms <algorithms to enable>
Bijvoorbeeld: KexAlgorithms ecdh-sha2-nistp256,ecdh-sha2-nistp384
Voorbeeld van hostsleutel
Toevoegen: HostKeyAlgorithms <algorithms to enable>
Bijvoorbeeld: HostKeyAlgorithms ecdsa-sha2-nistp256,ecdsa-sha2-nistp384
Logboekregistratie voor externe verbindingen
U kunt logboekregistratie inschakelen om verbindingsproblemen op te lossen. Selecteer in de menubalk Extra > Opties. In het dialoogvenster met Opties, selecteer Cross Platform > Logging:
De opties zijn open voor Cross Platform > Connection Manager > Logging. Logboekregistratie is ingeschakeld, log naar een bestand is geselecteerd, de logboekmap is ingesteld op de map Documenten, en log naar het deelvenster 'Cross Platform Logging' in het uitvoervenster is ingeschakeld.
Logboeken bevatten verbindingen, alle opdrachten die naar de externe computer worden verzonden (hun tekst, afsluitcode en uitvoeringstijd) en alle uitvoer van Visual Studio naar de shell. Logboekregistratie werkt voor elk platformoverschrijdend CMake-project of OP MSBuild gebaseerd Linux-project in Visual Studio.
U kunt de uitvoer configureren om naar een bestand te gaan of naar het deelvenster Cross Platform Logging in het venster Uitvoer. Voor Op MSBuild gebaseerde Linux-projecten worden MSBuild-opdrachten die naar de externe computer worden verzonden, niet doorgestuurd naar het uitvoervenster omdat ze buiten het proces worden verzonden. In plaats daarvan worden ze vastgelegd in een bestand, met het voorvoegsel 'msbuild_'.
Opdrachtregelprogramma voor Verbindingsbeheer
Visual Studio 2019 versie 16.5 of hoger: ConnectionManager.exe
is een opdrachtregelprogramma voor het beheren van externe ontwikkelverbindingen buiten Visual Studio. Dit is handig voor taken zoals het inrichten van een nieuwe ontwikkelcomputer. U kunt het ook gebruiken om Visual Studio in te stellen voor continue integratie. Zie ConnectionManager-verwijzingvoor voorbeelden en een volledige verwijzing naar de opdracht ConnectionManager.
Doorsturen via TCP-poort
De opdracht rsync
wordt gebruikt door zowel OP MSBuild gebaseerde Linux-projecten als CMake-projecten om headers van uw externe systeem naar Windows te kopiëren voor gebruik door IntelliSense. Als u het doorsturen van TCP-poorten niet kunt inschakelen, schakelt u het automatisch downloaden van externe headers uit. Als u dit wilt uitschakelen, gebruikt u Tools > Options > Cross Platform > Connection Manager > Remote Headers IntelliSense Manager. Als het externe systeem tcp-poort doorsturen niet heeft ingeschakeld, wordt deze fout weergegeven wanneer het downloaden van externe headers voor IntelliSense begint:
rsync
wordt ook gebruikt door de CMake-ondersteuning van Visual Studio om bronbestanden naar het externe systeem te kopiëren. Als u het doorsturen van TCP-poorten niet kunt inschakelen, kunt u sftp
gebruiken als de methode voor externe kopieerbronnen.
sftp
is vaak langzamer dan rsync
, maar heeft geen afhankelijkheid van het doorsturen van TCP-poorten. U kunt de methode voor externe kopieerbronnen beheren met de eigenschap remoteCopySourcesMethod
in de CMake Settings Editor. Als doorsturen via TCP-poort is uitgeschakeld op uw externe systeem, wordt er een fout weergegeven in het CMake-uitvoervenster wanneer deze voor het eerst rsync
aanroept.
Het uitvoervenster bevat deze berichten: Controleer of TCP-doorsturen is ingeschakeld op de server, rsync: er is geen begroeting van de server, rsync-fout weergegeven: fout bij het starten van client-serverprotocol (code 5) op main.c(1675) [sender=3.1.3], een SSH-kanaal kan niet worden geopend.
gdbserver
kan worden gebruikt voor foutopsporing op ingesloten apparaten. Als u het doorsturen van TCP-poorten niet kunt inschakelen, moet u gdb
gebruiken voor alle scenario's voor externe foutopsporing.
gdb
wordt standaard gebruikt bij het opsporen van fouten in projecten op een extern systeem.
De Linux-ondersteuning van Visual Studio heeft een afhankelijkheid van het doorsturen van TCP-poorten. Zowel rsync
als gdbserver
worden beïnvloed als tcp-poort doorsturen is uitgeschakeld op uw externe systeem. Als deze afhankelijkheid van invloed is op u, stem dan op dit suggestieticket in de ontwikkelaarscommunity.
Verbinding maken met WSL
In Visual Studio 2017 gebruikt u dezelfde stappen om verbinding te maken met WSL als voor een externe Linux-machine. Gebruik localhost
voor de hostnaam.
Vanaf Visual Studio 2019 versie 16.1 biedt Visual Studio systeemeigen ondersteuning voor het gebruik van C++ met het Windows-subsysteem voor Linux (WSL). Dat betekent dat u rechtstreeks op uw lokale WSL-installatie kunt bouwen en fouten kunt opsporen. U hoeft geen externe verbinding meer toe te voegen of SSH te configureren. U vindt hier meer informatie over hoe u WSL- installeert.
Als u de WSL-installatie wilt configureren voor gebruik met Visual Studio, hebt u de volgende hulpprogramma's geïnstalleerd: gcc
of clang
, gdb
, make
, ninja-build
(alleen vereist voor CMake-projecten met Visual Studio 2019 versie 16.6 of hoger), rsync
en zip
. U kunt ze installeren op distributies die gebruikmaken van apt
met behulp van deze opdracht, waarmee ook de g++ compiler wordt geïnstalleerd:
sudo apt install g++ gdb make ninja-build rsync zip
Verbindingsproblemen met WSL localhost
oplossen
Wanneer u verbinding maakt met het Windows-subsysteem voor Linux (WSL) op localhost
, kan er een conflict optreden met de Windows ssh
-client op poort 22. In WSL, wijzig de poort waarvan ssh
aanvragen verwacht naar 23 in /etc/ssh/sshd_config
:
Port 23
Als u verbinding maakt met een wachtwoord, controleert u of het volgende is ingesteld in /etc/ssh/sshd_config
:
# To disable tunneled clear text passwords, change to no here!
PasswordAuthentication yes
Nadat u deze wijzigingen hebt aangebracht, start u de SSH-server (sudo service ssh restart
op Ubuntu).
Probeer vervolgens opnieuw verbinding te maken met localhost
via poort 23.
Zie De Linux-workload downloaden, installeren en instellenvoor meer informatie.
Zie Een Linux-project configurerenals u een MSBuild-project voor WSL wilt configureren. Zie Een Linux CMake-project configurerenom een CMake-project voor WSL te configureren. Als u stapsgewijze instructies wilt volgen voor het maken van een eenvoudige consoletoepassing met WSL, raadpleegt u dit inleidende blogbericht op C++ met Visual Studio 2019 en het Windows-subsysteem voor Linux (WSL).
Zie ook
een Linux-project configureren
Een Linux CMake-project configureren
uw Linux-project implementeren, uitvoeren en fouten opsporen
CMake-foutopsporingssessies configureren