Java本身不提供SSH服务,所谓“Java中配置SSH”实为IDE或第三方库集成SSH客户端能力。常见场景包括IDE远程开发(如IDEA Remote Development模式需配置jetbrains-agent和JDK)、Java应用调用JSch/MINA SSHD执行远程命令,以及VS Code+Remote-SSH插件进行远程Java开发,核心依赖系统级SSH配置、JDK路径、防火墙规则及密钥格式等边缘配置。

Java 本身不提供 SSH 服务或远程开发协议支持,所谓“Java 中配置 SSH”实际是指:用 Java 编写的工具(如 IDE)连接远程服务器,或在 Java 应用中集成 SSH 客户端能力。真正的 SSH 配置发生在操作系统、IDE 或第三方库层面。
IntelliJ IDEA / Eclipse 连接远程 Linux 进行 Java 开发
这是最常见的“Java 远程开发”场景——本地写代码,远程编译/运行/调试。核心依赖 IDE 的 Remote Development 插件或内置功能,而非 Java 语言本身。
- IDEA 2022.3+ 推荐使用
Remote Development模式(基于 JetBrains Gateway),需在远程机器安装jetbrains-agent和 JDK;旧版常用SSH Configurations配置 SFTP 路径 + 远程 JVM 调试端口 - 必须确保远程 Linux 开放
22端口,且用户有ssh登录权限和java、javac命令可用 - 调试时远程启动命令必须加 JVM 参数:
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005(注意address=*:5005允许外部连接,非默认的127.0.0.1:5005) -
防火墙常被忽略:远程执行
sudo ufw allow 5005(Ubuntu)或检查iptables规则
Java 应用中调用 SSH 执行远程命令(JSch / Apache MINA SSHD)
如果你需要在 Spring Boot 或普通 Java 程序里 ssh 到服务器执行 ls、tail -f 或部署脚本,得引入 SSH 客户端库。JSch 是最轻量的选择,但已多年未维护;生产环境建议用 Apache MINA SSHD。
- JSch 示例依赖:
com.jcraft:jsch:0.1.55(注意:0.1.55 是最后一个稳定版,0.1.56+ 有兼容性问题) - 连接失败常见报错:
com.jcraft.jsch.JSchException: Auth fail—— 多因密钥格式不对(OpenSSH 新格式sk-ecdsa-sha2-nistp256@openssh.com不被 JSch 支持),应转成 PEM:ssh-keygen -p -m PEM -f ~/.ssh/id_rsa - MINA SSHD 更现代,支持 SFTP、端口转发、自定义认证方式,但 API 更冗长;Maven 坐标:
org.apache.sshd:sshd-core:2.12.0
JSch jsch = new JSch();
Session session = jsch.getSession("user", "host", 22);
session.setConfig("StrictHostKeyChecking", "no");
session.setPassword("password"); // 或用 session.setIdentityRepository(...)
session.connect();
Channel channel = session.openChannel("exec");
((ChannelExec) channel).setCommand("java -version");
channel.connect();
InputStream in = channel.getInputStream();
// ...读取输出
channel.disconnect();
session.disconnect();
VS Code + Remote-SSH 插件跑 Java 项目(无需 IDEA)
很多团队现在直接用 VS Code + Remote-SSH 插件连服务器,在远程容器或裸机上装 JDK、Maven、Extension Pack for Java,实现全栈远程开发。这和 Java 语言无关,但对 Java 开发者极实用。
立即学习“Java免费学习笔记(深入)”;
- 远程机器必须预装
openssh-server和完整 JDK(java -version可用),不是 JRE - VS Code 自动上传的 server 依赖
node,所以远程也要有node --version(哪怕你只写 Java) - Java 扩展(如
redhat.java)会在远程生成.metadata和~/.vscode-server,磁盘空间不足会导致启动失败,错误提示常为Failed to start language server - 推荐在远程
~/.bashrc中显式导出:export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64,否则插件可能找不到 JDK
真正容易卡住的地方不是代码怎么写,而是 SSH 权限、JDK 路径、防火墙、密钥格式、IDE 远程 agent 版本匹配这些“边缘配置”。每个环节断掉,现象都类似“连不上”或“找不到类”,但根因完全不同。










