SSH远程连接
什么是SSH?
SSH(Secure Shell),翻译过来就是"安全外壳"。它是一种网络协议,专门用于在不安全的网络环境中安全地访问远程计算机。 简单来说,就是登录服务器的账号,然后可以操纵服务器。
应用场景
- 远程访问服务器
- 执行远程命令和自动化
- 安全地传递文件
等等应用场景。ssh可以说无处不在。
连接方法
SSH 连接服务器有多种方式,不同场景选不同方法:
- 密钥对登录 — 使用公钥+私钥认证,最推荐的安全方式(推荐!)
- 密码登录 — 传统方式,输入账号密码连接,简单但安全性较低
当然还有其他连接方式,本文不做详谈。 下面重点介绍密钥对登录:
密钥对连接
使用 VS Code Remote-SSH 连接
- 按
F1→ Remote-SSH: Connect to Host... → Add New SSH Host...
或者点击左下角的图标,点击连接到主机
- 输入命令:
ssh -i <私钥路径> <用户名>@<服务器IP>例如:
ssh -i C:\Users\admin\.ssh\id_rsa root@123.456.789.0- 选择配置文件保存路径,点击连接即可
- 首次连接会提示确认主机指纹,输入
yes回车 - 左下角显示 SSH: 服务器IP 即连接成功
使用终端直接连接
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)
适合任何操作系统,推荐大多数场景使用。
- 打开终端
- 执行以下命令:
ssh-keygen -t rsa -b 4096参数说明:
-t rsa— 指定密钥类型为 RSA-b 4096— 指定密钥长度为 4096 位(越长越安全)-C— 添加备注(一般填邮箱,方便识别)
- 按提示选择保存路径(默认
~/.ssh/id_rsa,直接回车即可)
生成后会得到两个文件:
| 文件 | 作用 |
|---|---|
~/.ssh/id_rsa | 私钥,绝不能泄露! |
~/.ssh/id_rsa.pub | 公钥,可以安全地告诉任何人 |
- 查看公钥内容:
cat ~/.ssh/id_rsa.pub复制输出的内容,后续需要添加到阿里云服务器上。
方式二:使用阿里云管理密钥对
适合阿里云 ECS 服务器,可以通过控制台一键创建和绑定。
- 登录 阿里云 ECS 控制台
- 在左侧菜单找到 网络与安全 → 密钥对
- 点击 创建密钥对
- 填写:
- 密钥对名称 — 自定义,如
my-aliyun-key - 密钥类型 — 选择 RSA
- 自动绑定实例 — 暂不绑定
- 密钥对名称 — 自定义,如
- 创建后,浏览器会自动下载一个
.pem文件(这就是私钥!妥善保管) - 回到实例列表,找到你的服务器,点击 更多 → 网络和安全组 → 绑定密钥对
- 选择刚创建的密钥对,绑定即可
⚠️ 阿里云不会保存你的私钥,创建时只会下载一次,务必保存好
.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 例子 | 权限 |
|---|---|---|---|
| 超级管理员 | root | Administrator | 最高权限,能做任何事 |
| 普通管理员 | 有 sudo 权限的用户 | Admin(在 Administrators 组) | 可以安装软件、改系统设置 |
| 普通用户 | ubuntu / ecs-user | user(在 Users 组) | 只能操作自己的文件,不能改系统 |
一台服务器上可以同时存在多个账号,比如:
root ← 超级管理员(能删系统、改网络、创建其他账号)
deployer ← 专门用来部署代码的账号(权限受限,只能操作指定目录)
git ← 专门跑 Git 服务的账号SSH 连接时你指定用哪个账号,登录后就是那个身份:
ssh root@服务器IP # 登录后是 root,啥都能干
ssh deployer@服务器IP # 登录后是 deployer,只能干允许的事跟你的本地电脑账号有什么关系?
没有任何关系。 你本地电脑叫 Admin,服务器上可以没有 Admin 这个账号;反过来也一样。它们是两台独立电脑的独立用户体系。
打个比方:
- 你的 Windows 电脑 = 你家,你有你家钥匙(本地账号)
- 阿里云服务器 = 公司办公楼,楼里有多个房间(多个账号):
root= 楼长,万能钥匙,所有房间都能进dev= 开发人员,只能进工位区ops= 运维,能进机房
- SSH 连接 = 你在楼下保安处登记说"我是楼长(root)",保安验证你的工作证(私钥)后给你对应的门禁卡
所以 ssh root@服务器IP 的意思是:用"楼长"这个身份进入服务器,跟你自己家是谁没关系。
