Skip to content

SSH远程连接

什么是SSH?

SSH(Secure Shell),翻译过来就是"安全外壳"。它是一种网络协议,专门用于在不安全的网络环境中安全地访问远程计算机。 简单来说,就是登录服务器的账号,然后可以操纵服务器。

应用场景

  • 远程访问服务器
  • 执行远程命令和自动化
  • 安全地传递文件

等等应用场景。ssh可以说无处不在。

连接方法

SSH 连接服务器有多种方式,不同场景选不同方法:

  1. 密钥对登录 — 使用公钥+私钥认证,最推荐的安全方式(推荐!)
  2. 密码登录 — 传统方式,输入账号密码连接,简单但安全性较低

当然还有其他连接方式,本文不做详谈。 下面重点介绍密钥对登录

密钥对连接

使用 VS Code Remote-SSH 连接

  1. F1Remote-SSH: Connect to Host...Add New SSH Host...

或者点击左下角ssh图标的图标,点击连接到主机

  1. 输入命令:
bash
ssh -i <私钥路> <用户>@<服务器IP>

例如:

bash
ssh -i C:\Users\admin\.ssh\id_rsa root@123.456.789.0
  1. 选择配置文件保存路径,点击连接即可
  2. 首次连接会提示确认主机指纹,输入 yes 回车
  3. 左下角显示 SSH: 服务器IP 即连接成功

使用终端直接连接

bash
ssh -i ~/.ssh/id_rsa root@123.456.789.0

如果想省去每次指定 -i,可以把配置写入 ~/.ssh/config

Host aliyun
    HostName 123.456.789.0
    User root
    IdentityFile ~/.ssh/id_rsa

之后只需 ssh aliyun 即可连接。


ssh实战

下面,我将使用vscode远程连接我的阿里云云服务器。

