【问题标题】:scp using Jsch to copy file asking for passwordscp 使用 Jsch 复制文件要求输入密码
【发布时间】:2019-08-25 06:54:25
【问题描述】:

我正在尝试将文件从一台远程服务器复制到另一台远程服务器。我尝试使用 scp。它是通过腻子复制文件,而不是通过代码。我目前正在使用 echo 来复制文件。使用 echo 我正在将字符串 finalStr 写入 abc.bcc ,它工作正常。但是在 Jsch 中使用下面的命令时它不起作用。

scp /home/abc.bcc user@host:/folder1/folder2/abc.bcc

我尝试添加 ssh 公钥,但没有成功。我尝试使用channel.setPty(true) 来避免密码提示并通过bufferedWriter 设置密码。但仍然无法复制文件。请提出需要更改的内容。

JSch jsch = new JSch();
Session session;
try {
    session = jsch.getSession("user", "host", 22);
    session.setPassword("password");
    session.setConfig("PreferredAuthentications", "publickey,keyboard-interactive,password");
    Properties config = new Properties();
    config.put("StrictHostKeyChecking", "no");
    session.setConfig(config);
    session.connect();
    logger.info("Connection status: " + session.isConnected());
    Channel channel = session.openChannel("exec");
    ((ChannelExec) channel).setCommand(
            "echo \"" + finalStr + "\" >> /folder1/folder2/abc.bcc");
    ((ChannelExec) channel).setPty(false);
    channel.setInputStream(null);
    ((ChannelExec) channel).setErrStream(System.err);
    InputStream in = channel.getInputStream();
    OutputStream out = channel.getOutputStream();
    channel.connect();
    logger.info("Channel status : " + channel.isConnected());
    out.write("\n".getBytes());
    out.flush();
    BufferedReader br = new BufferedReader(new InputStreamReader(in));
    String line;
    int index = 0;
    while ((line = br.readLine()) != null) {
        logger.info(++index + " : " + line);
    }
    channel.disconnect();
    session.disconnect();
}catch(....

调试输出:

debug1: Trying private key: /home/build_path/.ssh/id1 
debug3: no such identity: /home/build_path/.ssh/id1: No such file or directory 
debug1: Trying private key: /home/build_path/.ssh/id2 
debug3: no such identity: /home/build_path/.ssh/id2: No such file or directory 
debug1: Trying private key: /home/build_path/.ssh/id3 
debug3: no such identity: /home/build_path/.ssh/id_3: No such file or directory

【问题讨论】:

  • 你能添加一些日志或控制台输出吗?您是否还在日志等中看到任何错误。
  • -vvv 切换到scp 用于两种情况,并向我们展示输出。
  • 1) “对于这两种情况”,请 2) 这几乎不是一个完整的输出。 3)删除您不需要的评论。谢谢。

标签: java scp jsch


【解决方案1】:

日志看起来用户主页设置不正确!所以它没有找到关键文件!

一般做法:

  1. 无需代码即可让 ssh 工作。
  2. 从一个远程复制到另一个需要在两个远程上相互解析主机名和连接。所以登录到一个遥控器并尝试从那里直接连接到另一个遥控器。这不能保证有效。

我很确定,一旦你解决了这个问题,你就能让其他一切正常工作。 当涉及代理时,这可能会变得相当复杂,因为代理设置必须在所有 3 台机器之间正常工作。 我反复面临这些问题,而且可能非常混乱。

【讨论】:

    猜你喜欢
    • 2013-11-24
    • 1970-01-01
    • 1970-01-01
    • 2017-02-25
    • 2011-09-10
    • 2013-12-21
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多