在Visual Studio中连接到目标Linux系统

Visual Studio 2017及更高版本中提供了Linux支持。

您可以将Linux项目配置为以远程计算机或Windows Linux子系统(WSL)为目标。对于远程计算机和WSL,您需要在Visual Studio 2017中设置远程连接。

您可以将Linux项目配置为以远程计算机或Windows Linux子系统(WSL)为目标。对于远程计算机,您需要在VisualStudio中设置远程连接。要连接到WSL,请跳到连接到WSL第节。

使用远程连接时,Visual Studio会在远程计算机上构建C++Linux项目。不管它是物理机、云中的虚拟机还是WSL。为了构建项目,VisualStudio将源代码复制到远程Linux计算机。然后,根据VisualStudio设置编译代码。

注释

从Visual Studio 2019版本16.5开始,Visual Studio支持与Linux系统的安全、符合联邦信息处理标准(FIPS)140-2的加密连接,以进行远程开发。要使用符合FIPS的连接,请遵循中的步骤设置符合FIPS的安全远程Linux开发而不是。

在远程系统上设置SSH服务器

如果ssh标准尚未在Linux系统上安装并运行,请按照以下步骤进行安装。本文中的示例使用Ubuntu 18.04 LTS和OpenSSH服务器版本7.6。然而,对于任何使用较新版本的OpenSSH的发行版,其说明都应该相同。

  1. 在Linux系统上,安装并启动OpenSSH服务器:

    sudo apt安装openssh-serversudo服务ssh启动
  2. 如果希望ssh服务器在系统引导时自动启动,请使用systemctl启用它:

    sudo systemctl启用ssh

设置远程连接

  1. 在Visual Studio中,选择工具>选项在菜单栏上打开选项对话框。然后选择跨平台>连接管理器打开“连接管理器”对话框。

    如果您以前没有在Visual Studio中设置连接,那么当您第一次生成项目时,Visual Studio会为您打开“连接管理器”对话框。

  2. 在“连接管理器”对话框中,选择添加按钮添加新连接。

    Visual Studio选项窗格的屏幕截图。

    在选项窗格中,选择CrossPlatform>C++>Connection Manager,并突出显示Add按钮。

    要编辑现有连接,请选择编辑。在任何一种情况下连接到远程系统窗口显示。

    Visual Studio连接到远程系统窗口的屏幕截图。

    在连接到远程系统窗口中,有主机名、端口、用户名、身份验证类型和密码字段。端口设置为22。身份验证类型设置为“密码”。

  3. 输入以下信息:

    条目 描述
    主机名 目标设备的名称或IP地址
    端口 运行SSH服务的端口,通常为22
    用户名 要作为身份验证的用户
    身份验证类型 密码和私钥都受支持
    密码 输入用户名的密码
    私钥文件 为ssh连接创建的私钥文件
    密码短语 与上面选择的私钥一起使用的密码短语

    您不能单击连接按钮,直到完成所有必需的字段,并且端口设置为1到65535之间的整数。

    您可以使用密码或密钥文件和密码短语进行身份验证。对于许多开发场景,密码身份验证就足够了,但密钥文件更安全。如果您已经有密钥对,则可以重用它。

    Visual Studio 17.10之前的版本支持用于远程连接的EC、RSA和DSA密钥。出于安全考虑,VS 17.10和更高版本不再支持RSA和DSA密钥。当前仅支持EC密钥。要创建与连接管理器兼容的密钥对,请使用以下命令:ssh密钥生成-m pem-t ecdsa-f<密钥名称>

    注释

    如果使用ssh-密钥要创建私钥,必须指定开关-百万佩姆,否则Visual Studio将不接受该键。如果私钥以开头-----开始打开私钥-----,必须使用转换ssh-keygen-p-f<文件>-m pem.

  4. 选择连接按钮尝试连接到远程计算机。

    如果连接成功,Visual Studio将IntelliSense配置为使用远程标头。有关更多信息,请参阅远程系统上标头的智能感知.

    如果连接失败,将显示一个包含错误信息的信息栏,您可能需要更改的字段将以红色显示。

    Visual Studio连接到远程系统窗口的屏幕截图。主机名和端口字段用红色标出,表示输入不正确。

    如果使用密钥文件进行身份验证,请确保目标机器的SSH服务器正在运行并配置正确。

    如果在上连接WSL时遇到问题本地服务器,请参阅修复WSL本地服务器连接问题.

主机密钥验证

在VisualStudio 16.10版或更高版本中,每当VisualStudio首次连接到远程系统时,都会要求您验证服务器的主机密钥指纹。如果您以前使用过OpenSSH命令行客户端或PuTTY,那么您可能会熟悉这个过程。指纹识别服务器。VisualStudio使用指纹来确保它连接到预期的可信服务器。

