Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用java代码的ssh连接太多?_Java_Ssh - Fatal编程技术网

使用java代码的ssh连接太多?

使用java代码的ssh连接太多?,java,ssh,Java,Ssh,我在一段java代码中遇到ssh连接问题 这是罪犯代码 public class ExecuteSecureShellCommand extends Object { public static void main(String[] args) throws IOException { String [] machines = new String[] {machine0, machine1, machine2, machine3, machine4, machine5};

我在一段java代码中遇到ssh连接问题

这是罪犯代码

public class ExecuteSecureShellCommand extends Object {
  public static void main(String[] args) throws IOException {
      String [] machines = new String[] {machine0, machine1, machine2, machine3, machine4, machine5};

      ArrayList<Process> arr = new  ArrayList<Process>();
      for (int i = 0; i < 1000; i++){
              for (String machine : machines){
                      String[] shell_connector = {"ssh", "-x", "msalem@"+machine, "echo ok"};

                      Process process=null;

                      ProcessBuilder builder = new ProcessBuilder(shell_connector);

                      process = builder.start();
                      arr.add(process);
              }
              try {
                    Thread.sleep(1);
            } catch (InterruptedException e) {
                    e.printStackTrace();
            }
      }

      for (Process p: arr){
                    BufferedReader error_getter = new BufferedReader(new InputStreamReader(p.getErrorStream()));

                    String error_line = null;
                    while((error_line = error_getter.readLine()) != null)
                            System.out.println(error_line);
                    error_getter.close();
      }
  }
}
公共类ExecuteSecureShellCommand扩展对象{
公共静态void main(字符串[]args)引发IOException{
字符串[]机器=新字符串[]{machine0,machine1,machine2,machine3,machine4,machine5};
ArrayList arr=新的ArrayList();
对于(int i=0;i<1000;i++){
用于(字符串机:机器){
String[]shell_connector={“ssh”,“-x”,“msalem@”+machine,“echo ok”};
Process=null;
ProcessBuilder=新的ProcessBuilder(外壳连接器);
process=builder.start();
arr.add(过程);
}
试一试{
睡眠(1);
}捕捉(中断异常e){
e、 printStackTrace();
}
}
对于(流程p:arr){
BufferedReader error_getter=新的BufferedReader(新的InputStreamReader(p.getErrorStream());
字符串错误\u line=null;
while((error\u line=error\u getter.readLine())!=null)
系统输出打印LN(错误行);
错误_getter.close();
}
}
}
此代码用于测试目的,没有有意义的结果。但问题是它导致了厄洛尔: 远程主机关闭的ssh\u exchange\u标识连接

供参考:

  • 计算机共享同一存储系统(计算机1上的本地文件与计算机2上的本地文件相同)
  • 我已经生成了一个ssh密钥对,正在使用它进行连接
  • 我没有根访问权限,因此无法更改ssh连接数或其他任何限制
我想知道这个代码有什么问题? 执行大量ssh连接而不失败的最佳方法是什么

在此之前,我非常期待你的回答!
问候。

确实
ssh-xmsalem@hostnameecho ok
是否从命令行执行操作?如果Java程序以其他用户的身份运行,请确保以该用户的身份测试该命令。对于每个主机,或者只是其中的一部分主机,这会失败吗?对于循环
for
来说,这是否适用于一次迭代?为什么需要同时运行1000个ssh连接?这不能按顺序进行吗?@V先生。因此,对于只有1的循环,它不会失败。在我看来,当迭代次数超过机器数量时,它就开始失败。这将是最简单的。理想情况下,您只需继续重复使用和多路复用连接池(如果连接到同一个目标帐户)。无需一直中断和重建连接。是否
ssh-xmsalem@hostnameecho ok
是否从命令行执行操作?如果Java程序以其他用户的身份运行,请确保以该用户的身份测试该命令。对于每个主机,或者只是其中的一部分主机,这会失败吗?对于循环
for
来说,这是否适用于一次迭代?为什么需要同时运行1000个ssh连接?这不能按顺序进行吗?@V先生。因此,对于只有1的循环,它不会失败。在我看来,当迭代次数超过机器数量时,它就开始失败。这将是最简单的。理想情况下,您只需继续重复使用和多路复用连接池(如果连接到同一个目标帐户)。无需一直断开和重建连接。