Herstellen einer Verbindung mit dem Linux-Zielsystem in Visual Studio

Die Unterstützung für Linux ist in Visual Studio 2017 und höher verfügbar.

Sie können ein Linux-Projekt für einen Remotecomputer oder ein Windows-Subsystem für Linux (WSL) konfigurieren. Für Remotecomputer und WSL müssen Sie in Visual Studio 2017 eine Remoteverbindung einrichten.

Sie können ein Linux-Projekt für einen Remotecomputer oder ein Windows-Subsystem für Linux (WSL) konfigurieren. Für einen Remotecomputer müssen Sie in Visual Studio eine Remoteverbindung einrichten. Um eine Verbindung mit WSL herzustellen, fahren Sie mit dem Abschnitt Herstellen einer Verbindung mit WSL fort.

Wenn Sie eine Remoteverbindung verwenden, erstellt Visual Studio C++-Linux-Projekte auf dem Remotecomputer. Es spielt keine Rolle, ob es sich um einen physischen Computer, eine VM in der Cloud oder um WSL handelt. Um das Projekt zu erstellen, kopiert Visual Studio den Quellcode auf Ihren Linux-Remotecomputer. Anschließend wird der Code entsprechend der in Visual Studio ausgewählten Einstellungen kompiliert.

Hinweis

Ab Visual Studio 2019, Version 16.5 unterstützt Visual Studio auch sichere, mit FIPS 140-2-kompatible (Federal Information Processing Standard) kryptografische Verbindungen mit Linux-Systemen für die Remoteentwicklung. Um eine mit FIPS kompatible Verbindung zu verwenden, führen Sie stattdessen die Schritte unter Einrichten einer FIPS-konformen sicheren Linux-Remoteentwicklung aus.

Einrichten des SSH-Servers auf dem Remotesystem

Wenn ssh nicht bereits auf Ihrem Linux-System eingerichtet ist und ausgeführt wird, führen Sie die folgenden Schritte aus, um es zu installieren. In den Beispielen in diesem Artikel wird Ubuntu 18.04 LTS mit OpenSSH Server Version 7.6 verwendet. Allerdings sollten die Anweisungen für jede Distribution identisch sein, die eine moderate aktuelle Version von OpenSSH verwendet.

  1. Installieren und starten Sie auf dem Linux-System den OpenSSH-Server:

    sudo apt install openssh-server
    sudo service ssh start
    
  2. Wenn Sie möchten, dass der SSH-Server beim Start des Systems automatisch gestartet wird, aktivieren Sie ihn mithilfe von systemctl:

    sudo systemctl enable ssh
    

