windows 10 ssh免密登录需生成并配置密钥对,推荐使用系统内置openssh生成ed25519密钥,配合ssh-agent加载;中文用户名可选git bash生成rsa密钥;离线环境可用win32-openssh手动部署;务必校验.ssh目录及私钥权限。

如果您在 Windows 10 上需要通过 SSH 安全连接远程服务器,但每次登录都需输入密码,则很可能是尚未生成并正确配置 SSH 密钥对。以下是多种可行的生成与设置方式,涵盖不同环境与兼容性场景:
一、使用系统内置 OpenSSH 客户端生成密钥
Windows 10 自带 OpenSSH 客户端(1809 及以后版本默认启用),是最直接且无需额外安装的方式。该方法依赖 PowerShell 或命令提示符,生成标准 RSA 或 Ed25519 密钥。
1、以管理员身份打开 PowerShell。
2、执行命令:ssh-keygen -t ed25519 -C "your_email@example.com" -f "$env:USERPROFILE\.ssh\id_ed25519"(推荐使用 Ed25519 算法,更安全高效)。
3、按提示回车确认保存路径(默认为 C:\Users\用户名\.ssh\id_ed25519)。
4、输入并确认密钥短语(passphrase);若跳过则直接连续按两次回车。
5、验证文件生成:Get-ChildItem "$env:USERPROFILE\.ssh\",应可见 id_ed25519(私钥)与 id_ed25519.pub(公钥)。
二、使用 Git for Windows 的 SSH 工具生成密钥
当系统用户名含中文字符导致 OpenSSH 生成路径乱码时,Git 自带的 OpenSSH 工具可规避该问题。此方式不依赖系统 OpenSSH 组件,兼容性更强。
1、确保已安装 Git for Windows,并勾选“Add Git to PATH”选项。
2、打开 Git Bash 终端(非 Windows 命令提示符)。
3、执行命令:ssh-keygen -t rsa -b 4096 -C "work@company.com" -f ~/.ssh/id_rsa_git。
4、全程按回车接受默认路径与空密码短语(或自定义)。
5、检查生成结果:ls -l ~/.ssh/,确认 id_rsa_git 与 id_rsa_git.pub 存在。
三、离线环境下的密钥生成与手动部署
在无网络、禁用 PowerShell 脚本策略或企业策略限制 OpenSSH 安装的场景下,可通过预置工具链完成密钥操作,避免依赖在线组件或系统服务。
1、下载并解压 Win32-OpenSSH 离线包(如 OpenSSH-Win64.zip)至本地目录(例如 C:\tools\openssh)。
2、将该目录加入系统 PATH:右键“此电脑”→属性→高级系统设置→环境变量→编辑“Path”→新增路径。
3、在任意命令行中执行:C:\tools\openssh\ssh-keygen.exe -t rsa -b 4096 -f C:\Users\用户名\.ssh\offline_key。
4、手动创建 C:\Users\用户名\.ssh 目录(若不存在),并将生成的两个文件移入其中。
5、设置私钥权限(关键):在 PowerShell 中运行 icacls "$env:USERPROFILE\.ssh\offline_key" /inheritance:r /grant:r "$env:USERNAME:F"。
四、启用 ssh-agent 并加载私钥实现免密登录
即使密钥已生成,若未通过 ssh-agent 管理,仍可能在每次连接时被要求输入密钥短语。启用并配置 ssh-agent 是实现真正“免交互”的必要步骤。
1、启动 OpenSSH Authentication Agent 服务:Start-Service ssh-agent。
2、设置开机自启:Set-Service -Name ssh-agent -StartupType Automatic。
3、将私钥添加至 agent:ssh-add "$env:USERPROFILE\.ssh\id_ed25519"(若设了短语,此时需输入一次)。
4、验证加载状态:ssh-add -l,应显示密钥指纹及文件路径。
5、此后所有基于 OpenSSH 的连接(如 ssh user@host 或 VS Code Remote-SSH)将自动调用该密钥。
五、关键注意事项与权限校验
密钥功能失效常源于权限配置错误或路径误用。Windows 对 .ssh 目录及密钥文件的访问控制虽不如 Linux 严格,但仍需满足基本安全约束。
1、确保 C:\Users\用户名\.ssh 目录存在且仅当前用户具有完全控制权。
2、私钥文件(如 id_rsa 或 id_ed25519)必须禁止其他用户读取:在 PowerShell 中执行 icacls "$env:USERPROFILE\.ssh\id_ed25519" /reset /inheritance:r /grant:r "$env:USERNAME:F"。
3、公钥内容须完整复制(包括开头 ssh-ed25519 或 ssh-rsa 及结尾邮箱),不可截断、换行或添加空格。
4、若使用 VS Code Remote-SSH 扩展仍提示密码,检查其设置中是否指定正确密钥路径:"remote.SSH.configFile" 或 "remote.SSH.defaultExtensions" 配置项。











