从 Java 生成 SSH 密钥
Generating an SSH key from Java
我有一个 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";
}
我尝试通过 运行 命令创建它,我在其中传递包含该命令的文件。而且我能够创建文件。
这是我的测试:
@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',也可以获取文件的相对路径。
我有一个 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";
}
我尝试通过 运行 命令创建它,我在其中传递包含该命令的文件。而且我能够创建文件。 这是我的测试:
@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',也可以获取文件的相对路径。