0

我想知道是否有办法在 java serversocket 和 bash tcp 管道之间打开管道。如果是这样,你会怎么做。我知道如何设置 java 服务器端,但是如何通过 bash 甚至 Windows cmd 提示符打开套接字连接。基本上我想将标准输入通过管道传输到 tcp 连接并从中接收标准输出。

任何例子都可以理解!

-TJ

4

4 回答 4

0

这是一个示例 - 类 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();
}
于 2011-01-27T07:57:58.727 回答
0

使用任何 SSH 工具(有很多开源工具,例如 ganymade)参考:

http://java-source.net/open-source/network-clients/ganymed-ssh-2-for-java

我没有使用这个特定的客户端,而是使用其他 ssh 客户端来做你想做的事情。

PS:你真的不需要一个 ServerSocket ,但使用线程是有帮助的。

于 2011-01-27T02:30:11.193 回答
0

Netcat通常用于从 Unix shell 打开 TCP 连接。Bash(或我知道的任何其他 shell)不直接支持它。Netcat 的 Windows 端口似乎也存在,但我没有使用它。

但最好只使用 SSH,因为在这种情况下,Java 端不需要特殊设置 - 您只需将标准 I/O 流自动重定向到 SSH 客户端,并具有免费加密和可选压缩( ssh -C) 作为奖励。缺点是需要在 Java 端安装 SSH 服务器,在连接端安装 SSH 客户端。

于 2011-01-27T07:14:56.363 回答
0

ServerSocket 不能做任何事情,除了接受传入的连接,并创建用作端点的新套接字(您不使用 ServerSocket 进行任何发送或接收操作)。这很好,但要注意连接的哪一侧需要接受连接。我假设它会是 Bash,因为这似乎是“拥有”管道,所以你会改用 Socket 并连接它。

于 2011-01-27T01:00:49.900 回答