从Java生成SSH密钥

时间:2019-01-17 17:11:30

标签: java ssh-keys ssh-keygen

我有一个Java程序正在尝试在Linux机器上运行shell命令,特定的命令是生成SSH密钥。这些密钥不需要密码,因此我尝试使用ssh-keygen -t rsa -b 4096 -f my_key_name -P ""运行它。我知道此命令有效,因为我可以在命令行上运行它。但是,当我尝试使用以下代码运行它时,它显示为passphrase is too short (minimum five characters)

我可以将以下代码更改为:ssh-keygen -t rsa -b 4096 -f my_key_name -P "foobar",并且可以在Java上正常使用,但是我又不想输入密码。

RunCommandDto runCommandDto = new RunCommandDto();
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec('ssh-keygen -t rsa -b 4096 -f my_key_name -P ""');

BufferedReader stdInput = new BufferedReader(new InputStreamReader(proc.getInputStream()));
BufferedReader stdError = new BufferedReader(new InputStreamReader(proc.getErrorStream()));

String output = "";

while ((String sInOut = stdInput.readLine()) != null) {
    output += sInOut + "\n";
}

while ((String sErr = stdError.readLine()) != null) {
     output += sErr + "\n";
}

1 个答案:

答案 0 :(得分:1)

我尝试通过运行命令来创建它,在该命令中传递包含命令的文件。而且我能够创建文件。 这是我的测试:

   @Test
   public void test() throws IOException {
      String output = "";
      String sInOut;
      String sErr;
      //      RunCommandDto runCommandDto = new RunCommandDto();

      String[] cmd = { "sh", "~/ssh_key_gen.sh"};

      Runtime rt = Runtime.getRuntime();
      Process proc = rt.exec( cmd );

      BufferedReader stdInput = new BufferedReader( new InputStreamReader( proc.getInputStream() ) );
      BufferedReader stdError = new BufferedReader( new InputStreamReader( proc.getErrorStream() ) );
      while ( (sInOut = stdInput.readLine()) != null ) {
         output += sInOut + "\n";
      }

      while ( (sErr = stdError.readLine()) != null ) {
         output += sErr + "\n";
      }

      System.out.println("if failed: " + output);
   }

包含命令的文件如下:

#!/bin/bash
ssh-keygen -t rsa -b 4096 -f /tmp/sshkey -q -N ""

请注意:您可以获取文件“ ssh_key_gen.sh”的绝对路径,也可以获取文件的相对路径。