[GH-ISSUE #3803] [keepalive] 关于electrm ssh连接长时间后断开的澄清和解决方案 #2611

Open
opened 2026-02-27 00:53:37 +03:00 by kerem · 4 comments
Owner

Originally created by @Smalldy on GitHub (Feb 12, 2025).
Original GitHub issue: https://github.com/electerm/electerm/issues/3803

Electerm Version and download file extension(Electerm版本和下载文件后缀)

--

Platform detail (平台详情)

--

What steps will reproduce the bug?(重新问题的详细步骤)

此贴并非问题报告。但没有合适的模板。作者如果认为有帮助,可以将其放置在合适的地方。帮助更多人。

部分同学反馈,长时间不使用后,ssh会断开连接,即便修改keepalive也无济于事。
经过我的测试和调研,大部分原因可能是“电源计划”导致的。
计算机【休眠】会导致【网卡】断电,从而导致连接断开。
请将计算机的休眠设置改为 【从不】
这样改(右键电池)
Image
或者(搜索睡眠)

Image

What should have happened?(期望的结果)

--

Would this happen in other terminal app(是否能够在其他同类软件重现这个问题)

--

Additional information(其他任何相关信息)

No response

Originally created by @Smalldy on GitHub (Feb 12, 2025). Original GitHub issue: https://github.com/electerm/electerm/issues/3803 ### Electerm Version and download file extension(Electerm版本和下载文件后缀) -- ### Platform detail (平台详情) -- ### What steps will reproduce the bug?(重新问题的详细步骤) 此贴并非问题报告。但没有合适的模板。作者如果认为有帮助,可以将其放置在合适的地方。帮助更多人。 ---- 部分同学反馈,长时间不使用后,ssh会断开连接,即便修改keepalive也无济于事。 经过我的测试和调研,大部分原因可能是“电源计划”导致的。 计算机【休眠】会导致【网卡】断电,从而导致连接断开。 请将计算机的休眠设置改为 【从不】 这样改(右键电池) ![Image](https://github.com/user-attachments/assets/80d9af35-65bc-49bc-91f1-2c9c92cea4be) 或者(搜索睡眠) ![Image](https://github.com/user-attachments/assets/b38872bd-5424-4731-9d68-6afb4ede0f15) ### What should have happened?(期望的结果) -- ### Would this happen in other terminal app(是否能够在其他同类软件重现这个问题) -- ### Additional information(其他任何相关信息) _No response_
Author
Owner

@africa1207 commented on GitHub (Feb 13, 2025):

我的电源方案一直都是系统不休眠,同时硬盘休眠时间也设置的99999,本地终端长时间不使用依旧会断

<!-- gh-comment-id:2655542270 --> @africa1207 commented on GitHub (Feb 13, 2025): 我的电源方案一直都是系统不休眠,同时硬盘休眠时间也设置的99999,本地终端长时间不使用依旧会断
Author
Owner

@Smalldy commented on GitHub (Feb 13, 2025):

我的电源方案一直都是系统不休眠,同时硬盘休眠时间也设置的99999,本地终端长时间不使用依旧会断

还要注意是否有wifi & 有线的切换动作.
或者使用powershell脚本监控网络适配器变化

# 日志文件路径
$logPath = "$env:USERPROFILE\network_monitor.log"

# 创建事件过滤器
$query = @"
SELECT * FROM __InstanceModificationEvent 
WITHIN 5 
WHERE 
    TargetInstance ISA 'Win32_NetworkAdapter' 
    AND (
        TargetInstance.NetConnectionStatus <> PreviousInstance.NetConnectionStatus 
        OR TargetInstance.NetEnabled <> PreviousInstance.NetEnabled
    )
"@

# 创建事件处理动作
$action = {
    $adapter = $event.SourceEventArgs.NewEvent.TargetInstance
    $time = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
    $statusMap = @{
        0 = "已断开"
        1 = "正在连接"
        2 = "已连接"
        3 = "正在断开"
        4 = "硬件故障"
    }
    
    $logMessage = @"
[$time] 网络适配器状态变化:
  名称: $($adapter.NetConnectionID)
  状态: $($statusMap[$adapter.NetConnectionStatus]) ($($adapter.NetConnectionStatus))
  启用: $($adapter.NetEnabled)
  接口类型: $($adapter.AdapterType)
"@
    
    $logMessage | Out-File $logPath -Append
}

# 注册事件监听
$null = Register-CimIndicationEvent -Query $query -Action $action -SourceIdentifier NetworkWatcher

# 持续保持运行
try {
    while ($true) { Start-Sleep -Seconds 10 }
}
finally {
    Unregister-Event -SourceIdentifier NetworkWatcher
}

日志生成在你的用户目录(C:\Users\xxxx)下

<!-- gh-comment-id:2655689479 --> @Smalldy commented on GitHub (Feb 13, 2025): > 我的电源方案一直都是系统不休眠,同时硬盘休眠时间也设置的99999,本地终端长时间不使用依旧会断 还要注意是否有wifi & 有线的切换动作. 或者使用powershell脚本监控网络适配器变化 ``` # 日志文件路径 $logPath = "$env:USERPROFILE\network_monitor.log" # 创建事件过滤器 $query = @" SELECT * FROM __InstanceModificationEvent WITHIN 5 WHERE TargetInstance ISA 'Win32_NetworkAdapter' AND ( TargetInstance.NetConnectionStatus <> PreviousInstance.NetConnectionStatus OR TargetInstance.NetEnabled <> PreviousInstance.NetEnabled ) "@ # 创建事件处理动作 $action = { $adapter = $event.SourceEventArgs.NewEvent.TargetInstance $time = Get-Date -Format "yyyy-MM-dd HH:mm:ss" $statusMap = @{ 0 = "已断开" 1 = "正在连接" 2 = "已连接" 3 = "正在断开" 4 = "硬件故障" } $logMessage = @" [$time] 网络适配器状态变化: 名称: $($adapter.NetConnectionID) 状态: $($statusMap[$adapter.NetConnectionStatus]) ($($adapter.NetConnectionStatus)) 启用: $($adapter.NetEnabled) 接口类型: $($adapter.AdapterType) "@ $logMessage | Out-File $logPath -Append } # 注册事件监听 $null = Register-CimIndicationEvent -Query $query -Action $action -SourceIdentifier NetworkWatcher # 持续保持运行 try { while ($true) { Start-Sleep -Seconds 10 } } finally { Unregister-Event -SourceIdentifier NetworkWatcher } ``` 日志生成在你的用户目录(C:\Users\xxxx)下
Author
Owner

@africa1207 commented on GitHub (Feb 17, 2025):

我的电源方案一直都是系统不休眠,同时硬盘休眠时间也设置的99999,本地终端长时间不使用依旧会断

还要注意是否有wifi & 有线的切换动作. 或者使用powershell脚本监控网络适配器变化

# 日志文件路径
$logPath = "$env:USERPROFILE\network_monitor.log"

# 创建事件过滤器
$query = @"
SELECT * FROM __InstanceModificationEvent 
WITHIN 5 
WHERE 
    TargetInstance ISA 'Win32_NetworkAdapter' 
    AND (
        TargetInstance.NetConnectionStatus <> PreviousInstance.NetConnectionStatus 
        OR TargetInstance.NetEnabled <> PreviousInstance.NetEnabled
    )
"@

# 创建事件处理动作
$action = {
    $adapter = $event.SourceEventArgs.NewEvent.TargetInstance
    $time = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
    $statusMap = @{
        0 = "已断开"
        1 = "正在连接"
        2 = "已连接"
        3 = "正在断开"
        4 = "硬件故障"
    }
    
    $logMessage = @"
[$time] 网络适配器状态变化:
  名称: $($adapter.NetConnectionID)
  状态: $($statusMap[$adapter.NetConnectionStatus]) ($($adapter.NetConnectionStatus))
  启用: $($adapter.NetEnabled)
  接口类型: $($adapter.AdapterType)
"@
    
    $logMessage | Out-File $logPath -Append
}

# 注册事件监听
$null = Register-CimIndicationEvent -Query $query -Action $action -SourceIdentifier NetworkWatcher

# 持续保持运行
try {
    while ($true) { Start-Sleep -Seconds 10 }
}
finally {
    Unregister-Event -SourceIdentifier NetworkWatcher
}

日志生成在你的用户目录(C:\Users\xxxx)下

经测试仍然断开连接,错误日志没有生成,说明网络适配器没有出现切换

<!-- gh-comment-id:2662135076 --> @africa1207 commented on GitHub (Feb 17, 2025): > > 我的电源方案一直都是系统不休眠,同时硬盘休眠时间也设置的99999,本地终端长时间不使用依旧会断 > > 还要注意是否有wifi & 有线的切换动作. 或者使用powershell脚本监控网络适配器变化 > > ``` > # 日志文件路径 > $logPath = "$env:USERPROFILE\network_monitor.log" > > # 创建事件过滤器 > $query = @" > SELECT * FROM __InstanceModificationEvent > WITHIN 5 > WHERE > TargetInstance ISA 'Win32_NetworkAdapter' > AND ( > TargetInstance.NetConnectionStatus <> PreviousInstance.NetConnectionStatus > OR TargetInstance.NetEnabled <> PreviousInstance.NetEnabled > ) > "@ > > # 创建事件处理动作 > $action = { > $adapter = $event.SourceEventArgs.NewEvent.TargetInstance > $time = Get-Date -Format "yyyy-MM-dd HH:mm:ss" > $statusMap = @{ > 0 = "已断开" > 1 = "正在连接" > 2 = "已连接" > 3 = "正在断开" > 4 = "硬件故障" > } > > $logMessage = @" > [$time] 网络适配器状态变化: > 名称: $($adapter.NetConnectionID) > 状态: $($statusMap[$adapter.NetConnectionStatus]) ($($adapter.NetConnectionStatus)) > 启用: $($adapter.NetEnabled) > 接口类型: $($adapter.AdapterType) > "@ > > $logMessage | Out-File $logPath -Append > } > > # 注册事件监听 > $null = Register-CimIndicationEvent -Query $query -Action $action -SourceIdentifier NetworkWatcher > > # 持续保持运行 > try { > while ($true) { Start-Sleep -Seconds 10 } > } > finally { > Unregister-Event -SourceIdentifier NetworkWatcher > } > ``` > > 日志生成在你的用户目录(C:\Users\xxxx)下 经测试仍然断开连接,错误日志没有生成,说明网络适配器没有出现切换
Author
Owner

@ClarkFeng commented on GitHub (Feb 27, 2025):

感觉最近的几个版本都会这样,我切换到浏览器查一下资料,切换回来就断开了得重新刷新,但是我另外一台电脑用的老版本1.51.8版本的就不会这样自动断开

<!-- gh-comment-id:2686817756 --> @ClarkFeng commented on GitHub (Feb 27, 2025): 感觉最近的几个版本都会这样,我切换到浏览器查一下资料,切换回来就断开了得重新刷新,但是我另外一台电脑用的老版本1.51.8版本的就不会这样自动断开
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/electerm#2611
No description provided.