Einrichten der Remoteverbindung

  1. Klicken Sie in Visual Studio in der Menüleiste auf Extras > Optionen, um das Dialogfeld Optionen zu öffnen. Wählen Sie dann Plattformübergreifend > Verbindungs-Manager, um das Dialogfeld „Verbindungs-Manager“ zu öffnen.

    Wenn Sie zuvor noch keine Verbindung in Visual Studio eingerichtet haben, öffnet Visual Studio das Dialogfeld „Verbindungs-Manager“, wenn Sie das Projekt erstmals erstellen.

  2. Wählen Sie im Dialogfeld „Verbindungs-Manager“ die Schaltfläche Hinzufügen aus, um eine neue Verbindung hinzuzufügen.

    Screenshot des Optionsbereichs von Visual Studio.

    Im Optionsbereich ist „CrossPlatform“ > „C++“ > „Verbindungs-Manager“ ausgewählt, und die Schaltfläche „Hinzufügen“ ist hervorgehoben.

    Um eine vorhandene Verbindung zu bearbeiten, wählen Sie Bearbeiten aus. In beiden Fällen wird das Fenster Connect to Remote System (Mit Remotesystem verbinden) angezeigt.

    Screenshot des Visual Studio-Fensters „Mit Remotesystem verbinden“.

    Das Fenster „Mit Remotesystem verbinden“ enthält Felder für Hostname, Port, Benutzername, Authentifizierungstyp und Kennwort. Der Port ist auf 22 festgelegt. Der Authentifizierungstyp ist auf „Kennwort“ festgelegt.

  3. Geben Sie die folgenden Informationen ein:

    Eingabe Beschreibung
    Hostname Name oder IP-Adresse des Zielgeräts
    Port Port, auf dem der SSH-Dienst ausgeführt wird, in der Regel Port 22
    Benutzername Zu authentifizierender Benutzer
    Authentifizierungstyp Sowohl das Kennwort als auch der private Schlüssel wird unterstützt.
    Kennwort Kennwort für den eingegebenen Benutzernamen
    Datei für den privaten Schlüssel Für die SSH-Verbindung erstellte private Schlüsseldatei
    Passphrase Passphrase mit dem zuvor ausgewählten privaten Schlüssel

    Sie können erst die Schaltfläche Verbinden auswählen, wenn alle erforderlichen Felder ausgefüllt wurden und der Port auf eine ganze Zahl zwischen 1 und 65535 festgelegt wurde.

    Sie können entweder ein Kennwort oder eine Schlüsseldatei und eine Passphrase zur Authentifizierung verwenden. Schlüsseldateien sind sicherer als Benutzername/Kennwort. Wenn Sie bereits über ein Schlüsselpaar verfügen, ist es möglich, dieses wiederzuverwenden.

    Versionen von Visual Studio vor 17.10 unterstützen Elliptic Curve (EC), Rivert-Shamir-Adleman (RSA) und DSA-Schlüssel (Digital Signature Algorithm) für Remoteverbindungen. Aufgrund von Sicherheitsbedenken werden RSA- und DSA-Schlüssel in VS 17.10 und höher nicht mehr unterstützt. Derzeit werden nur EC-Schlüssel unterstützt. Verwenden Sie den Befehl ssh-keygen -m pem -t ecdsa -f <key-name>, um ein Schlüsselpaar zu erstellen, das mit dem Verbindungs-Manager kompatibel ist.

    Hinweis

    Wenn Sie ssh-keygen zum Erstellen des privaten Schlüssels verwenden, müssen Sie die Option -m pem angeben, da der Schlüssel nicht von Visual Studio akzeptiert wird. Wenn Ihr privater Schlüssel mit -----BEGIN OPENSSH PRIVATE KEY----- beginnt, müssen Sie ihn mit ssh-keygen -p -f <FILE> -m pem konvertieren.

  4. Klicken Sie auf die Schaltfläche Verbinden, um eine Verbindung mit dem Remotecomputer herzustellen.

    Wenn die Verbindung erfolgreich hergestellt wird, konfiguriert Visual Studio IntelliSense für die Verwendung der Remoteheader. Weitere Informationen finden Sie unter IntelliSense für Header auf Remotesystemen.

    Bei einem Verbindungsfehler wird eine Infoleiste mit Fehlerinformationen angezeigt, und die Felder, die Sie möglicherweise ändern müssen, werden rot umrandet.

    Screenshot des Visual Studio-Fensters „Mit Remotesystem verbinden“. Die Felder „Hostname“ und „Port“ sind rot umrandet, um falsche Einträge anzuzeigen.

    Wenn Sie Schlüsseldateien zur Authentifizierung verwenden, stellen Sie sicher, dass der SSH-Server des Zielcomputers ausgeführt wird und ordnungsgemäß konfiguriert ist.

    Wenn Sie Probleme haben, sich mit WSL auf localhost zu verbinden, finden Sie weitere Informationen unter Beheben von WSL-Verbindungsproblemen auf localhost.

Überprüfung des Hostschlüssels

