【问题标题】:SSH into multiple serversSSH 连接到多个服务器
【发布时间】:2011-07-12 06:26:57
【问题描述】:

您好,我正在尝试通过 ssh 连接到 4 台服务器,但我只进入了第 1 台服务器,其余的都没有。如果有人可以让我知道我在这段代码中哪里出错了。

try  {    
    File f = new File("/usr/site/html/Output.txt"); 

    BufferedWriter output = new BufferedWriter(new FileWriter(f));

    out.println(f.getPath());

    String Servers[] = {"root@a1.xyz.com","root@a2.xyz.com","root@a3.xyz.com","root@a4.xyz.com"};

    for(int i =0;i<Servers.length;i++){
        Process p = Runtime.getRuntime().exec("ssh "+Servers[i]);
        output.write("\nI'm In"+Servers[i]);
        String s = "exit";
        byte[] byteS = s.getBytes();
        p.getOutputStream().write(byteS);
        output.write("\nI'm logged out ");
        output.close();
    }

到目前为止,我只能登录第一个。有什么建议么??

谢谢

【问题讨论】:

  • 您可能想尝试使用 java ssh 库而不是转到命令行。 Jsch 效果很好。
  • 感谢乔恩,我也会尝试一下!但在将 output.close() 移出循环后,它对我来说到目前为止有效

标签: java shell ssh


【解决方案1】:

这可能无法解决您的问题,但从第一次查看您的代码开始,您就关闭了循环中的输出。任何尝试写入已关闭的输出都会产生运行时错误。将 output.close() 移出 for 循环。

【讨论】:

    【解决方案2】:

    检查进程的退出值并确保其为 0。此外,使用 Process 对象的 waitFor 方法可能是个好主意,因为它使线程等待直到当前进程终止。

    【讨论】:

    • 我还看到打印 byteS 给了我“java.lang.UNIXProcess@5b35249d”而不是“exit”
    • 你打印出调用 tostring 方法的进程对象,因此输出..如果你想打印 byteS (虽然不处理任何编码..) System.out.println (新字符串(byteS));
    • 另外,除非您尝试编写 ssh 库,否则最好使用一些 java ssh 库,例如 jcraft.com/jsch
    猜你喜欢
    • 1970-01-01
    • 2011-06-01
    • 2014-07-03
    • 2018-01-28
    • 2015-10-02
    • 1970-01-01
    • 2018-09-10
    • 1970-01-01
    • 2020-01-09
    相关资源
    最近更新 更多