Jsch ChannelExec:命令后如何将密码传递给服务器?

时间:2019-06-07 15:47:00

标签: java ssh jsch

我想在Java应用程序Jsch和ChannelExec中使用“ scp”命令。命令可以,但是如何传递密码?

直接在服务器上,它会像这样:

$ scp user@server:/myPath/* .
$ user@server's password:
(informations on files copied)

命令和密码分别位于两行。

要在Java中重新创建它,我这样做了:

ChannelExec channelExec = (ChannelExec) session.openChannel("exec"); //$NON-NLS-1$
channelExec.setCommand(scpCommand);
channelExec.connect();
try (OutputStream outputStream = channelExec.getOutputStream()) {
    pause(5000);
    outputStream.write((password + "\n").getBytes()); //$NON-NLS-1$
    outputStream.flush();
}

(read result and terminate session)

但是您可以猜测它不起作用。

您是否有解决方法的线索? 是否应该在命令中传递密码,并用特殊字符分隔? (“ \ n”也许我不知道) 还是有其他解决方案?

感谢您的时间!

1 个答案:

答案 0 :(得分:1)

在连接之前,请使用下面的代码行。

channelExec.setPty(true);

有关更多详细信息,请参阅下面的文档。 https://epaul.github.io/jsch-documentation/simple.javadoc/com/jcraft/jsch/ChannelExec.html#setPtyType-java.lang.String-