OpenSSH在Cygwin/Git Bash环境下使用ControlPersist参数时隐式后台运行是否为预期行为?
OpenSSH在Cygwin/Git Bash环境下使用ControlPersist参数时隐式后台运行是否为预期行为?
你遇到的这个情况其实是Git Bash(基于Cygwin)环境下OpenSSH的预期行为,并不是bug,不用太担心依赖它会突然失效,咱们把背后的原因说清楚:
在原生Linux/Unix的OpenSSH中,运行ssh -M -S skt -N -o ControlPersist=60 localhost时,进程会一直占用前台终端,直到你手动中断它——这和你最初预期的一致,毕竟没加-f参数。但Git Bash用的是适配Windows环境的Cygwin版OpenSSH,由于Windows的终端模型和Unix系统有差异,为了让ControlPersist特性正常工作(保持控制套接字存活、后台维持连接),这个版本的OpenSSH会自动将控制进程放到后台运行,相当于隐式加上了-f参数。
简单来说,这是针对Windows终端环境的适配优化,目的是让ControlMaster/ControlPersist的工作方式更符合用户直觉——毕竟在Windows终端里,没人希望一个只是维持连接的进程一直占着窗口。
如果想要让命令的行为更明确、跨环境更一致,你可以手动加上-f参数,写成:
ssh -f -M -S skt -N -o ControlPersist=60 localhost
这样不管是在Git Bash还是原生Linux终端,行为都会保持统一,也能消除你因为环境差异产生的顾虑。
备注:内容来源于stack exchange,提问作者Mark VY
相关产品推荐
相关产品推荐