In Visual Studio Version 16.10 oder höher werden Sie aufgefordert, den Hostschlüssel-Fingerabdruck des Servers zu überprüfen, wenn Visual Studio zum ersten Mal eine Verbindung mit einem Remotesystem herstellt. Wenn Sie bereits mit dem OpenSSH-Befehlszeilenclient oder PuTTY gearbeitet haben, kennen Sie dies möglicherweise schon. Der Fingerabdruck identifiziert den Server. Visual Studio verwendet den Fingerabdruck, um sicherzustellen, dass eine Verbindung mit dem vorgesehenen und vertrauenswürdigen Server hergestellt wird.

Beim ersten Herstellen einer neuen Remoteverbindung durch Visual Studio werden Sie aufgefordert, den vom Server bereitgestellten Fingerabdruck des Hostschlüssels zu akzeptieren oder abzulehnen. Dies ist auch dann der Fall, wenn Änderungen an einem zwischengespeicherten Fingerabdruck vorgenommen wurden. Sie können einen Fingerabdruck auch bei Bedarf überprüfen: Wählen Sie im Verbindungs-Manager eine Verbindung aus, und klicken Sie auf Überprüfen.

Wenn Sie eine ältere Version auf Visual Studio 16.10 oder höher aktualisieren, werden alle vorhandenen Remoteverbindungen als neue Verbindungen behandelt. Sie werden aufgefordert, zunächst den Fingerabdruck des Hostschlüssels zu akzeptieren. Anschließend stellt Visual Studio eine Verbindung her und speichert den akzeptierten Fingerabdruck zwischen.

Sie können Remoteverbindungen auch über ConnectionManager.exe mit dem Argument update aktualisieren.

Unterstützte SSH-Algorithmen

Ab Visual Studio Version 16.9 wurde die Unterstützung älterer, unsicherer SSH-Algorithmen eingestellt, die zum Verschlüsseln von Daten und Austauschen von Schlüsseln verwendet wurden. Nur die folgenden Algorithmen werden unterstützt. Sie werden für die SSH-Kommunikation von Client zu Server und Server zu Client unterstützt:

Algorithmustyp Unterstützte Algorithmen
Verschlüsselung aes128-cbc
aes128-ctr
aes192-cbc
aes192-ctr
aes256-cbc
aes256-ctr
HMAC hmac-sha2-256
hmac-sha2-512
Schlüsselaustausch diffie-hellman-group14-sha256
diffie-hellman-group16-sha512
diffie-hellman-group-exchange-sha256
ecdh-sha2-nistp256
ecdh-sha2-nistp384
ecdh-sha2-nistp521
Hostschlüssel ecdsa-sha2-nistp256
ecdsa-sha2-nistp384
ecdsa-sha2-nistp521

Konfigurieren des SSH-Servers

Zunächst erhalten Sie einige Hintergrundinformationen. Sie können den zu verwendenden SSH-Algorithmus nicht über Visual Studio auswählen. Stattdessen wird der Algorithmus während des ersten Handshakes mit dem SSH-Server bestimmt. Jede Seite (Client und Server) stellt eine Liste der unterstützten Algorithmen bereit. Dann wird der erste Algorithmus ausgewählt, der von beiden Seiten unterstützt wird. Solange Visual Studio und der Server für die Verschlüsselung, den HMAC, den Schlüsselaustausch usw. mindestens einen Algorithmus gemein haben, wird die Verbindung erfolgreich hergestellt.

Die OpenSSH-Konfigurationsdatei ( sshd_config ) konfiguriert standardmäßig nicht, welcher Algorithmus verwendet werden soll. Der SSH-Server sollte sichere Standardeinstellungen verwenden, wenn keine Algorithmen festgelegt werden. Diese Standards sind von der Version und dem Anbieter des SSH-Servers abhängig. Wenn Visual Studio diese Standardwerte nicht unterstützt, wird wahrscheinlich ein Fehler angezeigt, z. B. der folgende: „Es konnte keine Verbindung mit dem Remotesystem hergestellt werden. No common client to server HMAC algorithm was found." (Es wurde kein gemeinsamer Client-zu-Server-HMAC-Algorithmus gefunden.) Dieser Fehler kann auch auftreten, wenn der SSH-Server per Konfiguration Algorithmen verwendet, die von Visual Studio nicht unterstützt werden.