前置条件

  • 已有VS Code 并且已安装 Remote - SSH 扩展(ms-vscode-remote.remote-ssh
  • 已有阿里云服务器

第一步:生成密钥对

SSH 密钥对由一对文件组成:私钥(自己保管,相当于钥匙)和公钥(放在服务器上,相当于锁)。下面提供两种方式。


方式一:手动生成(使用 ssh-keygen)

适合任何操作系统,推荐大多数场景使用。

  1. 打开终端
  2. 执行以下命令:
bash
ssh-keygen -t rsa -b 4096

参数说明:

  • -t rsa — 指定密钥类型为 RSA
  • -b 4096 — 指定密钥长度为 4096 位(越长越安全)
  • -C — 添加备注(一般填邮箱,方便识别)
  1. 按提示选择保存路径(默认 ~/.ssh/id_rsa,直接回车即可)

生成后会得到两个文件:

文件作用
~/.ssh/id_rsa私钥,绝不能泄露!
~/.ssh/id_rsa.pub公钥,可以安全地告诉任何人
  1. 查看公钥内容:
bash
cat ~/.ssh/id_rsa.pub

复制输出的内容,后续需要添加到阿里云服务器上。


方式二:使用阿里云管理密钥对

适合阿里云 ECS 服务器,可以通过控制台一键创建和绑定。

  1. 登录 阿里云 ECS 控制台
  2. 在左侧菜单找到 网络与安全 → 密钥对
  3. 点击 创建密钥对
  4. 填写:
    • 密钥对名称 — 自定义,如 my-aliyun-key
    • 密钥类型 — 选择 RSA
    • 自动绑定实例 — 暂不绑定
  5. 创建后,浏览器会自动下载一个 .pem 文件(这就是私钥!妥善保管)
  6. 回到实例列表,找到你的服务器,点击 更多 → 网络和安全组 → 绑定密钥对
  7. 选择刚创建的密钥对,绑定即可

⚠️ 阿里云不会保存你的私钥,创建时只会下载一次,务必保存好 .pem 文件


生成密钥对并绑定到服务器后,就可以进行下一步连接了。

第二步:选择平台并输入密码

  • 首次连接会提示选择远程平台(Linux / Windows / macOS),选择 Linux
  • 如果使用密码登录,会弹出密码输入框
  • 如果使用密钥登录且密钥有密码短语(passphrase),也会提示输入

连接成功后,VS Code 左下角会显示 SSH: 服务器IP,此时你就可以像操作本地文件一样管理远程服务器了。

常用操作

操作说明
打开终端`Ctrl + `` 打开远程服务器的终端
浏览文件在 VS Code 资源管理器中直接浏览服务器文件
安装扩展扩展会安装在远程服务器上(独立于本地)
转发端口远程服务(如 3000 端口)可映射到本地访问

断开连接

点击左下角 >< 图标 → Close Remote Connection,或直接关闭窗口即可。

附录:名词解释

密钥对

可以把它想象成 一把锁(公钥)+ 一把钥匙(私钥)

  • 公钥(锁) → 放在服务器上,谁都可以看,但锁本身打不开门
  • 私钥(钥匙) → 放在你自己电脑里,绝对不能给别人

连接时,你用私钥去"开锁",服务器验证配对成功就让你登录。这比密码安全得多——密码有可能被猜到,但私钥几乎不可能被破解(4096 位的 RSA 密钥,用超级计算机算到宇宙毁灭都解不开)。

简单记:公钥上锁,私钥开门。私钥丢了 = 钥匙丢了,服务器就进不去了。

密钥对长什么样?

SSH 密钥对是两个文本文件,用记事本就能打开看。它们长这样(这里是简化示例):

私钥文件(id_rsa / my-key.pem)— 以 -----BEGIN 开头:

-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABFwAAAAdzc2gtcn
NhAAAAAwEAAQAAAQEA3XJf8oVHJFA9GJLLxPdTFn2gCg9vHvMtBNUYyCJJoY3gvK7tW0
...
(一串密密麻麻的字符,可能有几十上百行)
...
-----END OPENSSH PRIVATE KEY-----

公钥文件(id_rsa.pub)— 只有一行:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDdcl/yhUckUD0YksvE91MWfaAKD28e8y0E1RjIIkmhjeC8ru1bQ...(很长一串)... your_email@example.com

末尾的 your_email@example.com备注,由 ssh-keygen-C 参数指定,作用是帮你区分不同密钥(比如"这是公司的"还是"这是个人的")。不加也不影响使用,没指定的话会自动填 用户名@电脑名

服务器账号

跟你的电脑一样,服务器上也有多个账号,每个账号的权限不同。

无论你的本地电脑还是远程服务器,操作系统里都有多种账号:

账号等级Linux 例子Windows 例子权限
超级管理员rootAdministrator最高权限,能做任何事
普通管理员sudo 权限的用户Admin(在 Administrators 组)可以安装软件、改系统设置
普通用户ubuntu / ecs-useruser(在 Users 组)只能操作自己的文件,不能改系统

一台服务器上可以同时存在多个账号,比如:

root       ← 超级管理员(能删系统、改网络、创建其他账号)
deployer   ← 专门用来部署代码的账号(权限受限,只能操作指定目录)
git        ← 专门跑 Git 服务的账号

SSH 连接时你指定用哪个账号,登录后就是那个身份:

bash
ssh root@服务器IP      # 登录后是 root,啥都能干
ssh deployer@服务器IP  # 登录后是 deployer,只能干允许的事

跟你的本地电脑账号有什么关系?

没有任何关系。 你本地电脑叫 Admin,服务器上可以没有 Admin 这个账号;反过来也一样。它们是两台独立电脑的独立用户体系。

打个比方:

  • 你的 Windows 电脑 = 你家,你有你家钥匙(本地账号)
  • 阿里云服务器 = 公司办公楼,楼里有多个房间(多个账号):
    • root = 楼长,万能钥匙,所有房间都能进
    • dev = 开发人员,只能进工位区
    • ops = 运维,能进机房
  • SSH 连接 = 你在楼下保安处登记说"我是楼长(root)",保安验证你的工作证(私钥)后给你对应的门禁卡

所以 ssh root@服务器IP 的意思是:用"楼长"这个身份进入服务器,跟你自己家是谁没关系。