繁体   English   中英

如何使用Jsch在2个远程unix框之间执行scp?

[英]How to perform scp between 2 remote unix boxes using Jsch?

我正在使用Jsch编写Java代码,其中需要在2个远程UNIX盒之间执行scp。

我试图以与从我的Java代码执行普通命令相同的方式执行scp命令,如下所示:

JSch jsch=new JSch();
Session session=jsch.getSession("user", "host", 22);
UserInfo ui=new MyUserInfo();
session.setUserInfo(ui);
session.setPassword("pwd");
session.connect();
Channel channel=session.openChannel("exec");
((ChannelExec)channel).setCommand("scp user@mademo.org:/home/user/demo.csv /home/user/demo.csv");
channel.setInputStream(null);
((ChannelExec)channel).setErrStream(System.err);
InputStream in=channel.getInputStream();
channel.connect();
//Printing operations
channel.disconnect();
session.disconnect();

而不是像我期望的那样提示user@mademo.org的密码。 我只有错误:

Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,gssapi-with-mic,password).
exit-status: 1

通过直接在UNIX框上执行命令,我发现了这一点:

scp要求输入密码才能连接到远程计算机。但是,使用此代码,它不会提示您输入任何密码。 所以它试图在没有密码的情况下执行scp并尝试三次(NumberoOFAttempts标志)并给出错误消息...

我想知道如何使scp atleast提示符下输入一些内容而不是不输入密码...我使用了jsch示例中给出的MyUserInfo类的默认实现作为我的代码...

要么

有没有办法提供密码以及scp命令? 我试图尽可能避免使用私钥/公钥组合。

编辑:来自Paulo的帖子。现在,我添加了channel.setPty(true)以获取命令的伪终端,并且它要求我输入密码,而不是自动失败。

我现在应该如何指定密码...我尝试在控制台中键入密码,但是它不接受,并且一直在等待用户输入。...我尝试使用channel.setInputStream(pwdbytes)进行设置。 但它一直在等待命令,而不接受输入..

感谢您对此的任何帮助...

您第一个Unix机器上的scp命令尝试从控制台/终端读取密码。 但这仅在存在与该流程关联的终端时才有效-缺省情况下不起作用。

解决此问题的最简单方法是在连接通道之前使用channel.setPty(true) ,然后通过输入/输出流提供密码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM