长期在 Windows 上折腾 SSH 连 AWS 的人,多少都经历过同一件事:在本地一脸自信地敲下 ssh -i key.pem ec2-user@xxx,结果回车之后不是权限报错就是超时。以前我习惯用 Xshell、MobaXterm 这些图形工具,功能确实全面,但换来换去还是觉得 Windows 自带的 OpenSSH 最轻量,配好之后一条命令进去,配合 VS Code 做远程开发,顺滑程度不比 Mac 差。这篇就把我从零开始用 Windows 原生 SSH 连 AWS EC2 的完整经验写出来,包括密钥处理、免密登录、端口转发、常见报错排查,每一步都带理由,照着做基本能一条龙走通。
1. 为什么用 Windows 自带的 OpenSSH 而不是第三方工具
1.1 其实你已经装好了,只是没注意
Windows 10 1809 之后的版本、Windows 11 全系,默认都带了 OpenSSH 客户端,不需要额外安装。我自己是在一个全新的 Windows 11 笔记本上验证的,打开 PowerShell 输入:
powershell复制ssh -V
输出类似 OpenSSH_for_Windows_8.6p1, LibreSSL 3.4.3,说明客户端已经就绪。如果你用的是老版本的 Windows 10,可以在“设置 → 系统 → 可选功能”里手动添加 OpenSSH 客户端,或者用 winget 装:
powershell复制winget install Microsoft.OpenSSH.Beta
但绝大多数场景没必要,系统自带的版本足够用。
1.2 命令行方案对比图形工具的实际优势
不是说 Xshell、MobaXterm 不好,它们确实在会话管理、文件传输上更直观。但命令行方案有几个不可替代的好处:
- 脚本化:我经常需要批量登录多台 EC2 执行命令,用 ssh 配合循环脚本一次搞定,图形工具做不到这种粒度。
- 轻量:不用常驻一个 GUI 进程,PowerShell 里开个会话,用完关掉,不占资源。
- 原生支持:Git、VS Code、rsync(通过 WSL)、Ansible 这些工具都直接调用系统的 SSH 客户端,配置一次,处处复用。
- 隧道功能顺手:端口转发、跳板机代理,一行参数的事,比在图形界面里点点点效率高。
所以我的建议是,如果你只是偶尔登一次服务器,图形工具完全没问题;但如果你要长期运维 AWS 上的机器,或者做自动化,那原生 SSH 是绕不开的基础能力。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 密钥对准备:AWS 上的 .pem 文件到底怎么处理
2.1 在 AWS 控制台创建密钥对
登录 AWS 管理控制台,进入 EC2 服务,左侧菜单选“密钥对(Key Pairs)”,点击创建。格式选择 PEM,这是 OpenSSH 原生支持的格式。PPK 是 PuTTY 的格式,如果用 Windows 自带的 SSH,根本不需要转换。
创建成功后会自动下载一个 .pem 文件,这个文件就是你的私钥,相当于你服务器的“门钥匙”,一定要保存好,不能丢,也不能让别人拿到。AWS 只在创建那一刻提供下载,后续没地方再下载一次。
2.2 Windows 上最容易被坑的权限问题
.pem 文件下载下来之后,直接放桌面拿去连接,大概率会碰到这个报错:
code复制Permissions for 'key.pem' are too open.
这是因为 OpenSSH 对私钥文件的权限要求非常严格,只有当前用户能读,其他任何账户、任何组权限都会拒绝。解决办法是用 icacls 命令重置权限。
先右键 .pem 文件,在属性里把继承的权限全部禁用,然后给当前用户加上读取权限。命令行操作更直接:
powershell复制# 禁用继承并删除所有权限
icacls .\key.pem /inheritance:r
# 给当前用户添加读取权限
icacls .\key.pem /grant:r "$($env:USERNAME):R"
我习惯把密钥统一放到 C:\Users\你的用户名\.ssh\ 目录下,文件名改成容易识别的,比如 aws-key.pem,然后在同一个目录下创建 SSH
