1. 什么是 SSH?
SSH 是一种加密的网络传输协议。它允许你在不安全的网络环境中,建立起一条从本地计算机到远程计算机的安全加密信道
- 核心功能:远程登录会话(Remote Login)和远程命令执行
- 安全性:SSH 对所有传输的数据进行加密,有效防止了密码拦截、中间人攻击(MITM)和数据篡改
2. SSH 与服务器的关系:客户端-服务器模型
SSH 运作基于典型的 Client-Server(客户端-服务器) 模型:
A. 服务端 (SSH Server)
远程服务器(例如实验室的计算节点或云端物理机)运行着一个名为 sshd 的后台守护进程。它时刻监听特定的端口(默认是 22 端口),等待连接请求
B. 客户端 (SSH Client)
你的本地设备(如运行 WSL 2 的笔记本电脑)。你通过 SSH 客户端程序发起连接,验证身份后,即可在本地终端操作远程服务器
3. 身份验证:密码 Vs. 密钥
建立 SSH 连接时,验证身份主要有两种方式:
| 方式 | 逻辑 | 安全性 | 便捷性 |
|---|---|---|---|
| 密码验证 | 每次登录输入服务器账号密码。 | 较低(易受暴力破解攻击)。 | 较低(需频繁输入)。 |
| 密钥验证 (推荐) | 使用非对称加密:本地存私钥(Private Key),服务器存公钥(Public Key)。 | 极高(理论上不可破解)。 | 极高(配合 SSH Agent 可实现免密登录)。 |
4. SSH 的应用场景
A. 远程终端访问
通过命令行直接操控服务器,就像操作本地的 Linux 终端一样
1 | ssh username@server_ip |
B. 文件传输 (SCP/SFTP)
基于 SSH 协议的安全文件拷贝
1. SCP (Secure Copy):单次、快速的指令搬运
SCP 就像是一个“快递员”。你告诉他:从哪里取件(本地路径),送到哪里(远程地址和路径)。任务完成后,连接立刻关闭
1 | scp ./local_data.npz username@server_ip:/remote/path |
- 特点:一次性操作。你必须预先知道文件的确切位置
- 如果你想传输整个文件夹,需要加
-r(Recursive,递归):scp -r ./my_dataset username@server_ip:/remote/path
2. SFTP (SSH File Transfer Protocol):持续、交互的文件夹管理器
SFTP 就像是一个“远程文件浏览器”。当你输入 sftp username@server_ip 后,你并不是执行一个命令,而是进入了一个新的会话环境
操作流
- 登录:
sftp zhanxi@192.168.x.x - 查看远程目录:
ls - 进入远程目录:
cd /remote/data - 把本地文件推上去:
put local_file.pkl - 把远程文件下载下来:
get remote_file.npz - 退出:
exit或bye
- 特点:交互式。你可以在里面来回浏览、创建目录、删除文件,就像在操作本地硬盘一样,但速度受网络延迟影响
C. VS Code 远程开发 (Remote-SSH)
这是目前最高效的开发方式。通过 VS Code 的 Remote-SSH 插件,你可以直接在本地编辑器里打开服务器上的代码文件夹
- 体验:代码补全、调试(Debug)和终端运行都在服务器上,但交互界面在本地,极大地降低了网络延迟带来的不适感
5. SSH Config 配置文件
当你需要管理多个服务器时,记住 IP 地址是不现实的。通过配置 ~/.ssh/config 文件,可以实现快捷登录
配置示例:
1 | Host lab-gpu |
效果:原本冗长的 ssh zhanxi@192.168.1.100 简化为 ssh lab-gpu
5. SSH 隧道 (Tunneling/Port Forwarding)
有些可视化工具(如 TensorBoard 或某些 3D 渲染 Web 端)运行在服务器的特定端口上。通过 SSH 隧道,你可以将服务器的端口映射到本地浏览器访问
示例:将服务器的 6006 端口(TensorBoard)映射到本地:
1 | ssh -L 6006:localhost:6006 username@server_ip |