Генерация ключа SSH из Java - PullRequest
       34

Генерация ключа SSH из Java

0 голосов
/ 17 января 2019

У меня есть Java-программа, которая пытается запускать команды оболочки на компьютере с Linux, при этом специальная команда заключается в создании ключа 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 голосов
/ 17 января 2019

Я попытался создать его, запустив команду, в которой передаю файл, содержащий команду. И я смог создать файл. Вот мой тест:

   @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', либо вы можете получить относительный путь к нему.

...