我想知道是否有办法在 java serversocket 和 bash tcp 管道之间打开管道。如果是这样,你会怎么做。我知道如何设置 java 服务器端,但是如何通过 bash 甚至 Windows cmd 提示符打开套接字连接。基本上我想将标准输入通过管道传输到 tcp 连接并从中接收标准输出。
任何例子都可以理解!
-TJ
我想知道是否有办法在 java serversocket 和 bash tcp 管道之间打开管道。如果是这样,你会怎么做。我知道如何设置 java 服务器端,但是如何通过 bash 甚至 Windows cmd 提示符打开套接字连接。基本上我想将标准输入通过管道传输到 tcp 连接并从中接收标准输出。
任何例子都可以理解!
-TJ
这是一个示例 - 类 Connection、Session 等在导入中定义。当时我们使用的是 trilead SSH,我认为它不再公开可用,但您可以在网上找到很多其他库,例如http://linuxmafia.com/ssh/java.html
关键是,我们不必打开服务器套接字来 (1) 建立 SSH 会话,(2) 进行密码验证,(3) 在用户的登录 shell 上运行一些命令,以及 (4) 获取其标准输出。我相信大多数 SSH 库都会为您提供此功能。希望这有帮助,-MS
public void runCommand (String uName, String pWord, String cmd) throws Exception {
Connection conn = new Connection ("localhost");
conn.connect();
boolean authenticated = conn.authenticateWithPassword (uName, pWord);
if (!authenticated)
throw new Exception ("Authentication failure");
Session sess = connection.openSession();
sess.execCommand (cmd);
BufferedReader br = new BufferedReader (new InputStreamReader (
new StreamGobbler (sess.getStdout())));
for (String s = br.readLine() ; s != null ; s = br.readLine()) {
// do stuff with s
}
br.close();
sess.close();
conn.close();
}
使用任何 SSH 工具(有很多开源工具,例如 ganymade)参考:
http://java-source.net/open-source/network-clients/ganymed-ssh-2-for-java
我没有使用这个特定的客户端,而是使用其他 ssh 客户端来做你想做的事情。
PS:你真的不需要一个 ServerSocket ,但使用线程是有帮助的。
Netcat通常用于从 Unix shell 打开 TCP 连接。Bash(或我知道的任何其他 shell)不直接支持它。Netcat 的 Windows 端口似乎也存在,但我没有使用它。
但最好只使用 SSH,因为在这种情况下,Java 端不需要特殊设置 - 您只需将标准 I/O 流自动重定向到 SSH 客户端,并具有免费加密和可选压缩( ssh -C) 作为奖励。缺点是需要在 Java 端安装 SSH 服务器,在连接端安装 SSH 客户端。
ServerSocket 不能做任何事情,除了接受传入的连接,并创建用作端点的新套接字(您不使用 ServerSocket 进行任何发送或接收操作)。这很好,但要注意连接的哪一侧需要接受连接。我假设它会是 Bash,因为这似乎是“拥有”管道,所以你会改用 Socket 并连接它。