gpt4 book ai didi

java - 如何使用 Java ssh JSch 和 jcabi-ssh 将密码传递给 scp

转载 作者:太空宇宙 更新时间:2023-11-04 12:17:27 27 4
gpt4 key购买 nike

我需要执行以下命令:

scp -r ~/dataIn yatsuk@192.168.1.1:~/dataOut

在 Ubuntu (16.04) 终端中,此命令可以正常工作。yatsuk@192.168.1.1 是本地主机。

所以我使用 jcabi 尝试此代码:

Shell shell = new SSHByPassword("192.168.1.1", 22, "yatsuk", "passw");
String stdout = new Shell.Plain(shell).exec("scp -r ~/dataIn yatsuk@192.168.1.1:~/dataOut");
System.out.println(stdout);

JSch 的这段代码:

JSch jsch = new JSch();
JSch.setConfig("StrictHostKeyChecking", "no");
Session session = jsch.getSession("yatsuk", 192.168.1.1, 22);
session.setPassword("passw");
session.connect();

Channel channel = session.openChannel("exec");
((ChannelExec) channel).setCommand("scp -r ~/dataIn yatsuk@192.168.1.1:~/dataOut");
((ChannelExec) channel).setErrStream(System.err);
channel.setOutputStream(System.out);
channel.setInputStream(System.in);
channel.connect();

while (!channel.isClosed()) {
Thread.sleep(1000);
}
channel.disconnect();
session.disconnect();

两者都返回给我:

Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,password).
lost connection

诸如 echo 1 > 1.txt 这样的简单命令可以完美运行。也许我不明白什么?

最佳答案

自动执行交互式命令是糟糕设计的标志。无论如何...

<小时/>

scp 只会在交互式 session /终端中提示您输入密码。出于安全原因,它不会从普通标准输入中读取密码。

因此您必须启用交互式 session /终端。

在 JSch 中,您可以通过调用 .setPty 来做到这一点:

channel.setPty(true);
channel.connect();
<小时/>

类似问题:Use JSch sudo example and Channel.setPty for running sudo command on remote host .

<小时/>

另一种方法是使用 expectsshpass 工具:How to pass password to scp?

关于java - 如何使用 Java ssh JSch 和 jcabi-ssh 将密码传递给 scp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39232333/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com