Der SSH-Standardserver mit den meisten modernen Linux-Distributionen sollte mit Visual Studio verwendet werden können. Möglicherweise wird jedoch ein älterer SSH-Server ausgeführt, der für die Verwendung älterer, unsicherer Algorithmen konfiguriert ist. Im folgenden Beispiel wird erläutert, wie der Server auf Versionen aktualisiert wird, die mehr Sicherheit bieten.

Im folgenden Beispiel verwendet der SSH-Server den unsicheren hmac-sha1-Algorithmus, der nicht von Visual Studio 16.9 unterstützt wird. Wenn der SSH-Server OpenSSH verwendet, können Sie die /etc/ssh/sshd_config-Datei wie unten gezeigt bearbeiten, um die Verwendung sicherer Algorithmen zu ermöglichen. Informationen zur Konfiguration anderer SSH-Server finden Sie in der jeweiligen Serverdokumentation.

Stellen Sie zunächst sicher, dass sich unter den Algorithmen, die von Ihrem Server verwendet werden, auch von Visual Studio unterstützte Algorithmen befinden. Führen Sie den folgenden Befehl auf dem Remotecomputer aus, um die vom Server unterstützten Algorithmen aufzulisten:

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

Durch den Befehl wird eine Ausgabe wie die folgende generiert:

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

In dieser Ausgabe werden alle Verschlüsselungs-, HMAC-, Schlüsselaustausch- und Hostschlüsselalgorithmen aufgeführt, die von Ihrem SSH-Server unterstützt werden. Wenn die Liste keine von Visual Studio unterstützten Algorithmen enthält, führen Sie ein Upgrade für Ihren SSH-Server durch, bevor Sie fortfahren.

Sie können von Visual Studio unterstützt Algorithmen aktivieren, indem Sie /etc/ssh/sshd_config auf dem Remotecomputer bearbeiten. In den folgenden Beispielen wird veranschaulicht, wie verschiedene Arten von Algorithmen in diese Konfigurationsdatei eingefügt werden.

Diese Beispiele können an beliebiger Stelle in /etc/ssh/sshd_config eingefügt werden. Stellen Sie sicher, dass sie sich in ihren eigenen Zeilen befinden.

Starten Sie den SSH-Server (sudo service ssh restart unter Ubuntu) nach Bearbeitung der Datei neu, und versuchen Sie noch mal, eine Verbindung über Visual Studio herzustellen.

Beispiel für das Verschlüsselungsverfahren

Hinzufügen: Ciphers <algorithms to enable>
Beispiel: Ciphers aes128-cbc,aes256-cbc

HMAC-Beispiel

Hinzufügen: MACs <algorithms to enable>
Beispiel: MACs hmac-sha2-256,hmac-sha2-512

Schlüsselaustauschbeispiel

Hinzufügen: KexAlgorithms <algorithms to enable>
Beispiel: KexAlgorithms ecdh-sha2-nistp256,ecdh-sha2-nistp384

Hostschlüsselbeispiel

Hinzufügen: HostKeyAlgorithms <algorithms to enable>
Beispiel: HostKeyAlgorithms ecdsa-sha2-nistp256,ecdsa-sha2-nistp384

Protokollierung für Remoteverbindungen

Sie können Protokollierung aktivieren, um Verbindungsprobleme zu beheben. Klicken Sie in der Menüleiste auf Extras > Optionen. Klicken Sie im Dialogfeld Optionen auf Plattformübergreifend > Logging:

Screenshot des Visual Studio-Optionsbildschirms.

