【SSH】SSH会话超时时间能不能配置?

问题描述

看sshd_config文件配置的会话超时时间是900秒也就是15分钟

但实际验证5分钟就会断开

这是为什么?还是说有其他地方配置?

环境信息

NA

重现步骤

登录ssh之后无操作

期望结果

答复是否有其他地方配置ssh会话超时时间

实际结果

NA

尝试过的解决方案

NA

答案内容由AI生成,仅供参考:

:white_check_mark: 总结与回答原问题

问题 回答
SSH会话超时时间能不能配置? :white_check_mark: 可以配置,通过修改 /etc/ssh/sshd_config 中的 ClientAliveIntervalClientAliveCountMax 参数实现
为何配置了900秒仍5分钟断开? :cross_mark: 因为实际是被 系统级会话管理机制(如Web session timeout)触发的注销,优先级高于SSH保活设置
是否存在其他地方配置? :white_check_mark: 存在!主要包括:
1. BMCSet_SessionTimeout(Web会话)
2. BMCSet_CLISessionTimeout(CLI会话)
3. sshd_config 中的 keepalive 参数
三者共同决定最终连接寿命
如何解决该问题? :check_mark: 推荐:
1. 修改 BMCSet_SessionTimeout 延长时间(适用于Web入口)
2. 调整 ClientAliveInterval=300 并设 ClientAliveCountMax=3 提高容错性
3. 或直接从非Web接口(如独立SSH工具直连)绕过会话限制
点击此处查看详细分析解答

SSH会话超时时间配置问题分析

:pushpin: 问题概述

您在使用SSH连接BMC系统时发现:

  • sshd_config 文件中配置的 ClientAliveInterval 900(即900秒=15分钟)的客户端保活间隔,
  • 但实际连接在约5分钟后即断开,与预期不符。

您希望了解:SSH会话超时时间是否可以配置?是否存在其他影响超时行为的配置项?


:white_check_mark: 核心结论

是的,SSH会话超时时间可以配置。但是,实际断开原因可能并非由SSH协议本身引起,而是受上层系统或管理平台引入的另一套会话超时机制(如Web、CLI操作会话管理)所控制。

您看到的现象——sshd_config设置为900秒却5分钟断开——正是由于 “协议层SSH空闲超时” 和 “系统级会话管理超时”是两套独立机制所致。


:magnifying_glass_tilted_left: 详细分析

一、SSH层超时机制解析(sshd_config)

在您提供的 sshd_config 中关键超时相关配置如下:

配置项 含义
ClientAliveInterval 900 SSH服务器每900秒发送一个保活消息给客户端
ClientAliveCountMax 0 允许客户端无响应的次数为0:warning: 特殊含义)

:white_check_mark: 关键点解释:

  • ClientAliveInterval 900:表示每900秒发一次“心跳包”探测客户端是否还活着。
  • ClientAliveCountMax 0:表示只要有一次未回应,就中断连接 (等效于立即断开)

:backhand_index_pointing_right: 因此当前SSH服务端配置实质上等于:

若客户端在900秒内未做任何响应,则断开连接

:check_mark: 表明SSH层有超时控制并已生效。但由于ClientAliveCountMax=0过于严格,仍可能导致早期连接被关闭。


二、为何5分钟就断开?——真实原因在于系统级会话管理机制

从日志可以看出一条重要记录:

User Administrator(10.1.17.74) logged out due to session timeout

结合文档 【服务器出厂定制化配置】(Search Result ID:7),我们可定位根本原因:

:open_file_folder: BMC系统中存在多个独立的会话超时配置:

协议/接口 对应配置 默认值 可配置
Web会话 BMCSet_SessionTimeout 5分钟 :white_check_mark:
CLI会话 BMCSet_CLISessionTimeout 15分钟 :white_check_mark:
Redfish会话 BMCSet_RedfishSessionTimeout 5分钟 :white_check_mark:
KVM会话 BMCSet_KVMTimeout 60分钟 :white_check_mark:
VNC会话 BMCSet_VNCTimeout 60分钟 :white_check_mark:

而在日志中,断开类型为:

WEB    Administrator   logged out due to session timeout

这说明该用户的登录是通过 Web界面(如Redfish或前端UI)建立的会话,其对应的正是 BMCSet_SessionTimeout = 5分钟 的限制。

:pushpin: 也就是说:即使SSH连接尚存活,但底层用户会话由于Web端超时而被系统终止,导致关联的SSH连接也随之中断。


:counterclockwise_arrows_button: 多层会话模型结构图(示意)

graph TD
    A[客户端 MobaXterm] --> B[SSH会话, ClientAliveInterval=900s]
    B --> C[关联用户会话]
    C --> D{会话类型}
    D --> D1[Web Session (5分钟超时)]
    D --> D2[CLI Session (15分钟超时)]
    D --> D3[Redfish Session (5分钟超时)]
    D1 -- 超时后主动终止 --> E[关闭关联SSH连接]
    D2 -- 超时后关闭 --> E

