我想在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”也许我不知道) 还是有其他解决方案?
感谢您的时间!
答案 0 :(得分:1)
在连接之前,请使用下面的代码行。
channelExec.setPty(true);
有关更多详细信息,请参阅下面的文档。 https://epaul.github.io/jsch-documentation/simple.javadoc/com/jcraft/jsch/ChannelExec.html#setPtyType-java.lang.String-