资讯动态

PyCharm远程开发教程:SSH连接Linux服务器详解

发布时间:2026/10/21 14:40:07 来源:尧图企业网站定制
1. 什么时候需要远程开发先说清楚这个功能解决什么问题很多刚开始接触 PyCharm 远程开发的人第一反应通常是“我本地能写代码为什么非要连到服务器上”这个问题问得特别好因为如果你不清楚自己为什么要用这个功能你大概率会在配置过程中半途而废或者在踩坑之后觉得“这玩意儿不如本地开发香”。我做远程开发大概是从三年前开始的。那时候跑一个深度学习模型本地笔记本的显卡基本属于“聊胜于无”训练一个简单的模型要等几个小时。后来公司给我分配了一台带 GPU 的 Linux 服务器但问题来了——服务器是命令行环境没有图形界面我总不能一直在终端里用 Vim 写代码吧PyCharm 远程连接 Linux 服务器这个功能就是在那个阶段真正解决了我所有痛点。简单来说PyCharm 远程连接的核心理念是代码在本地写运行在服务器上跑。你在本地 Windows 或 macOS 上打开 PyCharm代码文件会自动同步到远端的 Linux 服务器然后 PyCharm 调用服务器上的 Python 解释器、服务器上的显卡、服务器上的内存来执行你的代码最终把运行结果和调试信息传回本地界面。这意味着什么你的笔记本不需要高性能配置不需要装一堆跟项目相关的系统级依赖只要网络能通到服务器你就能获得和本地开发几乎一致的体验。对于以下这几类场景这个功能几乎是刚需深度学习、模型训练本地没有 GPU或者 GPU 显存不够代码必须在服务器上运行。项目部署在 Linux 环境本地写代码用的是 Windows但生产环境是 Linux代码里有路径分隔符、Linux 特有系统调用等兼容性问题。需要操作服务器上的数据文件数据量几个 TB不可能下载到本地只能让代码在服务器上直接读数据。多人协作开发代码统一放在服务器上大家连上去开发避免每个人本地环境不一致导致的“在我电脑上明明能跑”的尴尬。我在实际使用中感受最深的一点是这个功能让你的开发环境“轻”了很多。以前我总要在本地装 Python 虚拟环境、装各种编译依赖有时候光配环境就要花一整天。现在我把这些脏活累活全部丢给服务器本地只保留一个 PyCharm 客户端干干净净。如果你属于上面四类场景中的任何一种这篇文章应该能帮你少走很多弯路。我会从底层原理开始讲然后逐步拆解整个配置流程最后把我踩过的坑以及在团队里推广这个方案时大家问得最多的问题全部整理出来。保证每一环节都有详细的步骤和解释而不是那种“照着做就行原理你别管”的教程。2. 实现原理拆解SSH、解释器和文件同步的关系2.1 SSH 是整个远程开发的通信地基在动手配置之前我建议你先花五分钟理解 PyCharm 远程开发的底层逻辑这样后面遇到问题的时候就不至于一头雾水。PyCharm 远程连接 Linux 服务器的本质是依赖SSH 协议与服务器建立通信。SSHSecure Shell是一种加密的网络协议专门用于在不安全的网络上安全地运行网络服务。你在配置 PyCharm 远程连接时填写的 IP 地址、端口、用户名和密码最终都是通过 SSH 协议去和服务器进行身份认证。打个比方SSH 就像是你在本地和服务器之间打了一条加密隧道。PyCharm 对服务器的所有操作——包括执行命令、读取文件、启动进程、传输数据——全部通过这条隧道完成。正因为有 SSH 在底层做安全保障你本地的代码和服务器之间的通信才不会被窃听或者篡改。2.2 远程解释器是“灵魂”它决定了代码在哪里执行PyCharm 远程开发的核心组件是远程解释器Remote Interpreter。这个概念一定要理解透所谓“远程解释器”就是 PyCharm 不会使用你本机安装的 Python而是使用 Linux 服务器上指定路径的 Python 程序来执行代码。你在本地通过 PyCharm 点击“运行”按钮时PyCharm 做的事情是通过 SSH 把当前项目的代码文件同步到服务器上的某个目录。在服务器上执行类似cd /project_dir python /project_dir/main.py这样的命令。把服务器上程序的标准输出、错误输出、调试信息全部传回本地 PyCharm 的“运行”窗口。整个过程看起来就像你在本地跑代码一样但实际上程序进程跑在服务器上内存、CPU、GPU 消耗的全都是服务器的资源。这一点非常重要。很多新手配置完远程连接之后发现本地内存还是占满了以为远程没生效其实是因为没有理解“解释器”这个核心概念。你一定要在 PyCharm 的设置里确认当前的 Python 解释器是远程的、指向服务器路径的而不是本地的。2.3 文件同步本地是编辑区服务器是执行区第三个核心概念是文件同步。PyCharm 的远程开发并不是让你在本地编辑服务器上的文件而是维护了两份代码一份在本地一份在服务器上两者通过自动同步机制保持一致性。你可以在 PyCharm 中指定的本地项目目录和服务器上的远程目录之间建立映射关系。默认情况下PyCharm 会在你编辑保存、运行代码、手动触发同步等时机把本地的文件上传到服务器上覆盖对应的远程文件。同样地如果服务器上有文件被修改比如你在命令行里改了某个配置文件你也可以通过“下载”操作同步回本地。这里有个常见的误解有些人以为 PyCharm 远程开发是像远程桌面一样直接操作服务器上的界面或者是像 VS Code Remote 那样在服务器上安装一个后台服务实时同步文件。PyCharm 的做法更轻量——它不需要在服务器上安装额外服务只需要 SSH 可连PyCharm 就能通过 SFTP 协议传输文件。理解了这三点后续的所有配置操作就都有了依据。你在 PyCharm 中做的每项设置本质上都是在回答这三个问题怎么连上服务器SSH、用服务器的哪个 Python 执行程序远程解释器、代码放在服务器的哪个目录路径映射。3. 环境准备服务器和客户端都要做哪些事3.1 服务器端最少需要满足什么条件在开始配置 PyCharm 之前先确认服务器端是否满足最低要求否则后面白费功夫。首先是SSH 服务必须开启。绝大多数 Linux 发行版默认安装了 OpenSSH 服务端但有些精简系统可能没有。在服务器上执行下面这条命令检查systemctl status sshd # 或者 service ssh status如果服务没启动先启动并设置开机自启sudo systemctl start sshd sudo systemctl enable sshd如果提示找不到 sshd 服务说明需要先安装 OpenSSH 服务端。以 Ubuntu/Debian 系为例sudo apt update sudo apt install -y openssh-serverCentOS/RHEL/Fedora 系则用sudo yum install -y openssh-server sudo systemctl start sshd其次是Python 解释器必须已安装。你可以先看看服务器上有哪些 Python 版本python3 --version which python3如果还没安装推荐用系统包管理器安装或者用pyenv、Miniconda 这样的工具来管理。我个人比较推荐在服务器上用 Miniconda 或 Anaconda 来管理 Python 环境理由后面会细说。最后确认你有一个可以用来 SSH 登录的账号。一般情况下就是 root 账号或者你自己的普通用户账号。如果你用的是普通用户注意该用户对目标项目目录要有读写权限。3.2 本地 PyCharm 版本选择与网络连通性验证本地 PyCharm 方面有一点需要明确远程开发功能在 PyCharm 专业版Professional Edition中才是完整可用的。社区版Community Edition虽然免费但只支持本地解释器远程解释器、SSH 部署这些功能全部被砍掉了。如果你手里只有社区版那要么付费升级专业版要么考虑换用 VS Code 的 Remote-SSH 方案那套方案免费功能也很强。专业版可以免费试用 30 天你完全可以先用试用版把流程跑通再决定是否购买。如果你所在的团队有统一采购也可以直接申请授权。选好 PyCharm 版本之后先做一次本地到服务器的连通性测试。打开终端执行ssh 用户名服务器IP地址这次手动 SSH 登录能成功再打开 PyCharm 进行配置。很多人在 PyCharm 里连不上服务器排查半天最后发现是服务器端口没放行、或者本地网络到服务器的通路本来就不通跟 PyCharm 一点关系都没有。先在终端里验证连通性能省掉一大半的排查时间。3.3 密钥登录还是密码登录建议优先配置密钥SSH 的认证方式有两种密码认证和密钥认证。密码认证配置简单输入服务器密码就能连上缺点是每次连接都要输入密码而且密码本身也比密钥更容易泄露。密钥认证的安全性更高而且配合 PyCharm 可以实现免密连接体验会流畅很多。密钥认证的原理是本地生成一对密钥——公钥和私钥公钥上传到服务器私钥留在本地。连接时服务器用公钥验证对方的私钥是否匹配匹配则放行。具体操作分两步。第一步在本地生成密钥对。如果你的电脑上还没有现成的 SSH 密钥执行ssh-keygen -t rsa -b 4096 -C your_emailexample.com一路回车生成的密钥默认存放在~/.ssh/id_rsa私钥和~/.ssh/id_rsa.pub公钥。第二步把公钥内容追加到服务器的授权列表中。在本地执行ssh-copy-id 用户名服务器IP地址如果没有ssh-copy-id命令也可以手动复制公钥内容然后登录服务器把它追加到~/.ssh/authorized_keys文件中。配置完之后再执行一次手动 SSH 登录如果不再提示输入密码说明密钥认证已经生效。后面在 PyCharm 里配置 SSH 连接时就可以选择用私钥文件来认证不再每次输密码。提示私钥文件是最高机密永远不要把它上传到服务器上也不要分享给任何人。一旦私钥泄露就等于把服务器的钥匙交给了别人。4. 核心操作在 PyCharm 中配置 SSH 远程解释器4.1 第一步创建 SSH 连接打开 PyCharm进入File - Settings - Project: 你的项目名 - Python Interpreter。点击右上角的齿轮图标选择Add。在弹出的界面中左侧选择SSH Interpreter然后按照如下方式填写Host服务器 IP 地址PortSSH 端口默认 22Username登录用户名Authentication选择Key pair并选中你的私钥文件或者选择Password直接填服务器密码填完之后点击NextPyCharm 会尝试连接服务器。这一步如果卡在“Connecting...”或者报超时大概率是网络不通、端口未放行或者用户名密码不正确。此时回到前面提到的终端ssh命令先排查连通性。连接成功后PyCharm 会询问你服务器上 Python 解释器的路径以及代码要同步到的远程目录。这两项非常关键接下来单独展开。4.2 第二步选择远程解释器并创建虚拟环境PyCharm 在创建远程解释器时会给你几个选项System interpreter直接使用服务器上的某个 Python 路径。Virtualenv在服务器指定位置创建新的虚拟环境。Conda 环境在服务器上创建 Conda 环境。我个人强烈推荐在服务器上用虚拟环境最好是用 Conda 来管理。做法是在服务器上先创建好一个 Conda 环境然后在 PyCharm 里直接指定这个环境下的 Python 解释器路径。如果服务器上还没有装 Conda也可以让 PyCharm 帮你在远程创建一套新的虚拟环境。这里有个细节需要注意PyCharm 在选择远程解释器时会自动检测服务器上的环境配置但它并不会把你requirements.txt里的依赖自动安装到远程环境里。你需要手动在 PyCharm 的终端里远程执行安装或者通过 SSH 登录服务器后安装依赖。后面我会详细介绍这个方法。创建完远程解释器之后项目里所有 Python 相关的功能——代码补全、类型检查、运行、调试——都会默认使用远程解释器。4.3 第三步设置路径映射和自动同步解释器配置完成后PyCharm 会自动创建一条 Deployment部署配置。你需要确认两件事Local path本地的项目根目录通常是你的 PyCharm 打开的项目路径。Deployment path远程服务器上的目录。一般建议放到/home/用户名/projects/项目名这种可写路径下不要放在/root或者其他权限受限的地方。我习惯把远程目录固定在一个地方比如/home/devuser/projects因为这样换电脑重新配置时远程目录都不用改直接关联旧代码和数据。PyCharm 的同步方式有三种在Tools - Deployment - Options里可以设置On save本地保存文件时自动上传到服务器。On explicit action手动点击上传或下载按钮时同步。On frame deactivation切出 PyCharm 窗口时同步一次。我在日常开发中一般保持“On save 自动上传”打开再配合手动同步按钮。因为如果你写了几行代码不手动触发同步直接点击“运行”PyCharm 虽然会保存文件并上传但某些边界情况下会有遗漏。这里有一个重要的习惯修改任何文件之后回到编辑器先 CtrlS 保存再运行程序。因为远程运行是以服务器上的文件为基准的如果你本地的改动没保存、没同步程序在服务器上跑的还是旧代码你会被这个不匹配坑得很惨。4.4 第四步验证运行环境是否生效配置完成后写一段简单的测试代码来验证远程环境是否真的生效import platform import sys print(当前解释器路径:, sys.executable) print(当前系统平台:, platform.platform())点击运行如果输出显示的系统平台是 Linux、解释器路径指向服务器上的 Python说明远程解释器配置已经成功。此时你可以打开任务管理器或服务器上的htop看看进程会发现这个 Python 进程确实跑在服务器上本机只负责界面显示。5. 调试配置与实用技巧远程环境下如何断点调试5.1 远程运行与远程调试的区别很多人在配置完远程解释器之后就开始直接运行代码但还没意识到运行和调试是两套不同的机制。运行Run只是执行代码输出结果调试Debug则会在断点处暂停允许你查看变量值、单步执行、监视表达式。在远程开发模式下调试也是在远程执行的PyCharm 会在服务器上启动一个调试进程通过网络把调试信息传回本地界面。实际使用中远程调试比远程运行更依赖网络质量。因为断点暂停时你的每一次单步操作都需要在本地和服务器之间来回传输数据。如果网络延迟很高调试体验会非常卡顿。我的经验是日常开发用运行模式验证逻辑遇到复杂 bug 再用调试模式不要全程开着调试模式写代码。5.2 端口转发解决“程序开了端口本地访问不到”的问题远程开发中另一个高频需求是程序在服务器上跑起来了监听了一个端口比如 Flask 的 5000 端口但你想在本地浏览器里访问localhost:5000来预览页面。这就是“端口转发”的场景。PyCharm 的专业版内置了端口转发功能。在Tools - Deployment - Configuration中选择你的 SSH 连接里面有Port Forwarding标签页。添加一条规则本地端口5000远程端口5000如果是远程地址则为 5000 或具体 IP添加之后PyCharm 会通过 SSH 隧道把本地端口的请求转发到服务器上的端口。这样你本地浏览器访问http://localhost:5000就能看到服务器上的服务页面了。这个功能非常实用尤其是配合 Django 开发服务器、Flask API、Jupyter Notebook、TensorBoard 等需要浏览器访问的工具。我已经数不清有多少次是靠 PyCharm 的端口转发在本地浏览器里直接打开了服务器上的 Jupyter 和 TensorBoard。5.3 远程终端直接在 PyCharm 里操作服务器PyCharm 底部有一个Terminal窗口默认打开的是本地终端。如果你想要一个连接到服务器上的终端有现成的功能Tools - Start SSH Session...选择你已配置的 SSH 连接PyCharm 就会在底部打开一个远程 SSH 终端。这个功能的价值在于你不需要单独开一个终端工具去操作服务器直接在 PyCharm 内部完成命令输入。比如你要在服务器上执行pip install xxx、查看日志文件、重启进程直接在这个远程终端里做就行全程不用切出 IDE。而且这个远程终端与你 PyCharm 里的 SFTP 文件操作是互通的属于同一个 SSH 会话文件权限、环境变量一致性方面比外部终端更可靠。我经常在 PyCharm 里左侧用文件浏览器查看服务器目录结构右侧用远程终端执行命令非常顺手。6. 常见问题与排查技巧实录6.1 连接失败十分钟内定位问题PyCharm 远程连接最常遇到的坑就是连接失败。按照我的经验九成的连接失败都出在三类原因上第一类网络不通或端口未放行。在终端手动ssh试试如果终端能连上但 PyCharm 连不上检查 PyCharm 填的端口、地址、用户名是否和终端命令一致。另外确认服务器防火墙是否放行了 22 端口sudo ufw status查看如果是22/tcp被拒绝执行sudo ufw allow 22/tcp放行。第二类认证失败。PyCharm 里配置的密码错误或者私钥路径不对。注意 PyCharm 在使用私钥时私钥文件不能有额外的密码保护否则会在连接时弹窗要你输入私钥密码。如果不想每次输可以在本地把私钥密码取消或者用 SSH agent 来管理。第三类服务器 SSH 配置限制。有些服务器的 OpenSSH 配置会限制登录方式比如禁用密码认证、限制可登录用户、限制来源 IP。检查服务器/etc/ssh/sshd_config里的设置尤其是这几项PasswordAuthentication yes/no PermitRootLogin yes/no AllowUsers username改完配置记得重启 sshd 服务。6.2 文件同步错乱远程目录和本地目录对不上文件同步错乱是最容易让人心态崩溃的问题。表现通常是本地改了代码运行后发现服务器还是旧代码或者服务器上有新增文件本地看不到。我的排查顺序是先确认部署配置里的两个路径是不是你想要的映射关系。路径映射没设置对一切都白搭。查看同步记录Tools - Deployment - Browse Remote Host能直接看到远程目录结构和文件时间戳对比一下本地文件修改时间判断有没有真正上传成功。检查是否触发了“自动上传”。如果你设置了On save自动上传但编辑器焦点不切出、没保存那确实不会同步。手动按CtrlS保存后再运行最稳妥。还有一个容易忽略的细节被.gitignore忽略的文件PyCharm 默认不会上传。如果你的项目里有些文件不在 Git 里但确实需要放到服务器上记得在Deployment - Options里把Skip ignored files选项取消勾选。6.3 依赖包安装远程环境装包的正确姿势在远程开发模式下pip install不能在本地执行因为本地解释器是远程的安装包必须发生在服务器上。有两种方式方式一通过 PyCharm 的包管理界面。在File - Settings - Project - Python Interpreter中选择远程解释器点击下方的号就能搜索并安装 PyPI 上的包。PyCharm 会通过 SSH 隧道在服务器上执行安装命令省去手敲命令的麻烦。方式二在远程终端里执行。我通常用的方式更直接。在 PyCharm 底部Terminal打开远程会话然后conda activate 你的环境名 pip install -r requirements.txt这个方式有个好处你可以直接在服务器上看到安装日志网络错误、编译错误都能第一时间发现而在 PyCharm 的 GUI 里看到的报错有时候不够详细。用pip install安装包含源码编译的包时比如numpy、pandas、lxml服务器上需要安装对应的编译工具链。如果报错信息里出现gcc、build-essential等字样先配置编译环境再说sudo apt install -y build-essential python3-dev6.4 远程虚拟环境混用为什么你装了一个包却 import 不到再说一个我见过无数次的问题在远程终端里用pip install装了包但 PyCharm 运行代码时依然报ModuleNotFoundError。原因基本只有一个装包的 Python 环境和 PyCharm 使用的 Python 环境不是同一个。常见的表现是远程终端默认的python是系统自带的 Python而 PyCharm 里配置的是 Conda 的某个虚拟环境两者是不同的解释器、不同的 site-packages 目录。解决办法是在远程终端里先用下面的命令确认你的当前 Python 和 PyCharm 里配置的路径是否一致which python python -c import sys; print(sys.executable)要装到 PyCharm 对应的那个环境就要先激活正确的 Conda 环境再安装conda activate project_env pip install package_name或者干脆在远程终端里用 PyCharm 解释器的完整路径来执行pip比如/opt/miniconda3/envs/project_env/bin/pip install package_name这样就绝对不会装错环境了。6.5 运行效率比本地还慢两个隐形原因远程开发的体验整体上很流畅但总有用户说“PyCharm 远程跑代码比本地还慢”。我碰到过的案例中真正的问题是这两个第一个网络延迟导致文件同步耗时。如果项目里有大量小文件、静态资源、数据集同步到服务器时会非常慢。解决方案在Deployment - Options里开启“上传时排除某些目录”把不需要同步的目录比如node_modules、.git、data目录排除掉。数据文件放到服务器固定路径代码里去读绝对路径不走 PyCharm 同步。第二个代码执行本身受限于服务器资源。远程开发只是把代码放到服务器上跑服务器本身 CPU、内存、GPU 的性能决定了真正的执行速度。如果你的服务器配置比本地还要差那远程跑得慢是正常的这跟 PyCharm 无关。这里我分享一个我判断问题根因的经验如果点击“运行”之后“启动解释器”阶段花的时间很长那大概率是同步或网络问题如果代码开始执行后速度慢那就是服务器资源问题。两者定位方法完全不同。7. 实战经验总结与个人建议到这里PyCharm 远程连接 Linux 服务器的核心内容基本上讲完了。从 SSH 通信原理、远程解释器配置、文件同步机制到调试、端口转发和常见问题排查每一个环节都是我在实际项目中真正用到过、也真正被坑过的地方。说实话这个功能配置熟练之后整套操作十分钟以内就能完成但它带来的工作方式改变是巨大的——你再也不需要为了一个 GPU 而折腾半天环境也不用为了“本地环境跟服务器不一致”而焦虑。最后再分享一点我在实际使用中的主观体会。远程开发真正舒服的状态是本地做一个干净的“编辑器”服务器做可靠的“运行环境”。不要去本地折腾复杂的虚拟环境不要试图把本地系统调校得跟服务器一模一样那是在浪费时间。代码能不能跑、依赖全不全在服务器上验证就可以了。PyCharm 负责让你在本地依然能获得完整的 IDE 体验这就足够了。如果你现在是刚准备开始接触远程开发的阶段我的建议是先在测试环境或自己的一台小服务器上把整个流程走通包括密钥配置、远程解释器、路径映射、端口转发。这些核心步骤走一遍之后你就能建立起对远程开发模式的整体感觉以后接手真实项目、换新服务器、换新公司整套流程都能直接复用不会慌。不要把远程开发想得太复杂也不要把第一步想得太难配置一次之后你会发现它其实已经成为日常开发中理所当然的一部分了。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