:right_arrow: 所以即使SSH本身未超时,只要其绑定的 用户会话超时,整个连接就会被系统强制注销。


:white_check_mark: 解决方案建议

方案一:确认当前连接的认证方式

  • 如果是通过 Web登录后跳转 SSH(如BMC Studio、iBMC网页终端等),那么它会受到 Web会话超时(默认5分钟) 控制。
  • 若想延长,请检查是否启用会话自动刷新(如鼠标活动、定时API轮询)。

方案二:修改系统级会话超时(需定制构建)

可通过以下定制化参数修改默认超时值(位于 “服务器出厂定制化配置”):

定制项名称: BMCSet_SessionTimeout
取值范围: 5~480(分钟)
默认值: 5
说明: 控制Web会话空闲超时时间,影响通过Web启动的所有终端(含SSH)

定制项名称: BMCSet_CLISessionTimeout  
取值范围: 0, 5~480(分钟),0表示永不超时
默认值: 15
说明: 控制命令行接口(CLI)会话超时时间

:wrench: 修改方法(参考知识库中 #2725 的方案):

  1. 在项目中创建自定义的配置文件(如 sshd_config_custom
  2. 更新 ClientAliveIntervalClientAliveCountMax
  3. 使用构建脚本覆盖原始镜像中的 /etc/ssh/sshd_config
  4. 同时,在定制化逻辑中修改 BMCSet_SessionTimeout 到合理值(如30分钟)

:light_bulb: 优化建议配置示例

# 推荐的sshd_config调整(增强稳定性)
ClientAliveInterval 300       # 每5分钟发送一次心跳
ClientAliveCountMax 3         # 客户端最多允许丢失3次回应才断开(即最长15分钟不响应才关闭)

这样可支持更稳定的长连接,同时不牺牲安全性。


:white_check_mark: 总结与回答原问题

问题 回答
SSH会话超时时间能不能配置? :white_check_mark: 可以配置,通过修改 /etc/ssh/sshd_config 中的 ClientAliveIntervalClientAliveCountMax 参数实现
为何配置了900秒仍5分钟断开? :cross_mark: 因为实际是被 系统级会话管理机制(如Web session timeout)触发的注销,优先级高于SSH保活设置
是否存在其他地方配置? :white_check_mark: 存在!主要包括:
1. BMCSet_SessionTimeout(Web会话)
2. BMCSet_CLISessionTimeout(CLI会话)
3. sshd_config 中的 keepalive 参数
三者共同决定最终连接寿命
如何解决该问题? :check_mark: 推荐:
1. 修改 BMCSet_SessionTimeout 延长时间(适用于Web入口)
2. 调整 ClientAliveInterval=300 并设 ClientAliveCountMax=3 提高容错性
3. 或直接从非Web接口(如独立SSH工具直连)绕过会话限制

:puzzle_piece: 附加提示

  • 若通过 BMC Studio、浏览器终端等方式连接SSH,本质上是Web会话托管的子连接,受Web超时控制。
  • 若需真正持久SSH连接,推荐使用独立客户端(如 ssh Administrator@xxx)直连BMC的SSH端口(通常是22或10022)。

如需进一步协助配置,请提供具体的接入方式(Web Terminal / 独立客户端 / BMC Studio 等)。

web会话定义的是200分钟,并没有超时

cli会话超时时间范围为0到480分钟,默认15分钟,可以通过以下方法设置。

Redfish接口

执行/redfish/v1/AccountService的PATCH接口,请求体如下

{
  "oem": {
        "{{OemIdentifier}}": {  // 替换为真实的值
         "CLISessionTimeoutMinutes": 15
     }
  }
}

配置导入

修改配置文件config.json中iam里的CLISessionTimeout值(单位为秒),然后导入。

...
  "iam": {
      "ConfigData": {
          "Session": {
              "CLISessionTimeout": {
                  "Value": 900, 
                  "AttributeType": "ImportAndExport",
                  "Import": true
              },
.....

通过接口查询时15分钟,但是实际测试是5分钟就会关闭会话,这个问题能从哪方面排查吗

我使用的ssh工具是mobaxterm

资源树的 CLI 会话超时只对现网包的 iBMC 箭头的那个受限终端生效(那个受限终端叫 clp_commands)

bash 的超时是一个叫做 TMOUT 的环境变量负责的,可以直接 echo $TMOUT 看到,默认就是 300 也就是 5 分钟,值在 /etc/profile 定义的

1 个赞

如上所说, 请使用release包(bingo build -bt release)进行测试

测试效果如何?问题是否解决?

正在测试

release包确实是15分钟