Windows SSH免密登录终极指南
2026/9/23 17:26:02 网站建设 项目流程

🔧 背景说明

在 Windows 系统中配置 SSH 免密登录时,由于系统对文件权限、路径命名和配置格式的特殊要求,用户常会遇到以下问题:

  • ssh-copy-id 命令不可用
  • 出现 Permission denied 错误
  • 公钥复制后仍无法登录
  • authorized_keys 文件未生效
  • 修改 sshd_config 需要管理员权限

本文将详细介绍完整解决方案,提供 PowerShell/Git Bash 命令,助您快速实现免密登录。

✅ 第一步:生成 SSH 密钥对(客户端操作)

在本地电脑执行(推荐使用 Git Bash 或 WSL):

ssh-keygen -t rsa -b 4096

密钥默认保存路径:C:\Users\[用户名]\.ssh\

  • 私钥:id_rsa(需严格保密)
  • 公钥:id_rsa.pub(用于分享)

💡 提示:直接回车跳过 passphrase 设置(除非需要额外安全保护)

📤 第二步:部署公钥到目标服务器

❌ 问题 1:Windows 缺少 ssh-copy-id

✅ 解决方案:使用 Git Bash(下载地址)

ssh-copy-id lenovo@192.168.3.23

⚠️ 注意:需要输入目标电脑上 lenovo 用户的真实密码(非 PIN 码)

❌ 问题 2:无法自动部署公钥

✅ 手动部署方案:

  1. 获取本地公钥:
cat ~/.ssh/id_rsa.pub

复制输出的 ssh-rsa 开头的公钥内容

  1. 在目标服务器创建 authorized_keys:
mkdir C:\Users\lenovo\.ssh notepad C:\Users\lenovo\.ssh\authorized_keys
  1. 确保文件名准确:
  • 显示文件扩展名(资源管理器 → 查看 → 勾选"文件扩展名")
  • 确认文件名为 authorized_keys(无.txt 后缀)

⚙️ 第三步:配置 SSH 服务端(目标电脑)

❌ 问题 3:sshd_config 配置未启用

✅ 配置步骤(需管理员权限):

  1. 管理员身份运行 PowerShell
  2. 编辑配置文件:
notepad C:\ProgramData\ssh\sshd_config
  1. 取消注释以下配置:
PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys
  1. (可选)禁用密码登录:
PasswordAuthentication no
  1. 保存并重启服务:
Restart-Service sshd

💡 如遇保存问题,先执行:

takeown /f "C:\ProgramData\ssh\sshd_config" icacls "C:\ProgramData\ssh\sshd_config" /grant administrators:F

🔒 第四步:设置文件权限(Windows 关键步骤)

✅ 管理员身份执行:

# 设置 .ssh 目录权限 icacls "C:\Users\lenovo\.ssh" /inheritance:r icacls "C:\Users\lenovo\.ssh" /grant:r "SYSTEM:(F)" icacls "C:\Users\lenovo\.ssh" /grant:r "Administrators:(F)" icacls "C:\Users\lenovo\.ssh" /grant:r "lenovo:(F)" # 设置 authorized_keys 权限 icacls "C:\Users\lenovo\.ssh\authorized_keys" /inheritance:r icacls "C:\Users\lenovo\.ssh\authorized_keys" /grant:r "SYSTEM:(R)" icacls "C:\Users\lenovo\.ssh\authorized_keys" /grant:r "Administrators:(R)" icacls "C:\Users\lenovo\.ssh\authorized_keys" /grant:r "lenovo:(R)"

✅ 此步骤可解决 80% 的权限问题!

🧪 第五步:测试连接

在本地终端执行:

ssh lenovo@192.168.3.23

成功标志:直接进入命令行 失败排查:使用调试模式

ssh -v lenovo@192.168.3.23

🚫 常见错误及解决方案

错误信息原因解决方案
Permission denied公钥未部署/权限错误检查 authorized_keys 及权限
ssh-copy-id: command not foundWindows 默认不支持使用 Git Bash
authorized_keys 不生效文件扩展名问题确保无.txt 后缀
无法修改 sshd_config权限不足管理员身份运行

📌 检查清单

✅ 客户端:

  • 已生成密钥对
  • 使用 Git Bash 部署公钥

✅ 服务器端:

  • authorized_keys 存在且内容正确
  • 文件名无.txt 后缀
  • sshd_config 启用公钥认证
  • 权限设置正确
  • 服务已重启

🎁 附:一键修复脚本(服务器端)

保存为 fix-ssh.ps1,管理员身份运行:

$User = "lenovo" $SshDir = "C:\Users\$User\.ssh" # 创建目录 if (!(Test-Path $SshDir)) { mkdir $SshDir } # 设置权限 icacls $SshDir /inheritance:r icacls $SshDir /grant:r "SYSTEM:(F)" icacls $SshDir /grant:r "Administrators:(F)" icacls $SshDir /grant:r "$User:(F)" if (Test-Path "$SshDir\authorized_keys") { icacls "$SshDir\authorized_keys" /inheritance:r icacls "$SshDir\authorized_keys" /grant:r "SYSTEM:(R)" icacls "$SshDir\authorized_keys" /grant:r "Administrators:(R)" icacls "$SshDir\authorized_keys" /grant:r "$User:(R)" } # 提示配置检查 Write-Host "请确认 C:\ProgramData\ssh\sshd_config 包含:" Write-Host "PubkeyAuthentication yes" Write-Host "AuthorizedKeysFile .ssh/authorized_keys" # 重启服务 Restart-Service sshd Write-Host "SSH 服务已重启!"

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询