当前位置: 首页 > news >正文

Windows环境 git 配置多个ssh

Windows 环境下解决 SSH 连接 GitHub 要求密码的问题

在 Windows 环境下解决 SSH 连接 GitHub 持续要求密码的问题需要特别注意 Windows 系统的特性。以下是针对 Windows 的完整解决方案:

完整解决方案(Windows 专用)

1. 使用 Git Bash 进行操作

所有命令都应在 ​​Git Bash​​ 中执行(不是 CMD 或 PowerShell)

2. 验证 SSH 配置文件

# 打开配置文件
notepad ~/.ssh/config

确保内容为:

Host github.comHostName github.comUser gitIdentityFile ~/.ssh/id_ed25519_githubIdentitiesOnly yes

3. 检查密钥文件是否存在

ls -la ~/.ssh

应该看到:

  • id_ed25519_github (私钥)
  • id_ed25519_github.pub (公钥)

4. 设置正确的文件权限(Windows 关键步骤)

# 设置 .ssh 目录权限
icacls "$HOME/.ssh" /reset
icacls "$HOME/.ssh" /inheritance:r
icacls "$HOME/.ssh" /grant:r "$USERNAME:(OI)(CI)F"# 设置私钥权限
icacls "$HOME/.ssh/id_ed25519_github" /reset
icacls "$HOME/.ssh/id_ed25519_github" /grant:r "$USERNAME:F"# 设置公钥权限
icacls "$HOME/.ssh/id_ed25519_github.pub" /reset
icacls "$HOME/.ssh/id_ed25519_github.pub" /grant:r "$USERNAME:F"# 设置配置文件权限
icacls "$HOME/.ssh/config" /reset
icacls "$HOME/.ssh/config" /grant:r "$USERNAME:F"

5. 启动 SSH 代理并添加密钥

# 启动 SSH 代理
eval $(ssh-agent -s)# 添加 GitHub 密钥
ssh-add ~/.ssh/id_ed25519_github# 验证密钥已添加
ssh-add -l

6. 修复行尾格式(Windows 常见问题)

# 安装 dos2unix(如果未安装)
curl -L https://sourceforge.net/projects/dos2unix/files/dos2unix/7.4.1/dos2unix-7.4.1-win64.zip/download -o dos2unix.zip
unzip dos2unix.zip -d /usr/bin# 转换 config 文件格式
dos2unix ~/.ssh/config

7. 测试详细连接

ssh -Tv git@github.com

在输出中查找:

debug1: Offering public key: /c/Users/yourusername/.ssh/id_ed25519_github ED25519 SHA256:...
debug1: Server accepts key: /c/Users/yourusername/.ssh/id_ed25519_github ED25519 SHA256:...

Windows 特定问题解决方案

1. 确保使用正确的路径格式

~/.ssh/config 文件中,使用以下格式:

IdentityFile C:/Users/yourusername/.ssh/id_ed25519_github

而不是:

IdentityFile ~/.ssh/id_ed25519_github  # 在 Windows 可能有问题

2. 检查 SSH 代理服务

Windows 可能需要手动启动 SSH 代理服务:

# 确保 SSH 代理运行
eval $(ssh-agent -s)# 如果提示找不到代理,手动启动
ssh-agent -s

3. 检查系统环境变量

确保 Git Bash 的环境变量设置正确:

# 检查 HOME 变量
echo $HOME# 如果未设置,手动设置
export HOME=/c/Users/yourusername

4. 使用绝对路径添加密钥

ssh-add /c/Users/yourusername/.ssh/id_ed25519_github

验证公钥是否添加到 GitHub

  1. 显示公钥内容:
    cat ~/.ssh/id_ed25519_github.pub
  2. 登录 GitHub > Settings > SSH and GPG keys
  3. 确保:
    • 公钥完全匹配
    • 密钥类型为 ED25519
    • 没有多余的空格或换行

备用解决方案

1. 创建全新的 SSH 配置

# 备份旧配置
mv ~/.ssh ~/.ssh_backup# 创建新配置
mkdir ~/.ssh
notepad ~/.ssh/config

