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 showing the Connection Manager dialog.

    In beiden Fällen wird das Fenster Connect to Remote System (Mit Remotesystem verbinden) angezeigt.

    Screenshot showing the Connect to Remote System window.

  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 entweder ein Kennwort oder eine Schlüsseldatei und eine Passphrase zur Authentifizierung verwenden. In vielen Entwicklungsszenarien ist Kennwortauthentifizierung ausreichend, aber Schlüsseldateien sind sicherer. Wenn Sie bereits über ein Schlüsselpaar verfügen, ist es möglich, dieses wiederzuverwenden. Zurzeit werden von Visual Studio nur RSA- und DSA-Schlüssel für Remoteverbindungen unterstützt.

  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.

    Wenn die Verbindung nicht erfolgreich hergestellt wird, werden die Eintragsfelder, die geändert werden müssen, rot umrandet.

    Screenshot showing a Connection Manager Error.

    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-cbc
aes192-cbc
aes192-ctr
aes256-cbc
aes256-ctr
HMAC hmac-sha2-256
hmac-sha2-256
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
ssh-dss
ssh-rsa

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, müssen Sie ein Upgrade für Ihren SSH-Server durchführen, 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 ssh-dss,ssh-rsa

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 showing Remote Logging.

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 showing a Headers Error.

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 showing an Rsync Error.

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 in 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