java - 从 Java 远程登录

标签 java linux telnet

我正在尝试使用 java 代码通过 telnet 从另一个 linux 系统连接到远程 linux 系统,如下所示:

public static void main(String[] args) throws InterruptedException
{
    // TODO Auto-generated method stub  /usr/bin/telnet
    try
    {
        String line, commandInput;
        ProcessBuilder telnetProcessBuilder = new ProcessBuilder("/bin/bash");
        telnetProcessBuilder.redirectErrorStream(true);
        Process telnetProcess = telnetProcessBuilder.start();
        BufferedReader input = new BufferedReader(new InputStreamReader(telnetProcess.getInputStream()));
        BufferedWriter output = new BufferedWriter(new OutputStreamWriter(telnetProcess.getOutputStream()));
        commandInput = "telnet <hostname> -l <username>\n";
        output.write(commandInput);
        output.flush();
        commandInput = "<password>\n";
        output.write(commandInput);
        output.flush();
        commandInput = "ls -l\n";
        output.write(commandInput);
        output.flush();
        commandInput = "pwd\n";
        output.write(commandInput);
        output.flush();
        commandInput = "exit\n";
        output.write(commandInput);
        output.flush();
        commandInput = "uname -a\n";
        output.write(commandInput);
        output.flush();
        commandInput = "exit\n";
        output.write(commandInput);
        output.flush();
        while((line = input.readLine())!= null)
            System.out.println(line);
        //telnetProcess.destroy();
    }
    catch (IOException e)
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

我能够连接到远程机器并在第一次退出之前执行命令,并在第一次退出时从远程机器注销。现在,问题是我无法在第一次退出后执行命令,即使它是来自/bin/bash 的退出命令,这将使用代码 0 完成进程执行。如果我在第一次退出后销毁进程,BufferedReader 和 BufferedWriter 赢了如果进程以代码 0 退出,它通常会工作。我不确定是什么导致第一次退出后不执行命令。如果有人曾经遇到过,请告诉我答案。

谢谢

阿舒托什

最佳答案

阅读When Runtime.exec() won't ,它在调用外部可执行文件时提供了大量的好建议。

您的代码很可能存在的问题是您直到代码结束才读取进程的 stdout。这可以很容易导致进程的输出缓冲区已满,并且在您阅读一些内容之前无法再输出任何内容。

必须在单独的线程上读取进程的输出(有关详细信息代码,请参阅文章)。

关于java - 从 Java 远程登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5853703/

相关文章:

java - 无需按回车即可通过 telnet 发送数据

java - 在 Java 中关闭框架

java - GWT:response.setHeader - 如何?

java - 以相反顺序对数组进行排序 - 不反转

linux - BlazeDS:服务器上的日志文件存储在哪里?

email - 使用 Telnet 从 gmail 发送电子邮件

linux - 识别事件的 telnet session 及其 IP

java - 如何使用 Maven 程序集插件从依赖 jar 中排除包?

linux - bash for循环中的迭代顺序是否得到保证?

linux - Gnome Shell 上的 Emacs 中的透明背景