粘贴:

Host github.comHostName github.comUser gitIdentityFile C:/Users/yourusername/.ssh/id_ed25519_githubIdentitiesOnly yes

2. 生成新密钥

# 生成新密钥
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_github -C "your_email@example.com"# 添加到 GitHub
clip < ~/.ssh/id_ed25519_github.pub  # 复制到剪贴板

3. 使用 Windows 凭据管理器

# 删除所有保存的凭据
git credential-manager reject https://github.com
git credential-manager reject git@github.com# 清除缓存
git credential-manager clear

最终测试

ssh -T git@github.com

成功时应显示:

Hi yourusername! You've successfully authenticated, but GitHub does not provide shell access.

如果所有方法都失败

1. 使用 HTTPS 替代 SSH

# 设置全局使用 HTTPS
git config --global url."https://github.com/".insteadOf "git@github.com:"

2. 使用 GitHub Desktop

安装 GitHub Desktop 并登录您的账户,它会自动处理认证

3. 使用 GitHub CLI

# 安装 GitHub CLI
winget install --id GitHub.cli# 登录 GitHub
gh auth login

Windows SSH 连接检查表

步骤命令预期结果
1. 验证配置文件cat ~/.ssh/config显示正确的 GitHub 配置
2. 检查密钥文件ls -la ~/.ssh显示私钥和公钥文件
3. 设置权限icacls 命令无错误输出
4. 启动代理eval $(ssh-agent -s)显示代理 PID
5. 添加密钥ssh-add ~/.ssh/id_ed25519_github"Identity added" 消息
6. 测试连接ssh -T git@github.com成功认证消息

请按照这些步骤操作,特别注意 Windows 的文件权限和路径格式问题。如果问题仍然存在,请提供 ssh -Tv git@github.com 的完整输出,我可以进一步帮助诊断。

http://www.lqws.cn/news/507349.html

相关文章:

  • Modbus 扫描 从站号、波特率
  • 如何在FastAPI中玩转跨服务权限校验的魔法?
  • C++面试题(48)------ 扑克牌中的顺子
  • android脱糖
  • Uipath Outlook COM 接口错误
  • Mcp-git-ingest Quickstart
  • vftp centos 离线部署
  • IAR平台全面升级,提升瑞萨MCU架构的嵌入式软件开发效率
  • 软件测试的分类有哪些?(如黑盒/白盒/灰盒测试)
  • Day05_Linux项目怎么打包成exe
  • ArkUI-X通过Stage模型开发Android端应用指南(二)
  • Drag-and-Drop LLMs: Zero-Shot Prompt-to-Weights
  • 华为云Flexus+DeepSeek征文|华为云ModelArts Studio:利用New API实现大模型网关与AI资产管理的无缝对接
  • Revisiting Image Deblurring with an Efficient ConvNet论文阅读
  • 五种 IO 模式的简单介绍 -- 阻塞 IO,非阻塞 IO,信号驱动 IO,IO 多路复用,异步 IO
  • 2025.6.16-实习
  • 网络安全攻防:2025年新型钓鱼攻击防御指南
  • JVM(12)——详解G1垃圾回收器
  • 使用预训练权重在YOLO模型上训练新数据集的完整指南
  • 深入理解RAG:大语言模型时代的知识增强架构
  • 解析云计算虚拟化基石:KVM、QEMU与Libvirt的协同
  • SpringBoot - 整合 Redis 实现数据分布式缓存
  • 通过环境变量管理多版本JDK8、11、17并安装idea编译器
  • 攻防世界-MISC-MeowMeowMeow
  • BRAIN LANG:新发现!大脑网络重新调整以补偿在嘈杂环境中的听力困难
  • 【MV】编排4:基于时间线数据的密度突变检测和密度平滑算法
  • Springboot项目中使用手机号短信验证码注册登录实现
  • wpf单文件打包还有 一些dll打包不进去?
  • JS核心操作符:从基础到ES6+
  • phpstudy apache伪静态.htaccess文件置空丢失问题解决