通过 SSH 调试远程应用程序
在本教程中,我们将了解如何使用 SSH 隧道在开发机器和远程主机之间建立安全连接,以调试运行在远程主机上的 Web 应用程序。
在远程主机上设置 SSH 服务器
根据远程主机运行的操作系统,配置对其的 SSH 访问。
安装并配置 JetBrains SSH 服务器以进行远程调试——它将快速且安全地在远程主机上启动 SSH,并生成可用于访问主机的访问凭据。
下载 JetBrains SSH 服务器可执行文件 适用于 32 位 Windows 或 适用于 64 位 Windows。
运行可执行文件。 您可以选择使用
-端口参数指定所需端口(例如,jetbrains_debugger_agent_20240726.40.0 -port=1234),否则将随机选择端口。SSH 将启动,您将在输出中看到访问凭据(登录名、密码和端口)。
确保端口可访问:
开发机器和远程主机应位于同一网络中,
或者应配置防火墙/端口转发,以便端口可以从网络外部访问
或者,您可以安装并配置 OpenSSH For Windows。
安装并配置 JetBrains SSH 服务器以进行远程调试——它将快速且安全地在远程主机上启动 SSH,并生成可用于访问主机的访问凭据。
下载 JetBrains SSH 服务器实用程序 适用于 x64 架构的 macOS 或 适用于 M1 架构的 macOS。
使实用程序文件可执行。 例如,在终端中运行
chmod +x jetbrains_debugger_agent_20240726.40.0。运行可执行文件。 您可以选择使用
-端口参数指定所需端口(例如,jetbrains_debugger_agent_20240726.40.0 -port=1234),否则将随机选择端口。SSH 将启动,您将在输出中看到访问凭据(登录名、密码和端口)。
确保端口可访问:
开发机器和远程主机应位于同一网络中,
或者应配置防火墙/端口转发,以便端口可以从网络外部访问
或者,按照 macOS 用户指南中描述的方式手动配置 SSH: 允许远程计算机访问您的 Mac。
安装并配置 JetBrains SSH 服务器以进行远程调试——它将快速且安全地在远程主机上启动 SSH,并生成可用于访问主机的访问凭据。
下载 JetBrains SSH 服务器实用程序 适用于 x64 架构的 Linux、 适用于 arm64 架构的 Linux 或 适用于 arm32 架构的 Linux。
使实用程序文件可执行。 例如,在终端中运行
chmod +x jetbrains_debugger_agent_20240726.40.0。运行可执行文件。 您可以选择使用
-端口参数指定所需端口(例如,jetbrains_debugger_agent_20240726.40.0 -port=1234),否则将随机选择端口。SSH 将启动,您将在输出中看到访问凭据(登录名、密码和端口)。
确保端口可访问:
开发机器和远程主机应位于同一网络中,
或者应配置防火墙/端口转发,以便端口可以从网络外部访问
或者,安装并配置 OpenSSH Server。
创建一个 Web 应用程序
如果您已有一个 Web 应用程序,可以继续使用它。 否则,您可以创建一个示例 ASP .NET MVC 应用程序——从主菜单中选择 并使用 新建解决方案 向导:

配置与远程主机的连接
与远程主机的连接将被两个子系统使用——首先,通过 SFTP 远程部署应用程序,其次,通过 SSH 建立远程调试会话。
按下 Ctrl+Alt+S 或从菜单中选择 (Windows 和 Linux)或 (macOS)。
转到 。
单击 添加
Insert ,选择 SFTP ,并指定一个有助于您识别远程主机的名称。
指定远程主机的地址和访问凭据,以及 根路径——应用程序将在远程主机上部署的路径。 确保此目录在远程主机上存在。 Web 服务器 URL ,您将用于 Web 浏览器访问的路径将自动计算:

在不关闭 设置/首选项 对话框的情况下,转到 。
单击 添加
Insert 并指定远程主机的 SSH 访问凭据。 通常它们与 SFTP 凭据相同:

单击 保存 保存设置并关闭对话框
将应用程序部署到远程主机
要使用 JetBrains Rider 部署应用程序,您需要创建并使用 运行配置。
通过以下方法之一打开 运行/调试配置 对话框:
请选择 从主菜单。
在 Navigation bar 可见 () 的情况下,从运行/调试配置选择器中选择 。
请按 Alt+Shift+F10 然后按 0。
在 运行/调试配置 对话框中,单击 添加新配置
Alt+Insert ,选择 发布到自定义服务器 配置类型,并指定一个名称,以便您将来识别此配置。
确保正确选择了与应用程序对应的项目。
In the 远程服务器 field, select the SFTP access profile that you created in the previous steps on the page of JetBrains Rider 设置 Ctrl+Alt+S.
指定可能因目标机器而异的其他选项:

单击 确定 保存配置并关闭对话框。
现在,您将能够在应用程序准备好或每次修改后将其发布到远程主机。 由于我们使用了 Web 应用程序的样板项目模板,它已准备好发布:

当应用程序部署后,我们可以在远程主机上运行它。
从菜单中选择 ,然后选择 SFTP 访问配置文件。

一个新会话将出现在 终端 窗口中。 假设应用程序的根文件夹是 WebApplication ,请输入以下命令:
cd /[application path]/WebApplication进入应用程序的根文件夹。chmod +x ./WebApplication如果需要,添加可执行位。ASPNETCORE_URLS=http://0.0.0.0:5000 ./WebApplication运行应用程序。

在远程主机上调试应用程序
在您的应用程序中,设置一个断点,当访问其某个页面时应命中该断点。 如果您在本教程开始时创建了一个新的示例项目,可以在
HomeController.cs:28处设置一个断点:
从菜单中选择 ,并选择远程主机和应用程序:

如果调试器成功附加,断点图标将标记为绿色对勾:
。现在,当应用程序运行且调试器已连接时,在浏览器中打开应用程序的 URL
http://[remote host name]:5000,并尝试访问设置断点的页面。
一旦应用程序执行到达断点,它将停止,您将能够调试它:

可选的远程调试工具部署
当调试器连接到运行目标应用程序的远程主机时,它依赖于必须部署在远程主机上的 远程调试工具 (dotnet 可执行文件、Rider 代理及其依赖项)。
如果未找到远程调试工具,调试器将在首次连接到应用程序时静默部署它们: 首次连接时。
然而,在某些情况下,目标环境会在每次连接时更新,例如,如果您在 Docker 容器中调试应用程序,并且每次重建应用程序时都会重建整个 Docker 镜像。
在这种情况下,每次新的调试会话都必须从部署远程调试工具开始,这可能会很慢。
为了避免这种启动延迟,您可以在连接调试器之前手动或自动将远程调试工具部署到目标主机。
使用以下链接之一下载适用于 Windows 的远程调试工具:
将工具解压到目标机器或 Docker 镜像上的 RiderRemoteDebugger 目录中。 例如 %LOCALAPPDATA%\JetBrains\RiderRemoteDebugger\2022.1.1
使用以下链接之一下载适用于 macOS 的远程调试工具:
将工具解压到目标机器或 Docker 镜像上的 RiderRemoteDebugger 目录中。 例如 /.local/share/JetBrains/RiderRemoteDebugger/2022.1.1
对所有解压的文件应用以下命令:
xattr -d com.apple.quarantine FILE_NAME
使用以下链接之一下载适用于 Linux 的远程调试工具:
将工具解压到目标机器或 Docker 镜像上的 RiderRemoteDebugger 目录中。 例如 ~/.local/share/JetBrains/RiderRemoteDebugger/2022.1.1