1. 为什么需要SSH免密配置?
在Windows 10上搭建Gogs私有Git服务时,每次推送或拉取代码都需要输入账号密码,这显然不够优雅。SSH免密配置就是为了解决这个问题,它通过非对称加密技术实现身份验证,让你可以像使用GitHub一样流畅地操作自己的私有仓库。
我刚开始用Gogs时也踩过坑,明明按照教程配置了SSH,却总是提示权限不足。后来发现是服务端和客户端的配置没有形成闭环。下面我就把完整的配置过程拆解给你,从Gogs服务端到Git客户端,保证你一次搞定。
2. 环境准备与Gogs安装
2.1 硬件与软件要求
建议使用Windows 10 64位系统,内存至少4GB。需要提前安装:
- Git for Windows(建议版本2.23+)
- MySQL 5.7+ 或 SQLite3
- 7-Zip等解压工具
实测在8代i5处理器的笔记本上运行非常流畅,但如果你要用作团队服务器,建议使用SSD硬盘提升IO性能。
2.2 下载与安装Gogs
到Gogs官网下载最新版Windows压缩包,解压到D:\gogs这样的非中文路径。我习惯用Git Bash进行操作:
cd /d/gogs ./gogs web首次运行会生成默认配置文件,访问http://localhost:3000完成初始化安装。这里有个坑点:安装时设置的MySQL账号需要有创建数据库的权限,否则会报错。
3. Gogs服务端SSH配置
3.1 修改app.ini关键参数
找到custom/conf/app.ini(如果没有就新建),重点修改这些参数:
[server] START_SSH_SERVER = true SSH_PORT = 2222 # 避免和系统22端口冲突 DOMAIN = yourpcname特别提醒:如果公司网络有防火墙,要确保配置的SSH端口是开放的。我曾经因为用了默认的22端口被IT部门找上门...
3.2 配置系统hosts文件
用管理员权限编辑C:\Windows\System32\drivers\etc\hosts,添加:
127.0.0.1 yourpcname这样就能用域名而非IP访问了,避免后续SSH连接时的警告。
4. 生成SSH密钥对
4.1 创建专属密钥
在Git Bash中执行:
ssh-keygen -t ed25519 -C "your_email@example.com" -f ~/.ssh/gogs_key这里我推荐用ed25519算法,比传统的RSA更安全高效。生成后你会得到两个文件:
- gogs_key(私钥,相当于家门钥匙)
- gogs_key.pub(公钥,相当于钥匙孔)
注意:私钥绝对不能泄露!我曾见过有人把私钥上传到GitHub的惨案...
4.2 多平台密钥管理
如果你同时使用GitHub、Gitee等平台,建议为每个服务创建独立密钥:
ssh-keygen -t ed25519 -f ~/.ssh/github_key ssh-keygen -t ed25519 -f ~/.ssh/gitee_key然后用config文件管理不同密钥的映射关系。
5. 配置SSH客户端
5.1 创建config文件
在~/.ssh目录下新建config文件,内容类似这样:
Host mygogs HostName yourpcname User git Port 2222 IdentityFile ~/.ssh/gogs_key PreferredAuthentications publickey关键点说明:
- Host是自定义别名,后续git clone时要用
- IdentityFile指向你的私钥路径
- Port必须与Gogs配置一致
5.2 测试SSH连接
执行:
ssh -T git@mygogs看到欢迎信息就说明连接成功了。如果报错,可以加-v参数查看详细日志:
ssh -Tv git@mygogs6. 上传公钥到Gogs
6.1 复制公钥内容
用记事本打开gogs_key.pub,复制全部内容。注意不要有多余空格或换行。
6.2 在Gogs中添加公钥
登录Gogs后:
- 点击右上角头像 -> 设置
- 左侧选择"SSH密钥"
- 粘贴公钥内容
- 标题建议写"办公电脑"这样的标识
有个实用技巧:用以下命令直接复制公钥到剪贴板:
cat ~/.ssh/gogs_key.pub | clip7. 实战测试免密操作
7.1 克隆仓库测试
git clone ssh://mygogs/username/repo.git如果不需要输入密码就能克隆成功,说明配置正确。
7.2 常见问题排查
如果遇到问题,按这个顺序检查:
- Gogs服务是否正常运行(查看gogs.log)
- SSH服务是否启动(netstat -ano | findstr 2222)
- 防火墙是否放行端口
- 密钥权限是否正确(chmod 600 ~/.ssh/gogs_key)
我遇到最诡异的问题是Windows Defender拦截了SSH连接,添加例外规则后才解决。
8. 高级配置技巧
8.1 自动化部署方案
结合Git钩子可以实现自动部署。比如在Gogs的post-receive钩子中添加:
#!/bin/sh GIT_WORK_TREE=/path/to/deploy git checkout -f8.2 多用户协作配置
团队使用时,建议:
- 每个成员生成自己的密钥对
- 在Gogs中创建组织
- 通过团队权限管理仓库访问
记得定期轮换密钥,我建议至少每半年更新一次。
9. 安全加固建议
- 禁用密码登录(在app.ini设置DISABLE_REGISTRATION=true)
- 定期检查authorized_keys文件
- 使用强密码保护私钥(ssh-keygen时设置passphrase)
- 考虑配置fail2ban防止暴力破解
有一次我的日志里出现大量爆破尝试,后来加了fail2ban才消停。
10. 跨平台使用指南
这套配置同样适用于:
- WSL子系统:直接在~/.ssh下复用密钥
- 其他机器:导出密钥时记得加密传输
- CI/CD工具:把私钥作为环境变量注入
最近帮同事配置Jenkins自动构建,就是用这套方法实现的免密拉取。