You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows版GitHub Actions中SSH隧道27017端口转发失败求助

问题

我在Google Compute Engine上运行了一个MongoDB实例,希望通过Windows版GitHub Actions Runner连接它,插入测试和性能结果。目前尝试建立带端口转发的SSH隧道并测试端口是否开放,GitHub Action步骤如下:

- name: 'Create ssh tunnel'
  if: (runner.os == 'Windows')
  run: |       
    gcloud config set auth/impersonate_service_account *****@***.iam.gserviceaccount.com
    gcloud compute config-ssh

    $sshTunnelJob = Start-Job -Name SshTunnelJob -ScriptBlock { ssh -o "User=*****_iam_gserviceaccount_com" *****.us-east1-b.**** -vvv -fNT -L 27017:0.0.0.0:27017}

    Get-Job 
    Receive-Job -Name SshTunnelJob | Format-List -Force -Expand CoreOnly

    netstat -aon

    Test-NetConnection localhost -port 27017
    
    gcloud config unset auth/impersonate_service_account
    gcloud compute config-ssh --remove

预期Test-NetConnection localhost -port 27017能成功,但实际失败,不过转发80端口是成功的。输出信息如下:

WARNING: TCP connect to (::1 : 27017) failed 
WARNING: TCP connect to (127.0.0.1 : 27017) failed

ComputerName: localhost 
RemoteAddress: ::1
ResolvedAddresses: {::1, 127.0.0.1} 
PingSucceeded: True 
PingReplyDetails: System.Net.NetworkInformation.PingReply 
TcpClientSocket: 
TcpTestSucceeded: False 
RemotePort: 27017
TraceRoute:  
Detailed: False
InterfaceAlias: Loopback Pseudo-Interface 1 
InterfaceIndex: 1 
InterfaceDescription:  
NetAdapter:  
NetRoute: MSFT_NetRoute (InstanceID = "DD;9;?B55;55DD55;") 
SourceAddress: ::1 
NameResolutionSucceeded: True 
BasicNameResolution: {Microsoft.DnsClient.Commands.DnsRecord_AAAA,Microsoft.DnsClient.Commands.DnsRecord_A} 
LLMNRNetbiosRecords: {} 
DNSOnlyRecords: {Microsoft.DnsClient.Commands.DnsRecord_A} 
AllNameResolutionResults: {Microsoft.DnsClient.Commands.DnsRecord_AAAA,Microsoft.DnsClient.Commands.DnsRecord_A} 
IsAdmin: True 
NetworkIsolationContext: Loopback 
MatchingIPsecRules:

想知道遗漏了什么配置?是否GitHub限制了端口?未找到相关端口限制的文档。

解决方案

1. 修正SSH隧道绑定与目标地址

当前端口转发命令中,本地绑定和目标地址的配置可能存在问题。将命令修改为明确绑定本地回环地址,并指向GCE实例上MongoDB实际监听的地址:

ssh -o "User=*****_iam_gserviceaccount_com" *****.us-east1-b.**** -vvv -fNT -L 127.0.0.1:27017:localhost:27017
  • 本地绑定127.0.0.1避免IPv6优先导致的访问问题
  • 目标地址改为localhost,对应GCE实例上MongoDB默认的监听地址

2. 检查MongoDB监听配置

确认GCE实例上的MongoDB配置文件中,bindIp参数设置为0.0.0.0或者包含localhost,确保MongoDB允许来自本地的隧道连接请求。如果bindIp仅限制为实例的外部IP,隧道转发会无法连接到MongoDB服务。

3. 确保隧道完全建立后再测试

在启动SSH隧道的Job后,添加等待时间,让隧道有足够时间建立连接:

Start-Sleep -Seconds 5

同时查看Receive-Job的输出,检查SSH是否有认证失败、连接被拒绝等报错,这些信息能直接定位隧道是否成功启动。

4. 临时开放Windows防火墙端口

Windows版GitHub Actions Runner的防火墙可能阻止27017端口的入站连接,添加临时规则允许该端口:

New-NetFirewallRule -DisplayName "Allow MongoDB Tunnel" -Direction Inbound -LocalPort 27017 -Protocol TCP -Action Allow

测试完成后再删除规则:

Remove-NetFirewallRule -DisplayName "Allow MongoDB Tunnel"

5. 检查端口占用情况

通过netstat -aon的输出确认27017端口是否被其他进程占用。如果有,停止占用进程或更换一个未被使用的端口进行转发。

内容的提问来源于stack exchange,提问作者monamimani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 03:36:31