您现在的位置是:首页 >技术杂谈 >本地通过Vscode连接服务器完整流程网站首页技术杂谈
本地通过Vscode连接服务器完整流程
[目录]
0.行文概述
Extra.关于cmd和shell的小知识
1.使用VPN进入内网
2.VScode安装Remote-SSH
3.使用SSH连接服务器
4.目录创建与虚拟环境配置
5.文件上传下载
0. 行文概述
在日常科研学习工作中,本地电脑的算力往往是难以胜任对于计算资源要求比较高的计算任务的——于是便需要我们通过本地电脑连接服务器[1]以完成我们的目的。
但是对于非计算机专业的学生的而言,对于如何使用本地电脑控制服务器的流程尚缺乏了解,更别说整个过程中会频繁使用CLI,而网络上的教程大都是散装的。故本文相对系统地先补充了一些关于cmd和shell的小知识(有经验读者可直接略过),随后依照目录的顺序梳理了使用本地电脑连接到服务器并通过Vscode在服务器上运行代码的完整流程。
本文希望达到的目的是:展现一个简明清晰的流程,让连接服务器以及在服务器上跑代码不再是一件琐碎的事情。
Extra.关于cmd和shell的小知识
E.1 命令行 CLI
想必许多读者在最初配置环境时以及学习python
或者C语言时面对命令行CLI (Command Line Interface)都有些不习惯:
本人第一次看到CMD时也是懵逼的
这很正常,因为我们习惯地与电脑交互的方式都是图形交互界面 GUI(Graphical User Interface)的,远比黑屏白字的CLI直观。很容易理解的是,前者必然是在后者的基础上发展起来,毕竟后者用起来的确不如前者简单。
但是显然,在环境配置的过程中,我们是无法避开CLI。当我们配置环境的经验稍微丰富一些之后,就会发现我们遇到过各种各样的 命令行(cmd) (快捷键:Win+R
后在对话框输入cmd
)和 shell (以Powershell为代表,快捷键:Win+R
后在对话框输入powershell
)。
如果你是一个尝试安装网络上的教程训练过神经网络模型的理工科学生,那么势必对于 Anaconda Prompt 和 Anaconda bash 有一定了解。如果你常常在Github上搜索项目,那么势必也常常用到 Git bash 和 Git cmd。
至少对我自己而言,这些看着相似又不知道区别具体在何处的东西是令我困惑的。打个比方,当你尝试创建一个虚拟环境时,(总是服务器繁忙的)DeepSeek告诉你:
很常见的bash操作
这是我就会困惑了:我到底应该用Powershell还是Git bash?cmd里面输入成吗?
我们不妨先来了解一些最基本的概念:广义的Shell 是系统的外壳,是我们与计算机交互的媒介。 最初的计算机是通过直接修改电路的物理交互 之后以「黑屏白字」为代表的早期 Shell ,使用命令行 CLI 进行交互然后以微软、苹果,推动了图形化界面的发展
而说回令我们眼花缭乱的各自CMD和(狭义上的)Shell,其实都是用于与操作系统进行交互的命令行工具,但它们有所不同。下面是它们的定义及异同:
-
CMD(命令提示符)
CMD 是 Windows 操作系统中的命令行界面,也被称为命令提示符。它允许用户通过输入命令与计算机进行交互,执行一些管理任务、文件操作、程序启动等。CMD 是基于 DOS(磁盘操作系统)的一部分,通常提供一组基础命令。
-
常见命令:如
dir
、cd
、copy
、del
等。 -
功能:主要用于管理文件系统、执行简单的批处理脚本。
-
界面:基于文本的用户界面,用户通过输入命令与系统交互。
-
限制:功能相对简单,不如其他 Shell 灵活。
-
-
Shell
Shell 是 Unix 或 Linux 系统中的命令行界面(但实际上 Windows 自带了一些类似于 Unix/Linux 系统中的 Shell 工具,例如Powershell),提供一个解释器来处理用户输入的命令。Shell 比 CMD 更强大和灵活,可以通过脚本语言自动化任务,支持更复杂的功能和操作。
-
常见 Shell:如 Bash(Bourne Again Shell)、Zsh(Z Shell)、Fish(Friendly Interactive Shell)等。
-
功能:不仅可以运行单个命令,还支持管道、重定向、控制结构(如 if、for 等)和复杂的脚本编程。
-
界面:也是基于文本的界面,但比 CMD 提供更多的功能和配置选项。
-
灵活性:Shell 支持强大的脚本编写和编程功能。
-
我们可以简单总结一下:两者都是我们黑屏白字地与电脑进行交互的方式(CLI),但是shell的功能要比cmd强大得多。
E.2 各种cmd和shell
下表格列出了常用的各种cmd和shell之间的关系:
工具 | 分类 | 语法 | 用途 | 特点 |
---|---|---|---|---|
CMD(命令提示符) | CMD | 基本 DOS 命令集,如 dir ,cd ,copy | 系统管理、文件操作、批处理脚本 | 功能简单,主要处理文本操作,适合执行基础命令 |
PowerShell | Shell | PowerShell 脚本语言,命令之间传递对象,支持管道 | 系统管理、自动化任务、管理远程机器、复杂脚本 | 面向对象的编程,支持强大的脚本功能,管道传递对象,比 CMD 更强大和灵活 |
Anaconda Prompt | CMD | 基本 CMD 命令,支持 Conda 环境管理命令 | Python 环境管理、安装库和依赖、启动 Jupyter Notebook | 主要用于 Python 环境管理和包管理 |
Anaconda Bash | Shell | 基于 Bash 的语法(与 Linux 的 Bash 相似) | 用于运行 Linux 风格的命令、支持 Conda 环境管理 | 类似 Linux Shell,适合在 Windows 上运行 Linux 命令 |
Git Bash | Shell | 基于 Bash 的语法,支持 Git 命令和 Unix 风格命令 | 使用 Git 进行版本控制、运行 Unix 风格的命令 | 提供 Unix 风格的命令行工具,支持 Git 操作,适用于开发者 |
Git CMD | CMD | Git 命令行工具,基本 CMD 命令集 | 使用 Git 进行版本控制(命令行操作),适合需要简单命令的开发者 | 基于 CMD 提供 Git 命令支持,适合基础用户 |
1.使用VPN进入内网
作为第一步的并非是将本地电脑与服务器直接相连,而是通过VPN进入内网。
我们的服务器常常在私有网络之中(对于服务器是一一种),但是我们的本地电脑一般在公共网络(例如学校的网络)。所以第一步是使用VPN进入服务器所在的私有网络。
推荐通过easy-tier,easy-tier官方文档[2]。这是一个简单好用的(有GUI界面)开源VPN
easy-tier
当然,为了成功进入内网,你自然需要导师/师兄告诉你网络名称与密码。
注意,为了确保我们成功通过VPN进入到了服务器的网络之中,我们可以通过在cmd或者bash中进行ping
的操作:
# 假如192.168.1.100 是你的服务器IP地址
ping 192.168.1.100
# 也可以直接 ping 主机名
ping WoAiBingGan
如果成功进入了,那么ping
完的结果则会是
连接成功
如果未能成功进入,那么ping
完的结果则会是
未能成功进入
2.VScode安装Remote-SSH
考虑到我们写代码的环境一般都是在Vscode中,所以现在我们需要在VScode中安装Remote-SSH,具体原因下一节再介绍。
VScode的下载可以参考VScode官网[3]。下载好VScode后,我们按照如下方式安装Remote-SSH:
3.使用Remote-SSH连接服务器
进入内网之后,我们下一步是通过SSH即Secure Shell将本地电脑连接到服务器上。考虑到在以后我们会经常用到SSH,故先对其进行一个简单的介绍。
Secure Shell(SSH) 是由IETF(The Internet Engineering Task Force) 制定的建立在应用层基础上的安全网络协议。它是专为远程登录会话(甚至可以用Windows远程登录Linux服务器进行文件互传)和其他网络服务提供安全性的协议,可有效弥补网络中的漏洞。通过SSH,可以把所有传输的数据进行加密,也能够防止DNS欺骗和IP欺骗。还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。目前已经成为Linux系统的标准配置。希望进一步了解SSH的读者可以参考SSH简介[4]。
言简意赅地解释就是,SSH就类似于我们的电脑与服务器之间的一个通道。所以事实上,建立该通道的方式其实可以非常简单:在cmd或者bash中输入下列格式的代码:
ssh username@serverip
-
username
为你的用户名 -
serverip
为服务器IP,用主机名也可以 -
如果你的账户是服务器的管理者创建的(也就是师兄师姐),那么不用担心,上面两者师兄师姐都会告诉你的,以及接下来会用到的密码。
当你输入了上述代码后,下一步是输入密码:
在此处存在一个小小的trick:你输入的密码是不会显示的,即光标会一直停留在冒号前。切莫以为是无法输入。
当你成功输入了密码之后,也就成功地连接到了服务器。但是问题是:现在我们操作服务器的方式就只有一个命令行,对于非计算机专业的学生,难道真要我们在命令行里面写几千行python
代码?
所以我们需要使用Vscode的Remote-SSH来连接,这样才可以直接在Vscode中写代码来直接在服务上运行。
当你完成了安装Remote-SSH的操作之后,你的Vscode的侧边栏会多出一个远程资源管理器:
然后按住Ctrl+Shift+P
的快捷键后,会弹出搜索框,选择Add New Host:
这里的输入格式与直接使用命令行的格式相同:
接下来的两步操作则分别是:
-
更新SSH配置文件。输入
Enter
后在同一个框中即会弹出几个SSH文件位置的选项。 -
选择Platform。这取决于你服务器的系统,一般是Linux。
上述操作完成后,Vscode会自动打开一个新窗口和新终端,要求你输入密码。输入密码完成后,就已经成功连接上了。
4.虚拟环境配置
具体而言,分为下列步骤:
下面的操作都在连接上服务器之后,点起Vscode中的新建终端,在终端中输入下列代码
-
检查python是否安装
sudo apt update
sudo apt install python3 python3-venv python3-pip
-
创建并进入目录
# 创建目录
mkdir -p /home/username/filename
#进入目录
cd /home/username/filename
-
创建虚拟环境
python3 -m venv env
这将在当前目录下创建一个名为env
的虚拟环境。
-
激活虚拟环境
source env/bin/activate
激活后,你的命令行提示符应该会发生变化,显示 env
表示你已经进入了虚拟环境。
-
接下来就是正常pip安装了。
该部分仅为一个示例,事实上还有更多方法。例如习惯使用conda的读者可以检索如何在服务器上使用conda管理环境。
只要完成上述过程,我们在服务器上跑代码就和在本地跑代码没有任何区别了。
5.文件上传下载
如果你使用的是VScode的Remote-SSH,上传文件可以直接将文件拖入侧栏。如果你有批量上传文件的需求,可以考虑MobaXterm。建议参考MobaXterm详细使用教程[5].
如果你需要将服务器上跑出的结果下载到本地,可以考虑使用SCP(Secure Copy Protocol)。scp
命令是通过 SSH 协议安全地在本地和远程主机之间复制文件。你可以用scp
将文件从服务器下载到本地。
假设你要从服务器下载文件 result.txt
,并将它保存到本地的当前目录。
scp user@10.126.126.2:/path/to/result.txt
-
user@10.126.126.2
是你的服务器用户名和 IP 地址。 -
/path/to/result.txt
是你在服务器上的文件路径。 -
.
表示将文件下载到当前目录(如果你希望下载到其他位置,可以指定其他目录)。
[1]
服务器: https://blog.csdn.net/hephsouidc/article/details/88566749?fromshare=blogdetail&sharetype=blogdetail&sharerId=88566749&sharerefer=PC&sharesource=K_KK_KK_KK&sharefrom=from_link
[2]
easy-tier官方文档: https://easytier.cn/guide/download.html
[3]
VScode官网: https://code.visualstudio.com/
[4]
SSH简介: https://blog.csdn.net/li528405176/article/details/82810342?fromshare=blogdetail&sharetype=blogdetail&sharerId=82810342&sharerefer=PC&sharesource=K_KK_KK_KK&sharefrom=from_link
[5]
MobaXterm详细使用教程: https://blog.csdn.net/xuanying_china/article/details/120080644?fromshare=blogdetail&sharetype=blogdetail&sharerId=120080644&sharerefer=PC&sharesource=K_KK_KK_KK&sharefrom=from_link