Die Optionen „Plattformübergreifend“ > „Verbindungs-Manager“ > „Protokollierung“ sind geöffnet. „Protokollierung aktivieren“ und „In Datei protokollieren“ sind aktiviert, das Protokolldateiverzeichnis ist auf den Ordner „documents“ festgelegt, und die Protokollierung ist im Ausgabefenster im Bereich „Plattformübergreifende Protokollierung“ aktiviert.

Protokolle enthalten Verbindungen, alle an den Remotecomputer gesendeten Befehle (Text, Exitcode und Ausführungszeit) sowie die gesamte Ausgabe von Visual Studio an die Shell. Die Protokollierung funktioniert für alle plattformübergreifenden CMake-Projekte oder MSBuild-basierten Linux-Projekte in Visual Studio.

Sie können konfigurieren, ob die Ausgabe in eine Datei oder in den Bereich Plattformübergreifende Protokollierung im Ausgabefenster erfolgen soll. Bei MSBuild-basierten Linux-Projekten werden MSBuild-Befehle, die an den Remotecomputer gesendet werden, nicht an das Ausgabefenster weitergeleitet, weil sie prozessextern gesendet werden. Stattdessen werden sie in eine Datei mit dem Präfix „msbuild_“ protokolliert.

Befehlszeilenhilfsprogramm für den Verbindungs-Manager

Visual Studio 2019, Version 16.5 oder höher: ConnectionManager.exe ist ein Befehlszeilenhilfsprogramm zum Verwalten von Remoteentwicklungsverbindungen außerhalb von Visual Studio. Es ist gut für Aufgaben wie die Bereitstellung eines neuen Entwicklungscomputers geeignet. Sie können es auch zum Einrichten von Visual Studio für Continuous Integration verwenden. Beispiele für den und eine umfassende Referenz zum ConnectionManager-Befehl finden Sie unter ConnectionManager-Referenz.

TCP-Portweiterleitung

Sowohl MSBuild-basierte Linux-Projekte als auch CMake-Projekte verwenden den Befehl rsync, um Header aus Ihrem Remotesystem zur Verwendung für IntelliSense in Windows zu kopieren. Wenn Sie die TCP-Portweiterleitung nicht aktivieren können, deaktivieren Sie den automatischen Download von Remoteheadern. Um den Dowload zu deaktivieren, müssen Sie zu Extras > Optionen > Plattformübergreifend > Verbindungs-Manager > IntelliSense-Manager für Remoteheader navigieren. Wenn im Remotesystem die TCP-Portweiterleitung nicht aktiviert ist, wird der folgende Fehler angezeigt, wenn der Download von Remoteheadern für IntelliSense startet:

Screenshot einer Visual Studio-Fehlermeldung dazu, dass der SSH-Kanal nicht geöffnet werden konnte. Der Pfad zu einer Protokolldatei ist angegeben.

Die CMake-Unterstützung von Visual Studio verwendet rsync ebenfalls, um Quelldateien in das Remotesystem zu kopieren. Wenn Sie die TCP-Portweiterleitung nicht aktivieren können, können Sie sftp als Methode zum Kopieren von Remotequellen verwenden. sftp ist häufig langsamer als rsync, weist aber keine Abhängigkeit von der TCP-Portweiterleitung auf. Sie können Ihre Methode zum Kopieren von Remotequellen mit der remoteCopySourcesMethod-Eigenschaft im CMake-Einstellungs-Editor verwalten. Wenn die TCP-Portweiterleitung in Ihrem Remotesystem deaktiviert ist, wird beim ersten Aufrufen von rsync ein Fehler im CMake-Ausgabefenster angezeigt.

Screenshot des Visual Studio-Ausgabefensters mit einer Rsync-Fehlermeldung.

Das Ausgabefenster enthält die folgenden Meldungen: „Stellen Sie sicher, dass die TCP-Weiterleitung auf dem Server aktiviert ist“. rsync: „Keine Serverbegrüßung“, rsync-Fehler: „Fehler beim Starten des Clientserverprotokolls (Code 5) in main.c (1675) [sender=3.1.3]“, „Ein SSH-Kanal konnte nicht geöffnet werden“.

