标签: jsch

JSch中'shell'通道和'exec'通道之间有什么区别?

我希望能够将Java应用程序中表示为字符串的许多连续命令发送到SSH服务器以供执行.我应该使用:

Channel channel = session.openChannel("shell");
Run Code Online (Sandbox Code Playgroud)

-要么-

Channel channel = session.openChannel("exec");
Run Code Online (Sandbox Code Playgroud)

java ssh jsch

28
推荐指数
4
解决办法
3万
查看次数

如何使用Java在远程系统上运行SSH命令?

我是这类Java应用程序的新手,正在寻找一些示例代码,介绍如何使用SSH连接到远程服务器,执行命令,并使用Java作为编程语言获取输出.

java ssh command-line jsch

27
推荐指数
4
解决办法
9万
查看次数

通过JSch shell通道向服务器发送命令

我无法弄清楚如何通过JSch shell通道发送命令.

我这样做,但它不起作用:

JSch shell = new JSch();
String command = "cd home/s/src";  
Session session = shell.getSession(username, host, port);  
MyUserInfo ui = new MyUserInfo();  
ui.setPassword(password);  
session.setUserInfo(ui);  
session.connect();  

channel = session.openChannel("shell");  
fromServer = new BufferedReader(new InputStreamReader(channel.getInputStream()));  
toServer = channel.getOutputStream();
channel.connect();  
toServer.write((command + "\r\n").getBytes());
toServer.flush();
Run Code Online (Sandbox Code Playgroud)

然后我读取这样的输入:

StringBuilder builder = new StringBuilder();  

int count = 0;  
String line = "";  

while(line != null) {  
    line = fromServer.readLine();
    builder.append(line).append("\n");

    if (line.endsWith(".") || line.endsWith(">")){
        break;
    }
}  
String result = builder.toString();  
ConsoleOut.println(result);
Run Code Online (Sandbox Code Playgroud)

java ssh jsch

25
推荐指数
2
解决办法
7万
查看次数

使用JGit和JSCH时无效的privateKey

我正在使用以下代码在Java应用程序中使用Git.我有一个有效的密钥(一直使用它),这个特定的代码以前使用相同的密钥和git存储库,但现在我得到以下异常:无效的私钥:[B @ 59c40796.

jSch.addIdentity("<key_path>/private_key.pem");
Run Code Online (Sandbox Code Playgroud)

在线搜索后,我将createDefaultJSch更改为使用pemWriter:

    String remoteURL = "ssh://git@<git_repository>";
    TransportConfigCallback transportConfigCallback = new SshTransportConfigCallback();
    File gitFolder = new File(workingDirectory);
    if (gitFolder.exists()) FileUtils.delete(gitFolder, FileUtils.RECURSIVE);

    Git git = Git.cloneRepository()
            .setURI(remoteURL)
            .setTransportConfigCallback(transportConfigCallback)
            .setDirectory(new File(workingDirectory))
            .call();
}


