Jsch shell模式下的代码示例:
Shell.java
import java.io.ByteArrayInputStream; import java.text.SimpleDateFormat; import java.util.Date; import javax.swing.JOptionPane; import com.jcraft.jsch.Channel; import com.jcraft.jsch.JSch; import com.jcraft.jsch.Session; import com.jcraft.jsch.UIKeyboardInteractive; import com.jcraft.jsch.UserInfo; public class Shell { public static void main(String[] arg) { Channel channel = null; Session session = null; try { String dir = Shell.class.getClassLoader().getResource(".").getFile(); JSch jsch = new JSch(); // System.out.println(dir); // System.exit(0); jsch.setKnownHosts(dir + ".ssh/known_hosts"); // jsch.setKnownHosts("/home/foo/.ssh/known_hosts"); String host = null, host1 = null; Integer port = 22; if (arg.length > 0) { host = arg[0]; } else { host = JOptionPane.showInputDialog("Enter username@hostname", System.getProperty("user.name") + "@localhost"); } String user = host.substring(0, host.indexOf('@')); String p = null; if (host.indexOf(':') != -1) { host1 = host.substring(host.indexOf('@') + 1, host.indexOf(':')); p = host.substring(host.indexOf(':') + 1); try { port = Integer.parseInt(p); } catch (Exception e) { e.printStackTrace(); port = 22; } } else { host1 = host.substring(host.indexOf('@') + 1); } session = jsch.getSession(user, host1, port); String passwd = JOptionPane.showInputDialog("Enter password"); session.setPassword(passwd); UserInfo ui = new MyUserInfo() { public void showMessage(String message) { JOptionPane.showMessageDialog(null, message); } public boolean promptYesNo(String message) { Object[] options = { "yes", "no" }; int foo = JOptionPane.showOptionDialog(null, message, "Warning", JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options[0]); return foo == 0; } // If password is not given before the invocation of // Session#connect(), // implement also following methods, // * UserInfo#getPassword(), // * UserInfo#promptPassword(String message) and // * UIKeyboardInteractive#promptKeyboardInteractive() }; session.setUserInfo(ui); // It must not be recommended, but if you want to skip host-key // check, // invoke following, // session.setConfig("StrictHostKeyChecking", "no"); // session.connect(); session.connect(30000); // making a connection with timeout. channel = session.openChannel("shell"); // Enable agent-forwarding. // ((ChannelShell)channel).setAgentForwarding(true); SimpleDateFormat df = new SimpleDateFormat("MM/dd/yyyy"); SimpleDateFormat df1 = new SimpleDateFormat("HH:mm:ss"); Date d1 = new Date(); String command = "sudo /bin/date -s " + df.format(d1) + " && sudo /bin/date -s " + df1.format(d1) + " \n"; byte[] bytes = command.getBytes(); ByteArrayInputStream bInput = new ByteArrayInputStream(bytes); // channel.setInputStream(System.in); channel.setInputStream(bInput); /* * // a hack for MS-DOS prompt on Windows. * channel.setInputStream(new FilterInputStream(System.in){ public * int read(byte[] b, int off, int len)throws IOException{ return * in.read(b, off, (len>1024?1024:len)); } }); */ channel.setOutputStream(System.out); // FileOutputStream foutput = new FileOutputStream(dir + // "shell.log", true); // channel.setOutputStream(foutput); /* * // Choose the pty-type "vt102". * ((ChannelShell)channel).setPtyType("vt102"); */ /* * // Set environment variable "LANG" as "ja_JP.eucJP". * ((ChannelShell)channel).setEnv("LANG", "ja_JP.eucJP"); */ channel.connect(); // 如果输出没有结尾,则一直等待下去 do { Thread.currentThread().sleep(1000); } while (!channel.isEOF()); } catch (Exception e) { System.out.println(e); } finally { channel.disconnect(); session.disconnect(); } } public static abstract class MyUserInfo implements UserInfo, UIKeyboardInteractive { public String getPassword() { return null; } public boolean promptYesNo(String str) { return false; } public String getPassphrase() { return null; } public boolean promptPassphrase(String message) { return false; } public boolean promptPassword(String message) { return false; } public void showMessage(String message) { } public String[] promptKeyboardInteractive(String destination, String name, String instruction, String[] prompt, boolean[] echo) { return null; } } }
MyUserInfo.java
import com.jcraft.jsch.UIKeyboardInteractive; import com.jcraft.jsch.UserInfo; /** * 主要功能是用于提示用户输入或确认信息的接口实现。 * * @author Administrator * */ public abstract class MyUserInfo implements UserInfo, UIKeyboardInteractive { private String password; public String getPassword() { return this.password; } public void setPassword(String password) { this.password = password; } public boolean promptYesNo(String str) { return false; } public String getPassphrase() { return this.password; } public boolean promptPassphrase(String message) { return false; } public boolean promptPassword(String message) { return false; } public void showMessage(String message) { } public String[] promptKeyboardInteractive(String destination, String name, String instruction, String[] prompt, boolean[] echo) { return null; } }
JschShellTest.java
import java.io.OutputStream; import java.io.PrintStream; import javax.swing.JOptionPane; import com.jcraft.jsch.Channel; import com.jcraft.jsch.JSch; import com.jcraft.jsch.Session; import com.jcraft.jsch.UserInfo; public class JschShellTest { /** * @param args */ public static void main(String[] args) { Session session = null; Channel channel = null; String host = "127.0.0.1", user = "conkeyn", passwd = "123456"; Integer port = 2222; JSch jsch = new JSch(); try { String dir = Shell.class.getClassLoader().getResource(".").getFile(); //把已经连接过的主机保存到known_hosts文件中。 jsch.setKnownHosts(dir + ".ssh/known_hosts"); session = jsch.getSession(user, host, port); session.setPassword(passwd); UserInfo ui = new MyUserInfo() { public void showMessage(String message) { JOptionPane.showMessageDialog(null, message); } public boolean promptYesNo(String message) { Object[] options = { "yes", "no" }; int foo = JOptionPane.showOptionDialog(null, message, "Warning", JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options[0]); return foo == 0; } // If password is not given before the invocation of // Session#connect(), // implement also following methods, // * UserInfo#getPassword(), // * UserInfo#promptPassword(String message) and // * UIKeyboardInteractive#promptKeyboardInteractive() }; session.setUserInfo(ui); session.connect(30000); channel = session.openChannel("shell"); //相对channel与sshd端,channel输出流是用于输出命令到sshd。 OutputStream inputstream_for_the_channel = channel.getOutputStream(); PrintStream commander = new PrintStream(inputstream_for_the_channel, true); channel.setOutputStream(System.out, true); // 可以使用以下注释的代码替代“channel.setOutputStream(System.out, true);” //相对channel与sshd端,channel输入流是用于接收sshd输出结果的 // InputStream outputstream_from_the_channel = channel.getInputStream(); // BufferedReader br = new BufferedReader(new InputStreamReader(outputstream_from_the_channel)); // String line; // while ((line = br.readLine()) != null) // System.out.print(line+"\n"); channel.connect(); commander.println("ls -la"); commander.println("cd ~"); commander.println("ls -la"); commander.println("exit"); commander.close(); //如果输出到结尾,则可以退出等待。 do { Thread.sleep(1000); } while (!channel.isEOF()); } catch (Exception e) { e.printStackTrace(); } session.disconnect(); } }
在
相关推荐
Java使用JSCH(Java Secure Channel)库连接远程服务器是一个常见的任务,特别是在自动化运维、文件传输或者执行远程命令等场景中。JSCH是一个纯Java实现的SSH2库,它提供了连接到支持SSH协议的服务器的能力,如...
5. **通道概念**:JSch使用Channel接口实现不同类型的SSH通道,包括Session Channel(用于执行命令)、SFTP Channel(用于文件传输)和Port Forwarding Channel(用于端口转发)。 6. **错误处理和调试**:在使用...
6. **错误处理**:在使用JSCH过程中,可能出现各种异常,如连接超时、认证失败等,JSCH提供了丰富的异常处理机制,帮助开发者更好地识别和解决这些问题。 `jzlib` 是一个Java实现的ZLIB压缩库,它实现了GZIP和...
赠送jar包:jsch-0.1.54.jar; 赠送原API文档:jsch-0.1.54-javadoc.jar; 赠送源代码:jsch-0.1.54-sources.jar; 赠送Maven依赖信息文件:jsch-0.1.54.pom; 包含翻译后的API文档:jsch-0.1.54-javadoc-API文档-...
**JSCH库的使用** JSCH库包含了一系列的类和接口,用于构建SSH连接。以下是一些关键的类: 1. `com.jcraft.jsch.Session`:这是建立SSH连接的基础,包含了设置用户名、密码、主机、端口等信息的方法,并可以创建和...
要使用这个库,开发者需要将"jsch.jar"添加到项目的类路径中,并按照JSCH的API文档编写相应的代码来实现SFTP操作。 总结来说,JSCH是Java平台上的一个强大工具,它使开发人员能够方便地集成SSH2协议,尤其是实现...
JSch的更新版本可能包含了对这个问题的修复,使得用户在使用新版本时能够避免遇到此类异常。 "Algorithm negotiation fail"异常通常是由于服务器和客户端支持的加密算法不匹配导致的。SSH2协议允许双方在建立连接时...
JSch jsch = new JSch(); session = jsch.getSession("username", "hostname", 22); session.setPassword("password"); // 如果使用密钥对,注释掉上面一行,然后设置以下两行 // String privateKeyPath = ...
以下是使用publickey认证方式的示例代码: ```java // 从配置文件中读取目标服务器ip、端口、用户名、私钥路径 String ftpHost = prop.getProperty("downloadHost"); String port = prop.getProperty(...
使用JSCH进行SFTP操作时,它提供了连接到远程主机的能力,执行文件的上传、下载、重命名、删除等操作。SFTP是SSH的一部分,提供了一种安全的文件传输方式,比传统的FTP更安全,因为所有的数据都是加密的,而且身份...
- **安全性**:使用JSCH时,应确保遵循最佳安全实践,如定期更新私钥,避免明文密码,以及合理使用端口转发以防止潜在的安全风险。 JSCH库是Java开发者进行SSH连接的强大工具,它简化了与远程系统进行安全通信的...
在IT领域,JavaScript Secure Channel (JSCH) 是一个非常实用的Java库,它允许开发者在Java应用程序中实现Secure Shell (SSH) ...同时,理解SSH协议和JSCH的使用方法,将有助于开发更高效、安全的远程操作解决方案。
JSch库的版本0.1.54是我们关注的重点,这个版本包含了源代码和示例程序,可以帮助开发者深入理解如何使用该库进行安全通信。 ### SSH2协议介绍 SSH(Secure Shell)是一种网络协议,用于安全地在不安全的网络上...
在使用JSch API时,首先需要创建`JSch`实例,并通过`Session.connect()`方法建立到远程主机的连接。这通常涉及到设置主机名、端口号、用户名和密码或密钥对。例如: ```java JSch jsch = new JSch(); Session ...
在Java程序中,你可以使用JSCH库来实现以下步骤: 1. 创建`JSch`实例:`JSch jsch = new JSch();` 2. 设置用户认证信息,这可以是用户名和密码,或者公钥和私钥: - 密码认证:`Properties config = new ...
在Java项目中使用JSCH,首先需要将jsch-0.1.54.jar添加到项目的类路径中。接着,可以通过创建`com.jcraft.jsch.Session`对象来建立与远程主机的SSH连接,设置用户名、密码或密钥对进行身份验证。一旦连接建立,可以...
JSch 是SSH2的一个纯Java实现。它允许你连接到一个sshd 服务器,使用端口转发,X11转发,文件传输等等。你可以将它的功能集成到你自己的 程序中。同时该项目也提供一个J2ME版本用来在手机上直连SSHD服务器
在使用JSch时,开发者需要注意的是,正确配置SSH连接参数非常重要,尤其是对于认证方式的选择。使用密钥认证时,需要提供私钥文件路径,而使用密码认证则需要正确设置用户名和密码。此外,由于SSH协议的安全性要求,...
赠送jar包:jsch-0.1.54.jar; 赠送原API文档:jsch-0.1.54-javadoc.jar; 赠送源代码:jsch-0.1.54-sources.jar; 赠送Maven依赖信息文件:jsch-0.1.54.pom; 包含翻译后的API文档:jsch-0.1.54-javadoc-API文档-...
使用 JSCH 中的 ChannelSftp 上传文件和文件夹 JSCH(Java Secure Channel)是一款自由和开源的 Java 库,提供了安全的通信通道,包括 SSH、SFTP、SCP 等协议。 ChannelSftp 是 JSCH 中的一个实现 SFTP 协议的 ...