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 或第三方库层面。
这是最常见的“Java 远程开发”场景——本地写代码,远程编译/运行/调试。核心依赖 IDE 的 Remote Development 插件或内置功能,而非 Java 语言本身。
Remote Development 模式(基于 JetBrains Gateway),需在远程机器安装 jetbrains-agent 和 JDK;旧版常用 SSH Configurations 配置 SFTP 路径 + 远程 JVM 调试端口
22 端口,且用户有 ssh 登录权限和 java、javac 命令可用-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005(注意 address=*:5005 允许外部连接,非默认的 127.0.0.1:5005)sudo ufw allow 5005(Ubuntu)或检查 iptables 规则如果你需要在 Spring Boot 或普通 Java 程序里 ssh 到服务器执行 ls、tail -f 或部署脚本,得引入 SSH 客户端库。JSch 是最轻量的选择,但已多年未维护;生产环境建议用 Apache MINA SSHD。
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
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.getI
nputStream();
// ...读取输出
channel.disconnect();
session.disconnect();
很多团队现在直接用 VS Code + Remote-SSH 插件连服务器,在远程容器或裸机上装 JDK、Maven、Extension Pack for Java,实现全栈远程开发。这和 Java 语言无关,但对 Java 开发者极实用。
openssh-server 和完整 JDK(java -version 可用),不是 JREnode,所以远程也要有 node --version(哪怕你只写 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 版本匹配这些“边缘配置”。每个环节断掉,现象都类似“连不上”或“找不到类”,但根因完全不同。