如何在启动或重新启动时阻止firewalld中断现有的传出ssh执行会话?

如何在启动或重新启动时阻止firewalld中断现有的传出ssh执行会话?

我有一个在 Centos7 服务器上运行的 java 程序,该程序使用 JSch 库在另一台 Centos7 服务器上不断“跟踪”文件,以运行 ssh exec 进程,从而在目标机器上运行 shell 脚本。

最近我们遇到了一个问题,它停止从文件获取数据,而任何日志中都没有显示任何类型的断开连接(这是一个静默问题,因此看起来就像没有数据可获取一样)。

最终我发现问题是由于停止并启动了防火墙守护进程而导致的,重新启动后数据停止流动。如果您随后停止防火墙守护进程,数据流将恢复,但除此之外,唯一的解决方案是在启动防火墙守护进程后重新启动 Java 程序本身。

要在没有 Java 代码的情况下重现该问题,请执行以下操作:

  • 有两个 Centos7 实例,其中一个可以 ssh 到另一个
  • 在第一台机器(运行软件的机器)上打开两个终端
  • 确保firewalld守护进程已在运行(systemctl status firewalld/ systemctl start firewalld
  • 在第二个终端上运行 ssh exec 命令,如下所示(使用所需的任何凭据):ssh -t user@second-server watch -n 1 date
  • 你现在将看到当前时间在该终端上每秒更新一次,但正在目标服务器上运行
  • 在第一个终端上停止firewalld(systemctl stop firewalld
  • 在第一个终端上再次启动firewalld(systemctl start firewalld
  • 您会注意到第二个终端中的日期/时间已停止更新
  • 在第一个终端上再次停止firewalld(systemctl stop firewalld
  • 您应该会在第二个终端上看到日期/时间更新恢复

我尝试在firewalld中打开最高级别的调试输出(--debug=10/etc/sysconfig/firewalld配置文件中),并启用所有被拒绝的请求的日志记录(firewall-cmd --set-log-denied=all),但是日志中没有任何内容表明它正在做什么来中断正在进行的ssh执行会话。

有什么方法可以配置firewalld 以使其不会中断正在进行的 ssh exec 会话?

相关内容