在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的发行版,其说明都应该相同。
在Linux系统上,安装并启动OpenSSH服务器:
sudo apt安装openssh-server sudo服务ssh启动
如果希望ssh服务器在系统引导时自动启动,请使用systemctl启用它:
sudo systemctl启用ssh
设置远程连接
在Visual Studio中,选择 工具>选项 在菜单栏上打开 选项 对话框。 然后选择 跨平台>连接管理器 打开“连接管理器”对话框。
如果您以前没有在Visual Studio中设置连接,那么当您第一次生成项目时,Visual Studio会为您打开“连接管理器”对话框。
在“连接管理器”对话框中,选择 添加 按钮添加新连接。
在选项窗格中,选择CrossPlatform>C++>Connection Manager,并突出显示Add按钮。
要编辑现有连接,请选择 编辑 。在任何一种情况下 连接到远程系统 窗口显示。
在连接到远程系统窗口中,有主机名、端口、用户名、身份验证类型和密码字段。 端口设置为22。 身份验证类型设置为“密码”。
输入以下信息:
条目
描述
主机名
目标设备的名称或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
.
选择 连接 按钮尝试连接到远程计算机。
如果连接成功,Visual Studio将IntelliSense配置为使用远程标头。 有关更多信息,请参阅 远程系统上标头的智能感知 .
如果连接失败,将显示一个包含错误信息的信息栏,您可能需要更改的字段将以红色显示。
如果使用密钥文件进行身份验证,请确保目标机器的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
首先,介绍一下背景。 无法从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.com sk-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
远程连接日志记录
您可以启用日志记录以帮助解决连接问题。 在菜单栏上,选择 工具>选项 。在 选项 对话框,选择 跨平台>日志记录 :
这些选项对跨平台>连接管理器>日志记录打开。 选中“启用日志记录”,选中“日志到文件”,将日志文件目录设置为文档文件夹,并选中输出窗口中的“跨平台日志记录”窗格。
日志包括连接、发送到远程计算机的所有命令(其文本、退出代码和执行时间),以及从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的远程标头时会出现此错误:
远程同步
Visual Studio的CMake支持也使用它将源文件复制到远程系统。 如果无法启用TCP端口转发,可以使用 sftp(sftp)
作为远程复制源方法。 sftp(sftp)
通常比 远程同步
,但不依赖于TCP端口转发。 您可以使用 远程复制源方法
中的属性 CMake设置编辑器 。如果远程系统上禁用了TCP端口转发,则CMake输出窗口首次调用时会出现错误 远程同步
.
输出窗口包含以下消息:验证服务器上是否启用了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调试会话