gdbserver kann zum Debuggen auf eingebetteten Geräten verwendet werden. Wenn Sie die TCP-Portweiterleitung nicht aktivieren können, müssen Sie gdb für alle Remotedebuggingszenarien verwenden. Beim Debuggen von Projekten in einem Remotesystem wird standardmäßig gdb verwendet.

Die Linux-Unterstützung von Visual Studio verfügt über eine Abhängigkeit von der TCP-Portweiterleitung. Wenn die TCP-Portweiterleitung in Ihrem Remotesystem deaktiviert wird, wirkt sich dies auf rsync und gdbserver aus. Wenn Sie von dieser Abhängigkeit betroffen sind, sollten Sie in der Entwicklercommunity für dieses Vorschlagsticket abstimmen.

Herstellen einer Verbindung mit WSL

In Visual Studio 2017 verwenden Sie die gleichen Schritte, um eine Verbindung mit WSL herzustellen, wie Sie für einen Linux-Remotecomputer verwenden würden. Verwenden Sie localhost als Hostname.

Ab Visual Studio 2019, Version 16.1 verfügt Visual Studio über native Unterstützung für die Verwendung von C++ mit dem Windows-Subsystem für Linux (WSL). Das bedeutet, dass Sie den Erstellungs- und den Debugvorgang direkt für Ihre lokale WSL-Installation durchführen können. Es ist nicht mehr erforderlich, eine Remoteverbindung hinzuzufügen oder SSH zu konfigurieren. Weitere Informationen zur Installation von WSL finden Sie hier.

Zum Konfigurieren der WSL-Installation für Visual Studio müssen die folgenden Tools installiert sein: gcc oder clang, gdb, make, ninja-build (nur für CMake-Projekte mit Visual Studio 2019, Version 16.6 oder höher, erforderlich), rsync und zip. Sie können sie für Distributionen installieren, die apt verwenden, indem Sie diesen Befehl verwenden, der auch den g++-Compiler installiert:

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

Beheben von WSL-Verbindungsproblemen auf localhost

Beim Herstellen einer Verbindung mit „Windows-Subsystem für Linux“ (WSL) auf localhostkann es zu einem Konflikt mit dem Windows-Client ssh an Port 22 kommen. Ändern Sie in WSL den Port, von dem ssh Anforderungen erwartet, in /etc/ssh/sshd_config auf 23:

Port 23

Wenn Sie eine Verbindung mit einem Kennwort herstellen, stellen Sie sicher, dass Folgendes in /etc/ssh/sshd_config festgelegt ist:

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

Nachdem Sie diese Änderungen vorgenommen haben, starten Sie den SSH-Server neu (sudo service ssh restart unter Ubuntu).

Versuchen Sie dann erneut, Ihre Verbindung mit localhost an Port 23 herzustellen.

Weitere Informationen finden Sie unter Herunterladen, Installieren und Einrichten der Linux-Workload.

Informationen zum Konfigurieren eines MSBuild-Projekts für WSL finden Sie unter Konfigurieren eines Linux-Projekts. Informationen zum Konfigurieren eines CMake-Projekts für WSL finden Sie unter Konfigurieren eines Linux CMake-Projekts. Eine ausführliche Anleitung für das Erstellen einer einfachen Konsolenanwendung mit WSL finden Sie in diesem Blogbeitrag zur Einführung in C++ mit Visual Studio 2019 und dem Windows-Subsystem für Linux (WSL).

Weitere Informationen

Konfigurieren eines Linux-Projekts
Konfigurieren eines Linux CMake-Projekts
Bereitstellen, Ausführen und Debuggen Ihres Linux-Projekts
Konfigurieren von CMake-Debugsitzungen