
SSH 协议代理为核心对外提供标准 SSH 服务入口对内作为 Linux 服务器集群的统一跳板网关。通过双向流转发技术实现用户终端与目标 Linux 系统的透明交互同时集成认证、鉴权、会话审计等安全能力为企业提供 “安全、可控、可审计” 的 Linux 远程运维解决方案。效果图流程图外层还是通过Xshell连接堡垒机对SSH数据流进行了转发。代码详细POM添加dependency groupIdorg.apache.sshd/groupId artifactIdsshd-core/artifactId version2.13.1/version /dependency !-- 工具包 -- dependency groupIdcn.hutool/groupId artifactIdhutool-all/artifactId version5.8.25/version /dependency代码 JavaSshServerimport org.apache.sshd.client.SshClient; import org.apache.sshd.client.channel.ChannelShell; import org.apache.sshd.client.session.ClientSession; import org.apache.sshd.server.*; import org.apache.sshd.server.auth.AsyncAuthException; import org.apache.sshd.server.auth.password.PasswordAuthenticator; import org.apache.sshd.server.auth.password.PasswordChangeRequiredException; import org.apache.sshd.server.channel.ChannelSession; import org.apache.sshd.server.command.Command; import org.apache.sshd.server.keyprovider.SimpleGeneratorHostKeyProvider; import org.apache.sshd.server.session.ServerSession; import org.apache.sshd.server.shell.ShellFactory; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class JavaSshServer { private static final String LINUX_HOST 127.0.0.1; private static final int LINUX_PORT 2222; private static final String LINUX_USER root; private static final String LINUX_PWD 123456; public static void main(String[] args) { try { // 1. 创建 SSH 服务 SshServer sshd SshServer.setUpDefaultServer(); sshd.setPort(8888); sshd.setKeyPairProvider(new SimpleGeneratorHostKeyProvider()); sshd.setPasswordAuthenticator(new PasswordAuthenticator() { Override public boolean authenticate(String username, String password, ServerSession serverSession) throws PasswordChangeRequiredException, AsyncAuthException { // 判断逻辑 return admin.equals(username) 123456.equals(password); } }); sshd.setShellFactory(new ShellFactory() { Override public Command createShell(ChannelSession channelSession) { return new LinuxShellCommand(); // 返回自定义 Command } }); // 启动 sshd.start(); System.out.println(); System.out.println(✅ SSH 服务启动成功); System.out.println(✅ 地址localhost:8888); System.out.println(✅ 账号admin 密码123456); System.out.println(); Thread.sleep(1000 * 200000); } catch (Exception e) { throw new RuntimeException(e); } } public static class LinuxShellCommand implements Command { private InputStream in; private OutputStream out; private OutputStream err; private ExitCallback callback; Override public void setInputStream(InputStream in) { this.in in; } Override public void setOutputStream(OutputStream out) { this.out out; } Override public void setErrorStream(OutputStream err) { this.err err; } Override public void setExitCallback(ExitCallback callback) { this.callback callback; } Override public void start(ChannelSession channelSession, Environment env) throws IOException { // 1. 连接 Linux SshClient client SshClient.setUpDefaultClient(); client.start(); ClientSession session client.connect(LINUX_USER, LINUX_HOST, LINUX_PORT) .verify(60000).getSession(); session.addPasswordIdentity(LINUX_PWD); session.auth().verify(60000); // 2. 打开 Linux Shell ChannelShell channel session.createShellChannel(); channel.open().verify(60000); // 3. 流对接Xshell ↔ Linux transfer(in, channel.getInvertedIn()); // 输入 transfer(channel.getInvertedOut(), out); // 输出 transfer(channel.getInvertedErr(), err); // 错误 } // 流转发 private void transfer(InputStream from, OutputStream to) { new Thread(() - { try { byte[] buf new byte[1024]; int len; while ((len from.read(buf)) ! -1) { to.write(buf, 0, len); to.flush(); } } catch (Exception ignored) { } }).start(); } Override public void destroy(ChannelSession channelSession) throws Exception { } } }