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

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

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


命令和密码分别在2行中。

为了在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”也许我不知道)
还是有其他解决方案?

谢谢你的时间 !

最佳答案

连接之前,请使用以下代码行。

channelExec.setPty(true);


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

10-08 14:39