本地git仓库(gitea)与openssh-server的冲突(connection reset by ip port 22)

文章描述了一位用户在Windows上安装Gitea后,由于OpenSSH服务导致的SSH连接失败问题。通过检查发现22端口有冲突,禁用OpenSSH服务或更改端口解决了问题。提供的解决方案包括禁用OpenSSH相关服务或使用卸载脚本。

前提

之前在本地的windows工作电脑上安装了一个gitea供项目组成员使用。
期间为了在别的机器上执行scp拷贝windows工作机器上的文件,在windows工作电脑上离线安装过一个openssh。

冲突

发现无法pull/clone gitea上的仓库了,提示

connection reset by ip port 22
fatal: Could not read from remote repository.

在这里插入图片描述

观察到gitea的管理后台是可以正常打开的,并且修改git远程仓库的地址为http也是可以正常的连接。
因此问题出现在ssh连接上。

网上解决方案

  • 方法1:打开 window安全中心 - 防火墙与网络保护 - 高级设置 - 入站规则 - 新建规则 - 端口 - TCP/特定本地端口:22 - 允许连接 - 勾选规则 - 填入名称 然后保存
    结果:无效
  • 方法2:参考文章:https://www.jianshu.com/p/fe76f9867322
    需要修改ssh配置文件以修改端口号,目测还要配置gitea的ssh端口号。
    如果用这个方法,需要改动每个项目成员的电脑,不方便使用。
  • 方法3:使用如下指令修改仓库地址为http
git remote set-url origin http://仓库地址.git

同样需要改动每个人的电脑,暂时做为备用方案

端口冲突

  • 考虑到可能问题出现在端口冲突上
    使用netsta -ano查看监听22端口的程序,观察到PID为1844和3684的两个进程同时在监听22端口
    在这里插入图片描述
  • 查找对应的进程

在这里插入图片描述
在这里插入图片描述

这个PID为3684的进程就是之前安装的Win32-OpenSSH

  • 关闭进程sshd.exe,再次测试。就可以成功使用ssh格式的仓库地址,连接到gitea了。

解决方案1

  • WIN+R打开运行窗口,输入services.msc
  • 找到"OpenSSH Authentication Agent"和"OpenSSH SSH Server"禁用它们
  • 重启电脑

解决方案2(使用离线安装的方式安装openssh-server)

  • 在c:\windows\system32\下找到cmd.exe,以管理员身份运行它
  • 从CMD里进入到当初下载的Win32-OpenSSH目录
  • 执行
powershell.exe -ExecutionPolicy Bypass -File uninstall-sshd.ps1

在这里插入图片描述

<think>我们正在讨论 `git push -u gitea main` 命令中 `-u` 参数的含义。根据引用[1]和引用[2]的解释,`-u` 是 `--set-upstream` 的简写,用于设置上游分支(Upstream Branch)。这意味着它会将本地分支(例如 `main`)远程分支(例如 `gitea/main`)关联起来。 具体来说,执行 `git push -u gitea main` 后: 1. 将本地 `main` 分支的更改推送到远程仓库 `gitea` 的 `main` 分支。 2. 同时,设置本地 `main` 分支的上游分支(跟踪分支)为 `gitea/main`。 设置上游分支后,后续在该分支上进行操作(如 `git push`、`git pull`)时,可以省略远程仓库名和分支名,因为Git会使用已关联的上游分支。 例如: - 设置前:必须指定完整命令 `git push gitea main` - 设置后:只需输入 `git push`,Git会自动推送到 `gitea` 仓库的 `main` 分支。 引用[3]也提到,`origin`是常见的远程仓库别名,但这里使用的是`gitea`(另一个远程仓库别名),操作同理。 总结:`-u` 参数的作用是建立本地分支远程分支的跟踪关系,简化后续操作。 </think>### `git push -u gitea main` 命令中 `-u` 参数的含义详解 该命令的 `-u` 参数(全称 `--set-upstream`)用于**建立本地分支远程分支的追踪关系**(引用[^1][^2]),具体含义如下: #### 1. **核心作用:设置上游分支** - `-u gitea main` 表示将本地当前分支(默认是当前所在分支)远程仓库 `gitea` 的 `main` 分支建立关联 - 建立后: - 本地分支知道其对应的远程分支位置 - Git 自动记录追踪关系:`本地分支 → 远程仓库/远程分支` - 例如:`git branch -vv` 会显示 `main 1a2b3c4 [gitea/main]`(引用[^2]) #### 2. **简化后续操作** | 操作类型 | 未使用 `-u` 时 | 使用 `-u` 后 | |----------|----------------|-------------| | `git push` | 需完整命令:<br>`git push gitea main` | 只需:`git push` | | `git pull` | 需完整命令:<br>`git pull gitea main` | 只需:`git pull` | | `git status` | 提示远程差异 | 提示:`Your branch is behind 'gitea/main' by 2 commits` | #### 3. **技术实现原理** 该命令实际执行两个动作: ```bash git push gitea main # 推送代码到远程 git branch --set-upstream-to=gitea/main # 设置上游分支 ``` 关系存储在 `.git/config` 中: ```ini [branch "main"] remote = gitea merge = refs/heads/main ``` #### 4. **注意事项** - **适用范围**:仅影响当前操作的本地分支(非全局) - **分支一致性**:本地分支名 (`main`) 和远程分支名 (`main`) 建议相同(引用[^3]) - **覆盖关系**:重复执行 `-u` 会更新追踪指向 - **取消关联**:`git branch --unset-upstream` > **类比理解**: > 将 `-u` 看作手机蓝牙配对:首次配对需复杂操作 (`-u`),后续一键连接(`git push/pull`)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值