群晖Docker部署的Gitea对局域网单台设备SSH认证失败如何解决
- 问题设备的Git配置调用的SSH客户端与手动测试的客户端不一致:手动执行
ssh -v用的是系统OpenSSH客户端,认证已通过,但Git配置的是Plink(PuTTY配套工具),Plink未配置正确的端口、私钥信息导致连接失败,报错中的FATAL ERROR: Network error: Connection refused是Plink的典型报错格式,可印证该问题。 - Git远程仓库的SSH地址配置错误:群晖宿主SSH端口非默认22,但Git远程地址未携带端口参数,或端口配置为未启用的Gitea内置SSH端口。
- 本地SSH配置文件(
~/.ssh/config)规则冲突:对应NAS地址的SSH规则中端口、私钥、用户配置错误,仅手动执行ssh命令时附带了正确参数。 - 群晖SSH安全规则临时限制:虽然手动SSH连接正常,但Git请求携带的参数触发了群晖的异常请求拦截规则。
核对Git远程地址配置
在问题设备的仓库目录下执行:git remote -v
确认origin的SSH地址格式正确,若群晖SSH端口不是默认22,地址需携带端口,示例格式:ssh://git@192.168.1.100:222/user/repo.git,若格式错误可执行以下命令修改:git remote set-url origin ssh://git@<NAS_IP>:<群晖SSH实际端口>/<用户名/仓库名>.git核对Git使用的SSH客户端
执行命令查看Git全局SSH客户端配置:git config --global core.sshCommand
若返回结果为Plink相关路径,可修改为系统OpenSSH客户端路径(Windows示例):git config --global core.sshCommand "C:/Windows/System32/OpenSSH/ssh.exe"
修改后再次执行Git操作测试。核对本地SSH配置
查看~/.ssh/config(Windows路径为C:\Users\<你的用户名>\.ssh\config),新增/修改对应NAS的SSH配置:
Host gitea_nas HostName <NAS局域网IP> Port <群晖SSH实际端口> User git IdentityFile ~/.ssh/<你的私钥文件名>
配置完成后执行ssh gitea_nas测试,若返回认证成功提示,将Git远程地址修改为以下格式再次测试:git remote set-url origin gitea_nas:<用户名/仓库名>.git
核对Gitea配置与群晖SSH端口
查看Gitea管理后台的SSH端口配置,确认与群晖宿主实际开启的SSH端口一致,避免从Gitea页面复制的SSH地址携带错误端口。查看群晖SSH日志排查拦截
登录群晖后台开启SSH功能,登录后执行以下命令查看认证日志:sudo tail -f /var/log/auth.log
在问题设备上执行Git操作,查看日志中是否有对应请求的报错信息,确认是否有IP拦截、权限拒绝相关记录。
内容的提问来源于stack exchange,提问作者Marcin Pevik

