Java程序调用ssh, scp, sftp

在java里能够经过Ganymed SSH-2, Expect4j等实现ssh登陆,因为Ganymed SSH-2是纯java实现,而且能够实现scp,sftp等,所以咱们采用Ganymed SSH-2 html

1> 下载安装 java

从http://code.google.com/p/ganymed-ssh-2/下载,咱们用的是ganymed-ssh2-build251beta1.zip。 shell

在eclipse里新建一个测试工程,并将解压后的ganymed-ssh2-build251beta1.jar拷到工程的lib目录下,而后在工程属性的java build path里添加这个jar的library。 windows

2> ssh session

将解压后的examples目录下的Basic.java 拷到工程的src目录,编译运行之后能够在控制台看到输出结果。除了执行一条命令,也能够执行一个shell脚本。 eclipse

例如将Basic.java中的“uname -a && date && uptime && who” 改成“/home/lss/test.sh”, test.sh的内容以下: ssh

#! /bin/sh
echo "testing shell";
ls;

在eclipse里运行之后的结果为: 测试

Here is some information about the remote host:
testing shell
1
test.sh
ExitCode: 0 ui


须要注意的是在一个session里只能执行一次命令,所以若是想在server上执行多个命令,要么打开多个session,要么在一个session里去执行一个shell脚本,shell脚本里去执行多个命令。 google


每次执行完之后,若是正确将返回ExitCode: 0,所以程序里能够经过sess.getExitStatus()来判断命令是否被正确执行。


3> scp

首先在程序里import ch.ethz.ssh2.SCPClient;   

而后经过下面的方法来实现:

SCPClient scpClient = conn.createSCPClient();  
scpClient.put("localFiles", "remoteDirectory"); //从本地复制文件到远程目录  
scpClient.get("remoteFiles","localDirectory"); //从远程获取文件   

例如:

scpClient.put("D:\\localTest.txt", "/home/bill/"); 须要注意的是windows的本地目录要用双斜杠来分隔目录。

scpClient.put("/home/bill/remoteTest.txt", "D:\\");

4> sftp

首先在程序里import ch.ethz.ssh2.SFTPv3Client;

SFTPv3Client sftpClient = new SFTPv3Client(conn);   sftpClient.mkdir("newRemoteDir", 0755); //远程新建目录 ,第二个参数是建立的文件夹的读写权限  sftpClient.rmdir("oldRemoteDir"); //远程删除目录     另外还有建立删除文件,读写文件等接口,参见http://www.ganymed.ethz.ch/ssh2/javadoc/ch/ethz/ssh2/SFTPv3Client.html

相关文章
相关标签/搜索