[From] http://xpenxpen.iteye.com/blog/2061869
上一篇文章我们成功搭建了sshd服务器,并通过3种方式登陆上了ssh。这一篇我们将用开源jar包jsch来登陆ssh服务器。
1.去官网下载最新的jar包
jsch-0.1.51.jar
2.运行官方例子
Shell.java
演示了如何连接到sshd服务器
Exec.java
演示了登陆上去并执行一条命令
注意以上2个例子让你输入密码同样也是输入cyg_server用户的密码
运行成功后可以看下它的代码。
3.再做一个SFTP试验
- import java.io.*;
- import java.util.*;
- import com.jcraft.jsch.*;
-
- public class Test1 {
-
- public static void main(String[] args) throws Exception {
- Test1.sshSftp("127.0.0.1", "Administrator", "cyg_server", 22);
- Test1.sshSftp2("127.0.0.1", "Administrator", 22, "C:/Users/Administrator/rsa_my", "");
- }
-
-
- public static void sshSftp(String ip, String user, String psw
- ,int port) throws Exception{
- System.out.println("开始用户名密码方式登陆");
- Session session = null;
-
- JSch jsch = new JSch();
-
- if(port <=0){
-
- session = jsch.getSession(user, ip);
- }else{
-
- session = jsch.getSession(user, ip ,port);
- }
-
-
- if (session == null) {
- throw new Exception("session is null");
- }
-
-
- session.setPassword(psw);
-
- session.setConfig("StrictHostKeyChecking", "no");
-
- session.connect(30000);
-
- sftp(session, "aa.log");
- System.out.println("sftp成功");
- }
-
-
- public static void sshSftp2(String ip, String user
- ,int port ,String privateKey ,String passphrase) throws Exception{
- System.out.println("开始秘钥方式登陆");
- Session session = null;
-
- JSch jsch = new JSch();
-
-
-
- if (privateKey != null && !"".equals(privateKey)) {
- if (passphrase != null && "".equals(passphrase)) {
-
- jsch.addIdentity(privateKey, passphrase);
- } else {
-
- jsch.addIdentity(privateKey);
- }
- }
-
-
- if(port <=0){
-
- session = jsch.getSession(user, ip);
- }else{
-
- session = jsch.getSession(user, ip ,port);
- }
-
-
- if (session == null) {
- throw new Exception("session is null");
- }
-
-
- session.setConfig("StrictHostKeyChecking", "no");
-
- session.connect(30000);
-
- sftp(session, "bb.log");
- System.out.println("sftp成功");
- }
-
- private static void sftp(Session session, String uploadFileName) throws Exception {
- Channel channel = null;
- try {
-
- channel = (Channel) session.openChannel("sftp");
- channel.connect(1000);
- ChannelSftp sftp = (ChannelSftp) channel;
-
-
-
- sftp.cd("testsftp");
-
-
- Vector v = sftp.ls("*.txt");
- for(int i=0;i<v.size();i++){
- System.out.println(v.get(i));
- }
-
-
- OutputStream outstream = sftp.put(uploadFileName);
- InputStream instream = new FileInputStream(new File("C:/ftptest/aa.txt"));
-
- byte b[] = new byte[1024];
- int n;
- while ((n = instream.read(b)) != -1) {
- outstream.write(b, 0, n);
- }
-
- outstream.flush();
- outstream.close();
- instream.close();
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- session.disconnect();
- channel.disconnect();
- }
- }
- }
代码是引用了http://my.oschina.net/hetiangui/blog/137357
首先这句sftp.ls("*.txt")是列出指定文件夹下所有txt文件,
然后sftp.put("3.txt")是上传一个文件到SFTP服务器上。
注意main函数里有2种登陆方式,
第一种是通过用户名Administrator,密码cyg_server的方式登陆。
第二种是通过秘钥方式登陆,我们的私钥目录是"C:/Users/Administrator/rsa_my",而passphrase则为空。
Jsch初步
原文:http://www.cnblogs.com/pekkle/p/6680524.html