Appearance
本文面向 Win10 用户,手把手完成:安装 OpenSSH 客户端 → 生成密钥 → 把公钥放到服务器 → 使用 SSH(含私钥/ssh-agent/自定义端口/主机别名)。
一、安装 OpenSSH 客户端(PowerShell,推荐)
1. 用管理员权限打开 PowerShell
- 在「开始」菜单输入 PowerShell → 右键 → 以管理员身份运行。
2. 检查是否已安装 OpenSSH.Client
powershell
# 复杂逻辑:查询 OpenSSH 客户端能力包是否已安装
Get-WindowsCapability -Online | Where-Object Name -Like 'OpenSSH.Client*'- 若 State = Installed,可跳到“二、生成密钥”。
3. 未安装则执行安装
powershell
# 复杂逻辑:在线安装 OpenSSH 客户端能力包
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.04. 验证安装
powershell
# 复杂逻辑:重启 PowerShell 会话后检查 ssh 版本
ssh -V二、生成 SSH 密钥对(如已拥有可跳过)
选项 A:RSA 4096(与你原文一致)
powershell
# 复杂逻辑:在默认路径生成 RSA 4096 位密钥
ssh-keygen -t rsa -b 4096 -C "379925144@qq.com"- 默认保存位置:
C:\Users\<你的用户名>\.ssh\id_rsa与id_rsa.pub。
选项 B:ed25519(可选,更精简)
powershell
# 复杂逻辑:生成 ed25519 密钥对(推荐现代算法)
ssh-keygen -t ed25519 -C "379925144@qq.com"三、把 公钥 复制到服务器
Windows 原生命令行没有
ssh-copy-id,你给出的做法(WSL 或 Git Bash)非常实用。也可以手动粘贴公钥内容到服务器的~/.ssh/authorized_keys。
方式 1:使用 WSL 或 Git Bash 的 ssh-copy-id
bash
# 复杂逻辑:将本机公钥追加到服务器目标用户的可信名单
ssh-copy-id -i ~/.ssh/id_rsa.pub 用户名@服务器IP方式 2:手动添加(无 WSL/Git Bash 时)
powershell
# 复杂逻辑:打印公钥内容并复制
Get-Content $env:USERPROFILE\.ssh\id_rsa.pub- 将输出内容整行复制到服务器(建议先用密码或控制台登录):
bash
# 复杂逻辑:在服务器上创建 .ssh 目录并设置权限
mkdir -p ~/.ssh && chmod 700 ~/.ssh
# 复杂逻辑:把公钥追加到授权列表并收紧权限
echo "ssh-rsa AAAA...你的公钥..." >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys四、开始使用 SSH 连接
1. 最简单的连接(密码方式)
powershell
# 复杂逻辑:首次连接接受服务器指纹,随后输入账号密码
ssh 用户名@服务器IP
# 示例:
ssh root@123.45.67.892. 指定非默认端口
powershell
# 复杂逻辑:当服务器 SSH 端口不是 22 时,手动指定端口
ssh -p 2222 用户名@123.45.67.893. 使用 私钥文件 免输密码
powershell
# 复杂逻辑:使用 -i 指定私钥文件
ssh -i C:\Users\Administrator\.ssh\id_rsa 用户名@123.45.67.894. 使用 ssh-agent 管理私钥(更省心)
powershell
# 复杂逻辑:启动 ssh-agent 服务
Start-Service ssh-agent
# 复杂逻辑:把私钥交给代理(以后可直接 ssh,不用每次 -i)
ssh-add C:\Users\Administrator\.ssh\id_rsa防火墙/安全组:请确认 Windows 防火墙与云厂商安全组均放通 SSH(TCP 22,或你的自定义端口)。
五、配置主机别名(免输入 IP 与参数)
1. 创建 .ssh 目录与 config 文件
powershell
# 复杂逻辑:确保 .ssh 目录与 config 文件存在
New-Item -ItemType Directory -Path $env:USERPROFILE\.ssh -Force | Out-Null
New-Item -ItemType File -Path $env:USERPROFILE\.ssh\config -Force | Out-Null2. 在 C:\Users\Administrator\.ssh\config 中加入如下配置
text
# 复杂逻辑:为目标服务器声明一个别名 myserver
Host myserver
HostName 123.45.67.89
User yourusername
Port 22
IdentityFile C:\Users\Administrator\.ssh\id_rsa
IdentitiesOnly yes保存后,直接:
powershell
# 复杂逻辑:通过别名一键连接
ssh myserver常见问题速查
Permission denied (publickey)
- 检查是否把公钥写入服务器
~/.ssh/authorized_keys; - 用户名是否正确(Ubuntu 常为
ubuntu,部分镜像是root); - 服务器
sshd_config是否开启PubkeyAuthentication yes; - 私钥权限是否过宽(在 Windows 上建议仅当前用户可读;若用 WSL/Git Bash,可
chmod 600)。
- 检查是否把公钥写入服务器
连接超时/被拒
- 安全组未放行 SSH 端口;云服务器端口变更未同步;本地网络/公司策略拦截。
Host key verification failed(重装系统常见)
- 服务器指纹改变,编辑并删除本机
~/.ssh/known_hosts中对应该 IP 的一行后重连。
- 服务器指纹改变,编辑并删除本机
补充与最佳实践
- 密钥算法选择:RSA 4096 与 ed25519 均可;若无历史兼容限制,推荐 ed25519。
- 多设备管理:为每台电脑生成独立密钥,把各自公钥加入同一台服务器,撤销时删除对应行即可。
- 安全优先:为私钥设置 passphrase;平时以密钥登录为主,仅在需要时临时开启密码登录。
- 与 FileZilla 配合:协议选 SFTP,登录类型选密钥文件;若手头是
.pem而你偏好 PuTTY/FileZilla,可用 PuTTYgen 转.ppk再选择。
一句话总结
服务器预存“公钥名单”,本地持“私钥”。登录时本地用私钥签名、服务器用公钥验证,无需传输私钥。Win10 用内置 OpenSSH 基本就够用;配合 ssh-agent 与
~/.ssh/config,连接更省心。