private static class SshTransportConfigCallback implements TransportConfigCallback {
    private final SshSessionFactory sshSessionFactory = new JschConfigSessionFactory() {
        @Override
        protected void configure(OpenSshConfig.Host hc, Session session) {
            session.setConfig("StrictHostKeyChecking", "no");
        }

        @Override
        protected JSch createDefaultJSch(FS fs) throws JSchException {
            JSch jSch = super.createDefaultJSch(fs);
            jSch.addIdentity("<key_path>/private_key.pem");

            return jSch;
        }
    };
Run Code Online (Sandbox Code Playgroud)

但仍然得到无效的privateKey异常.

java ssh jsch

25
推荐指数
4
解决办法
8343
查看次数

使用Java JSch进行SFTP文件传输

这是我的代码,它在远程服务器上检索文件的内容并显示为输出.

package sshexample;

import com.jcraft.jsch.*;
import java.io.*;

public class SSHexample 
{
public static void main(String[] args) 
{
    String user = "user";
    String password = "password";
    String host = "192.168.100.103";
    int port=22;

    String remoteFile="sample.txt";

    try
    {
        JSch jsch = new JSch();
        Session session = jsch.getSession(user, host, port);
        session.setPassword(password);
        session.setConfig("StrictHostKeyChecking", "no");
        System.out.println("Establishing Connection...");
        session.connect();
        System.out.println("Connection established.");
        System.out.println("Creating SFTP Channel.");
        ChannelSftp sftpChannel = (ChannelSftp) session.openChannel("sftp");
        sftpChannel.connect();
        System.out.println("SFTP Channel created.");
        InputStream out= null;
        out= sftpChannel.get(remoteFile);
        BufferedReader br = new BufferedReader(new InputStreamReader(out));
        String line;
        while …
Run Code Online (Sandbox Code Playgroud)

java ssh sftp jsch file-transfer

24
推荐指数
3
解决办法
11万
查看次数

带有工作密码的"com.jcraft.jsch.JSchException:Auth fail"

在尝试将文件上传到我们的服务器时,我收到以下异常

    com.jcraft.jsch.JSchException: Auth fail
        at com.jcraft.jsch.Session.connect(Session.java:464)
        at com.jcraft.jsch.Session.connect(Session.java:158)
        at FtpService.transferFileToReciever(FtpService.java:80)
        at FtpService.transferFileToReciever(FtpService.java:54)
        at FtpService.transferFileToRecievers(FtpService.java:44)
        at FtpService.transferSingeFile(FtpService.java:241)
        at FtpService.main(FtpService.java:26)
    Auth fail
Run Code Online (Sandbox Code Playgroud)

源文件中函数transferFileToReciever的部分是

        JSch jsch = new JSch();
        jsch.addIdentity("/root/.ssh/id_dsa");
        Session session = jsch.getSession(username, host, 22);

        session.setUserInfo(serverinfo);
        session.connect(); //geting exception here

        boolean ptimestamp = true;
Run Code Online (Sandbox Code Playgroud)

密码正常,因为我可以使用ssh登录,但使用JSCh它甚至不提供密钥,用户名和密码.使用带有java版本"1.6.0_25"的id_dsa密钥.可能是什么错误?

发现其他类似的问题,但不是答案.提前致谢.

java jsch

22
推荐指数
2
解决办法
12万
查看次数

使用JSch ChannelSftp:如何使用动态名称读取多个文件?

我必须从SFTP服务器读取一堆带有动态文件名的.CSV文件.这些文件每15分钟生成一次.

我正在使用JSch的ChannelSftp,但是没有方法可以提供确切的文件名.我只看到一种.ls()方法.这给出了例如Vector

[drwxr-xr-x    2 2019     2019          144 Aug  9 22:29 .,
 drwx------    6 2019     2019          176 Aug 27  2009 ..,
 -rw-r--r--    1 2019     2019          121 Aug  9 21:03 data_task1_2011_TEST.csv,
 -rw-r--r--    1 2019     2019          121 Aug  9 20:57 data_task1_20110809210007.csv]
Run Code Online (Sandbox Code Playgroud)

有没有一种简单的方法来读取目录中的所有文件并将它们复制到另一个位置?

此代码适用于复制单个文件:

JSch jsch = new JSch();
session = jsch.getSession(SFTPUSER,SFTPHOST,SFTPPORT);
session.setPassword(SFTPPASS);
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.connect();
channel = session.openChannel("sftp");
channel.connect();
channelSftp = (ChannelSftp)channel;
channelSftp.cd(SFTPWORKINGDIR);
channelSftp.get("data_task1_20110809210007.csv","data_task1_20110809210007.csv");
Run Code Online (Sandbox Code Playgroud)

sftp jsch

21
推荐指数
1
解决办法
6万
查看次数

com.jcraft.jsch.JSchException:验证取消

我正在尝试编写一个Ant脚本来通过端口隧道检索URL.

当我使用密码(名字xxxx出于隐私)时,它工作得很好:

<project default="main">
  <target name="main">
    <sshsession host="xxxx"
    username="xxxx"
    password="xxxx">
      <LocalTunnel lport="1080" rhost="xxxx" rport="80"/>
      <sequential>
        <get src="http://localhost:1080/xxxx" dest="/tmp/xxxx"/>
      </sequential>
    </sshsession>
  </target>
</project>
Run Code Online (Sandbox Code Playgroud)

但是当我使用密钥文件时它不起作用,如下所示:

    <sshsession host="xxxx"
    username="xxxx"
    keyfile="/Users/xxxx/.ssh/id_dsa"
    passphrase="xxxx">
      <LocalTunnel lport="1080" rhost="xxxx" rport="80"/>
      <sequential>
        <get src="http://localhost:1080/xxxx" dest="/tmp/xxxx"/>
      </sequential>
    </sshsession>
Run Code Online (Sandbox Code Playgroud)

我得到这个例外:

/tmp/build.xml:8: com.jcraft.jsch.JSchException: Auth cancel
    at com.jcraft.jsch.Session.connect(Session.java:451)
    at com.jcraft.jsch.Session.connect(Session.java:150)
    at org.apache.tools.ant.taskdefs.optional.ssh.SSHBase.openSession(SSHBase.java:223)
Run Code Online (Sandbox Code Playgroud)
  • 我确定我正在使用正确的密钥文件(我尝试使用错误的名称,这给出了合法的FileNotFoundException).
  • 我可以从命令行成功ssh而不会被提示输入密码.
  • 我确定我正在使用密钥文件的正确密码.

这个错误的原因是什么,我该怎么办呢?

ant ssh jsch

20
推荐指数
2
解决办法
7万
查看次数

使用JSch上传Java SFTP,但如何覆盖当前文件?

我正在尝试使用JSch将两个文件上传到使用SFTP的服务器.如果目录为空,它可以正常上传文件,但我想一遍又一遍地上传相同的文件(只是更改内部的ID),但我无法弄清楚如何做到这一点.JSch中有一些名为OVERWRITE的静态参数,但我无法找到如何使用它.

任何人都想告诉我应该如何添加此设置?

这是我目前的代码:

public void upload() {
  try {
    JSch jsch = new JSch();
session = jsch.getSession(SFTPUSER, SFTPHOST, SFTPPORT);
session.setPassword(SFTPPASS);
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.connect();
channel = session.openChannel("sftp");
channel.connect();
channelSftp = (ChannelSftp) channel;
channelSftp.cd(SFTPWORKINGDIR);

    File f1 = new File("ext_files/" + FILETOTRANSFER1);
channelSftp.put(new FileInputStream(f1), f1.getName());
File f2 = new File("ext_files/" + FILETOTRANSFER2);
channelSftp.put(new FileInputStream(f2), f2.getName());

channelSftp.exit();
session.disconnect();
} catch (Exception ex) {
  ex.printStackTrace();
  }
}
Run Code Online (Sandbox Code Playgroud)

java upload sftp jsch

18
推荐指数
1
解决办法
4万
查看次数

使用JSch将文件放入远程目录,如果该目录不存在,则创建它

我想使用Jsch库和SFTP协议将文件复制到远程目录.如果远程主机上的目录不存在,则创建它.

在API文档,http://epaul.github.com/jsch-documentation/javadoc/,我注意到在put方法,有一种"模式",但它仅仅是传输模式: -转方式, RESUME,APPEND,OVERWRITE之一.

是否有一种简单的方法可以做到这一点,而无需编写自己的代码来检查存在,然后递归创建一个目录?

java sftp jsch

16
推荐指数
2
解决办法
3万
查看次数

标签 统计

jsch ×10

java ×8

ssh ×6

sftp ×4

ant ×1

command-line ×1

file-transfer ×1

upload ×1