Tag: jsch

JSch 0.1.53 session.connect()抛出“IO流读取结束”

我下载了一个新的JSch 0.1.53库,并且JSch(sftp)下载任务不再有效。 此发布失败, session.connect()函数抛出错误Session.connect: java.io.IOException: End of IO Stream Read 。 我的旧jsch.jar(2011-10-06)对同一主机工作正常,也许我错过了一个新的配置道具? Session session=null; ChannelSftp channel=null; try { JSch.setLogger(SSHUtil.createJschLogger()); JSch jsch=new JSch(); session=jsch.getSession(“myuser”, “11.22.33.44”, 22); session.setConfig(“StrictHostKeyChecking”, “no”); session.setPassword(“mypwd”); session.connect(2000); // <– FAILS HERE channel = (ChannelSftp)session.openChannel("sftp"); channel.connect(2000); … 这是一个广泛的JSch日志记录,表明正在进行什么。 INFO : Connecting to 11.22.33.44 port 22 INFO : Connection established INFO : Remote version string: […]

如何在Java中使用Apache Mina Sshd Server设置根目录

我使用Apache Mina Sshd API在java中启动本地SFTP服务器。在SFTP客户端我使用Jcraft jsch API创建我的SFTP客户端。我成功启动了服务器。问题是我想写一些unit testing用例到检查客户端是否可以将某些文件放入服务器的根目录。 目前我的SFTP服务器没有任何根目录。所以我想知道是否有任何方法来设置服务器的根目录。 例如: C:\ sftp如何将此路径设置为我的服务器根目录。然后,客户端每次与服务器连接时都可以读取和写入文件。谢谢。 public class SftpServerStarter { private SshServer sshd; private final static Logger logger = LoggerFactory.getLogger(SftpServerStarter.class); public void start(){ sshd = SshServer.setUpDefaultServer(); sshd.setPort(22); sshd.setHost(“localhost”); sshd.setPasswordAuthenticator(new MyPasswordAuthenticator()); sshd.setPublickeyAuthenticator(new MyPublickeyAuthenticator()); sshd.setKeyPairProvider(new SimpleGeneratorHostKeyProvider()); sshd.setSubsystemFactories(Arrays.<NamedFactory>asList(new SftpSubsystem.Factory())); sshd.setCommandFactory(new ScpCommandFactory()); try { logger.info(“Starting …”); sshd.start(); logger.info(“Started”); } catch (IOException e) { // […]

JSch库中SCP协议实现的说明

我正在考虑一个JSch库使用的例子,可以在这里找到: http://www.jcraft.com/jsch/examples/ScpFrom.java.html 我无法理解此示例中的几种代码模式。 他们来了: 是否有任何理由偏爱SF而不是SFTP,可以使用同一个库运行? 为什么我们在远程主机上运行scp -f 而不是简单地运行scp source_file_path destination_file_path ? 为什么在远程主机上执行更好? 在转移的开始有一条线 while(true){ int c=checkAck(in); if(c!=’C’){ break; } … 这个神奇的C字母是什么意思? 为何选择C ? 为什么要一直发送这个信号? // send ‘\0’ buf[0]=0; out.write(buf, 0, 1); out.flush(); 这怎么可以读取文件大小? long filesize=0L; while(true){ if(in.read(buf, 0, 1)<0){ // error break; } if(buf[0]==' ')break; filesize=filesize*10L+(long)(buf[0]-'0'); //What is this?? }

如何使用JSch SSH连接到另一台SSH服务器后面的服务器?

我需要能够从Java程序ssh到远程服务器,从那里SSH到另一台服务器。 我的客户端上有两台服务器的凭据。 这些命令将作为常规字符串(无用户输入)从应用程序内自动传递。 我需要能够在第二台服务器上运行这些自定义命令,并能够根据输出和一些简单的逻辑决定在运行时期间要发出什么命令。 我可以使用JSch来做到这一点,如果是的话,我应该从哪里开始研究? (例子,信息) ================================================== =========== 添加: 线程“main”中的exceptioncom.jcraft.jsch.JSchException:UnknownHostKey:host.net。 RSA密钥指纹是’blahblahblah’ 到目前为止,我通过修改known_hosts文件并在那里手动添加主机来解决这个问题。 我可以通过设置一个选项来绕过这个小问题,告诉JSch在询问YES-NO问题时自动按YES吗?

使用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 […]

如何以无配置方式将可选任务sshexec加载到Ant中?

我使用的是sshexec,它取决于jsch-0.1.48.jar。 我不能把它放到ant / lib目录中,因为其他希望使用相同构建脚本的用户必须先在他们的机器上进行配置才能这样做。 我想要做的是能够引用jsch-0.1.48.jar作为项目的一部分。 目前,我把它放在project / libs目录中,我正在尝试这样的事情: 但那不起作用: C:\dev\trunk\project:>ant sshcmd Buildfile: C:\dev\trunk\project\build.xml BUILD FAILED C:\dev\trunk\project\build.xml:275: taskdef A class needed by class org.apache.tools.ant.taskdefs.optional.ssh.SSHExec cannot be found: com/jcraft/jsch/Logger using the classloader AntClassLoader[C:\dev\trunk\project\lib\jsch-0.1.48.jar] Total time: 0 seconds

JSch:有没有办法将用户环境变量暴露给“exec”通道?

我正在尝试运行使用本地Linux逻辑路径的命令,例如cat $test_dir/test.dat ,但是逻辑路径$test_dir (用户环境变量)不能通过ChannelExec 。 但是当我使用交互式ChannelShell ,我能够看到用户变量和命令在交互式会话中运行良好。 我只能从“exec”会话中查看系统级环境变量。 甚至可以使用JSch库,如果是,那么我该如何实现它,如果不是我将使用什么库来实现这一目标? 在下面添加我的类代码:`public class SecureShell { private static final Logger logger = LogManager.getLogger(SecureShell.class); private String uName; private String pWord; private String hName; private int port; private Session session = null; private Channel channel = null; /**Create an instance to start and stop the remote shell and execute commands […]

如何使用JSch执行多个操作

我是SSH和JSch的新手。 当我从客户端连接到服务器时,我想做两个任务: 上传文件(使用ChannelSFTP ) 执行命令,例如创建目录,以及搜索MySQL数据库 目前我使用两个单独的shell登录来执行每个任务(实际上我还没有开始编程MySQL查询)。 对于上传相关代码是 session.connect(); Channel channel=session.openChannel(“sftp”); channel.connect(); ChannelSftp c=(ChannelSftp)channel; c.put(source, destination); 而对于我的命令 String command = “ls -l”;//just an example Channel channel=session.openChannel(“exec”); ((ChannelExec)channel).setCommand(command); 我应该在第一个频道之后断开会话,然后打开第二个频道吗? 或者完全关闭会话并开启新会话? 正如我所说,我是新手。

sudo登录后运行命令

我正在尝试执行下面的代码来执行sudo命令,但我不知道在sudo登录后如何执行命令 String[] commands = {“sudo su – myname;”,”id”}; JSch jsch = new JSch(); String username = “myuser”; com.jcraft.jsch.Session session = jsch.getSession(username,”hostname”, 22); session.setPassword(“my@123”); session.connect(); Channel channel=session.openChannel(“exec”); for(int a=0;a0){ int i=in.read(tmp, 0, 1024); if(i<0)break; System.out.print(new String(tmp, 0, i)); } if(channel.isClosed()){ System.out.println("exit-status: "+channel.getExitStatus()); break; } } }

当我使用JSch运行命令时删除不需要的字符

jsch = new JSch(); session = jsch.getSession(userName, ip, 22); session.setPassword(passWord); session.connect(); channel = session.openChannel(“shell”); expect = new Expect(channel.getInputStream(), channel.getOutputStream()); ((ChannelShell) channel).setPtyType(“dumb”); channel.connect(); System.out.println(“After channel and expect”); if (expect.expect(“#”) > -1) { output = “Connected”; } else { output = “Unexpected Prompt”; System.out.println(“Unexpected Prompt”); } expect.send(“top” + “\n”); Thread.sleep(3000); System.out.println(“inside top”); OutputStream out = channel.getOutputStream(); out.write(3); […]