JetBrains Gateway 在大数据集群开发中的远程调试实践


前言

在搭建 Hadoop + Spark 的高可用集群环境时,使用 JetBrains Gateway 可以实现便捷的远程开发。但在初次部署时,出现了一连串的连接失败问题,本文将详细记录排查过程及解决方法,以备后用。


1. host-status 命令执行失败

初次连接 Gateway 时遇到以下报错:

com.jetbrains.gateway.ssh.deploy.DeployException:
An error occurred while executing command: 'host-status --ide-path=... --project-path=...'

排查方向

  • 路径是否存在: 登录服务器,确认 --ide-path 与 --project-path 路径真实存在且可访问。
  • 权限是否足够: 使用 ls -ld 检查对应目录的读写权限。
  • 远程脚本是否影响: 查看远程登录时是否存在 .bashrc 或 /etc/bashrc 输出干扰。

2. clash 脚本引起 shell 输出异常

进一步查看日志发现:

/etc/bashrc: line 93: /home/xx/opt/software/clash/clashctl.sh: Permission denied

原因

远程机器在 shell 启动时会执行 clash 的脚本,导致 JetBrains 启动流程中断。

解决方法

  1. 修改 /etc/bashrc 或用户的 ~/.bashrc,将脚本调用改为仅在交互式 shell 中执行:

    if [[ $- == *i* ]]; then
    /home/xx/opt/software/clash/clashctl.sh
    fi
  2. 修复 clash 脚本权限:

    chmod a+x /home/xx/opt/software/clash/clashctl.sh

3. SFTP 子系统连接失败

在 JetBrains Gateway 下载日志阶段报错:

SFTP session can not be started. Reason: Timeout waiting for response from SFTP subsystem

排查步骤

  • 检查 SSH 配置:
grep Subsystem /etc/ssh/sshd_config

确认输出类似:

Subsystem sftp /usr/libexec/openssh/sftp-server
  • 重启 SSH 服务:
sudo systemctl restart sshd
  • 确保 shell 在非交互式会话中不输出任何内容(用 ssh user@host "true" 验证是否干净)。

4. 重启后验证

完成上述操作后重启远程服务器或 SSH 服务,并重新连接 JetBrains Gateway:

sudo reboot

或

sudo systemctl restart sshd

总结

JetBrains Gateway 提供了非常方便的远程开发能力,但在大数据集群环境中,由于 shell 脚本、服务进程、权限控制等因素,常会引发连接失败。通过合理配置 bashrc、修复脚本权限和清理输出,可以顺利完成连接。



文章作者: QT
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 QT !
赏
  目录