SSH

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
2
scp ./local_data.npz  username@server_ip:/remote/path
# [1] 这里的本地文件 [2] 这里的远程用户+地址 [3] 冒号后跟远程路径
  • 特点:一次性操作。你必须预先知道文件的确切位置
  • 如果你想传输整个文件夹,需要加 -r(Recursive,递归):scp -r ./my_dataset username@server_ip:/remote/path

2. SFTP (SSH File Transfer Protocol):持续、交互的文件夹管理器

SFTP 就像是一个“远程文件浏览器”。当你输入 sftp username@server_ip 后,你并不是执行一个命令,而是进入了一个新的会话环境

操作流

  1. 登录:sftp zhanxi@192.168.x.x
  2. 查看远程目录:ls
  3. 进入远程目录:cd /remote/data
  4. 把本地文件推上去:put local_file.pkl
  5. 把远程文件下载下来:get remote_file.npz
  6. 退出:exitbye
  • 特点:交互式。你可以在里面来回浏览、创建目录、删除文件,就像在操作本地硬盘一样,但速度受网络延迟影响

C. VS Code 远程开发 (Remote-SSH)

这是目前最高效的开发方式。通过 VS Code 的 Remote-SSH 插件,你可以直接在本地编辑器里打开服务器上的代码文件夹

  • 体验:代码补全、调试(Debug)和终端运行都在服务器上,但交互界面在本地,极大地降低了网络延迟带来的不适感

5. SSH Config 配置文件

当你需要管理多个服务器时,记住 IP 地址是不现实的。通过配置 ~/.ssh/config 文件,可以实现快捷登录

配置示例:

1
2
3
4
5
Host lab-gpu
HostName 192.168.1.100
User zhanxi
IdentityFile ~/.ssh/id_rsa
Port 22

效果:原本冗长的 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