VisualStudio第一次建立新的远程连接时,会要求您接受或拒绝服务器提供的主机密钥指纹。或者,当缓存的指纹发生更改时。您也可以按需验证指纹:在连接管理器中选择一个连接,然后选择验证.

如果从旧版本升级到Visual Studio 16.10或更高版本,它会将任何现有的远程连接视为新连接。系统会提示您先接受主机密钥指纹。然后,Visual Studio建立连接并缓存接受的指纹。

您还可以从更新远程连接ConnectionManager.exe(连接管理器.exe)使用更新参数。

支持的SSH算法

从Visual Studio 16.9版开始,不再支持用于加密数据和交换密钥的较旧、不安全的SSH算法。仅支持以下算法。它们同时支持客户端到服务器和服务器到客户端的SSH通信:

算法类型 支持的算法
加密 aes128-cbc标准
aes128-ctr标准
aes192-cbc标准
aes192-ctr标准
aes256-cbc标准
aes256-ctr标准
HMAC公司 hmac-sha2-256型
hmac-sha2-512
密钥交换 diffie-hellman-group14-sha256
diffie-hellman-group16-sha512
diffie-hellman-group-exchange-sha256
ecdh-sha2-nisp256
ecdh-sha2-nisp384
ecdh-sha2-nisp521
主机密钥 ecdsa-sha2-nisp256
ecdsa-sha2-nist384
ecdsa-sha2-nistp521

配置SSH服务器

首先,介绍一下背景。无法从Visual Studio中选择要使用的SSH算法。相反,算法是在与SSH服务器的初始握手期间确定的。每一方(客户端和服务器)都提供了它支持的算法列表,然后选择双方通用的第一个算法。只要VisualStudio和服务器之间至少有一种用于加密、HMAC、密钥交换等的通用算法,连接就会成功。

Open SSH配置文件(sshd_config)不配置默认使用的算法。当没有指定算法时,SSH服务器应该使用安全默认值。这些默认值取决于SSH服务器的版本和供应商。如果Visual Studio不支持这些默认值,您可能会看到类似这样的错误:“Could not connect to the remote system.No common client to server HMAC algorithm was found.”如果将SSH服务器配置为使用Visual Studio不支持的算法,也可能会出现此错误。

大多数现代Linux发行版上的默认SSH服务器应与Visual Studio一起使用。然而,您可能正在运行一个配置为使用旧的不安全算法的旧SSH服务器。以下示例解释了如何更新到更安全的版本。

在下面的示例中,SSH服务器使用不安全的hmac-sha1型Visual Studio 16.9不支持的算法。如果SSH服务器使用OpenSSH,您可以编辑/etc/ssh/sshd_config文件以启用更安全的算法。对于其他SSH服务器,请参阅服务器文档以了解如何配置它们。

首先,验证服务器使用的算法集是否包含VisualStudio支持的算法。在远程计算机上运行以下命令以列出服务器支持的算法:

ssh-Q密码;ssh—Q mac;ssh—Q kex;ssh-Q键

该命令生成如下输出:

3des-cbc公司aes128-cbc标准aes192-cbc标准aes256-cbc标准...ecdsa-sha2-nistp521-cert-v01@openssh.comsk-ecdsa-sha2-nisp256-cert-v01@openssh.com

输出列出了SSH服务器支持的所有加密、HMAC、密钥交换和主机密钥算法。如果列表中不包含Visual Studio支持的算法,请在继续之前升级SSH服务器。

您可以通过编辑启用Visual Studio支持的算法/etc/ssh/sshd_config在远程计算机上。以下示例显示了如何将各种类型的算法添加到该配置文件中。

这些示例可以添加到/etc/ssh/sshd_config.确保他们在自己的线上。

