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