编辑文件后,重新启动SSH服务器(sudo服务ssh重启并尝试从Visual Studio重新连接。

密码示例

添加:密码<要启用的算法>
例如:密码aes128 cbc,aes256 cbc

HMAC示例

添加:MAC<要启用的算法>
例如:MAC hmac-sha2-256、hmac-sha 2-512

密钥交换示例

添加:KexAlgorithms<要启用的算法>
例如:Kex算法ecdh-sha2-nistp256,ecdh-sha2-nistp384

主机密钥示例

添加:HostKeyAlgorithms<要启用的算法>
例如:主机密钥算法ecdsa-sha2-nisp256,ecdsa-sha2-nisp384

远程连接日志记录

您可以启用日志记录以帮助解决连接问题。在菜单栏上,选择工具>选项。在选项对话框,选择跨平台>日志记录:

Visual Studio选项屏幕的截图。

这些选项对跨平台>连接管理器>日志记录打开。选中“启用日志记录”,选中“日志到文件”,将日志文件目录设置为文档文件夹,并选中输出窗口中的“跨平台日志记录”窗格。

日志包括连接、发送到远程计算机的所有命令(其文本、退出代码和执行时间),以及从VisualStudio到shell的所有输出。日志记录适用于Visual Studio中的任何跨平台CMake项目或基于MSBuild的Linux项目。

您可以将输出配置为转到文件或跨平台日志记录“输出”窗口中的窗格。对于基于MSBuild的Linux项目,发送到远程计算机的MSBuild命令不会路由到输出窗口因为它们是在生产过程中排放出来的。相反,它们被记录到一个前缀为“msbuild_”的文件中。

连接管理器的命令行实用程序

Visual Studio 2019 16.5版或更高版本:ConnectionManager.exe(连接管理器.exe)是一个命令行实用程序,用于管理Visual Studio外部的远程开发连接。它对于诸如供应新开发机器之类的任务很有用。或者,您可以使用它来设置Visual Studio以进行持续集成。有关ConnectionManager命令的示例和完整参考,请参阅ConnectionManager参考.

TCP端口转发

这个远程同步命令被基于MSBuild的Linux项目和CMake项目用于将标头从远程系统复制到Windows以供IntelliSense使用。当您无法启用TCP端口转发时,请禁用远程标头的自动下载。要禁用它,请使用工具>选项>跨平台>连接管理器>远程头IntelliSense管理器。如果远程系统没有启用TCP端口转发,则在开始下载IntelliSense的远程标头时会出现此错误:

无法打开SSH通道的Visual Studio错误消息的屏幕截图。提供了日志文件的路径。

远程同步Visual Studio的CMake支持也使用它将源文件复制到远程系统。如果无法启用TCP端口转发,可以使用sftp(sftp)作为远程复制源方法。sftp(sftp)通常比远程同步,但不依赖于TCP端口转发。您可以使用远程复制源方法中的属性CMake设置编辑器。如果远程系统上禁用了TCP端口转发,则CMake输出窗口首次调用时会出现错误远程同步.

显示Rsync错误消息的Visual Studio输出窗口的屏幕截图。

输出窗口包含以下消息:验证服务器上是否启用了TCP转发,rsync:没有看到服务器问候语,rsync错误:在main.c(1675)[sender=3.1.3]处启动客户端-服务器协议(代码5)时出错,SSH通道无法打开。

gdb服务器可用于在嵌入式设备上调试。如果无法启用TCP端口转发,则必须使用gdb公司用于所有远程调试场景。gdb公司默认情况下,在远程系统上调试项目时使用。

Visual Studio的Linux支持依赖于TCP端口转发。两者都有远程同步gdb服务器如果在远程系统上禁用TCP端口转发,则会受到影响。如果这种依赖关系影响到您,请对此投赞成票建议票开发者社区。

连接到WSL

在Visual Studio 2017中,您使用与远程Linux计算机相同的步骤连接到WSL。使用本地服务器对于主机名.

从Visual Studio 2019 16.1版开始,Visual Studio对将C++与Windows Linux子系统(WSL)。这意味着您可以直接在本地WSL安装上进行构建和调试。您不再需要添加远程连接或配置SSH。您可以在上找到详细信息如何安装WSL在这里。

要将WSL安装配置为使用Visual Studio,您需要安装以下工具:海湾合作委员会叮当作响,gdb公司,制作,忍者建筑(仅适用于使用Visual Studio 2019 16.6版或更高版本的CMake项目),远程同步、和拉链。您可以将其安装在使用适当的通过使用此命令,该命令还将安装g++编译器:

sudo apt-install g++gdb make ninja构建的rsync zip

修复WSL本地服务器连接问题

连接到上的Windows Subsystem for Linux(WSL)时本地服务器,您可能会与Windows发生冲突ssh标准端口22上的客户端。在WSL中,更改ssh标准预期请求从到23英寸/etc/ssh/sshd_config:

端口23

如果您使用密码进行连接,请确保在中设置了以下内容/etc/ssh/sshd_config:

#要禁用隧道明文密码,请在此处更改为no!PasswordAuthentication是

进行这些更改后,重新启动SSH服务器(sudo服务ssh重启在Ubuntu上)。

然后重试与的连接本地服务器使用端口23。

有关更多信息,请参阅下载、安装和设置Linux工作负载.

要为WSL配置MSBuild项目,请参见配置Linux项目。要为WSL配置CMake项目,请参阅配置Linux CMake项目。要遵循使用WSL创建简单控制台应用程序的分步说明,请参阅以下介绍性博客文章:带有Visual Studio 2019和Windows Linux子系统(WSL)的C++.

另请参见

配置Linux项目
配置Linux CMake项目
部署、运行和调试Linux项目
配置CMake调试会话