Ganymed ssh小使用
GanymedSSH
目录
1SSH简介1
2JAVA实现SSH的项目1
3GANYMEDSSH1
3.1依赖说明1
3.2实现简单命令1
3.2实现SCP命令
1SSH简介
SSH协议的简介可见:http://xmong.iteye.com/blog/1698124
2Java实现SSH的项目
Java实现SSH协议的项目有很多,如JFTP,trileadSSH,JSCH,ganymedSSH等
下面我们主要说的是关于ganymedSSH的一些小使用。
GanymedSSH-2forJava是用纯Java实现SSH-2协议的一个项目。可以通过它直接在Java程序中连接SSH服务器,实现基于SSH协议的服务访问。如远程命令执行和shell访问,本地和远程端口转发,本地数据流转发,X11转发,SCP,SFTP等功能。
3GanymedSSH
3.1依赖说明
GanymedSSH地址:http://www.ganymed.ethz.ch/ssh2/,下载ganymed-ssh2-build210.zip包,解压后可见src(源代码),ganymed-ssh2-build210.jar(jar包),javadoc(常用api文档),examples(简单使用案例)。可以通过简单使用案例学习ganymedssh的使用。
使用方法:将ganymed-ssh2-build210.jar加入到java项目的lib中即可使用。
3.2实现简单命令
package com.example;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.Session;
import ch.ethz.ssh2.StreamGobbler;
public class Basic
{
public static void main(String[] args)
{
//服务器ip
String hostname = "172.30.5.162";
//用户名
String username = "xmong";
//密码
String password = "xmong";
try
{
/* Create a connection instance */
//构造一个连接器,传入一个需要登陆的ip地址,连接服务
Connection conn = new Connection(hostname);
/* Now connect */
conn.connect();
/* Authenticate.
* If you get an IOException saying something like
* "Authentication method password not supported by the server at this stage."
* then please check the FAQ.
*/
//用户验证,传入用户名和密码
boolean isAuthenticated = conn.authenticateWithPassword(username, password);
if (isAuthenticated == false)
throw new IOException("Authentication failed.");
/* Create a session */
//打开一个会话session,执行linux命令
Session sess = conn.openSession();
sess.execCommand("pwd");
System.out.println("Here is some information about the remote host:");
/*
* This basic example does not handle stderr, which is sometimes dangerous
* (please read the FAQ).
*/
//接收目标服务器上的控制台返回结果,输出结果。
InputStream stdout = new StreamGobbler(sess.getStdout());
BufferedReader br = new BufferedReader(new InputStreamReader(stdout));
while (true)
{
String line = br.readLine();
if (line == null)
break;
System.out.println(line);
}
/* Show exit status, if available (otherwise "null") */
//得到脚本运行成功与否的标志 :0-成功 非0-失败
System.out.println("ExitCode: " + sess.getExitStatus());
/* Close this session */
//关闭session和connection
sess.close();
/* Close the connection */
conn.close();
}
catch (IOException e)
{
e.printStackTrace(System.err);
System.exit(2);
}
}
}输出结果:
Here is some information about the remote host: /home/xmong ExitCode: null
3.2实现SCP命令
package com.test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.SCPClient;
import ch.ethz.ssh2.Session;
import ch.ethz.ssh2.StreamGobbler;
public class TestScp {
public static void main(String[] args)
{
String hostname = "172.30.5.162";
String username = "xmong";
String password = "xmong";
try
{
/* Create a connection instance */
//构造一个连接器,传入一个需要登陆的ip地址,连接服务
Connection conn = new Connection(hostname);
conn.connect();
//用户验证,传入用户名和密码
boolean isAuthenticated = conn.authenticateWithPassword(username, password);
if (isAuthenticated == false)
throw new IOException("Authentication failed.");
//创建一个copy文件客户端
SCPClient scpClient = conn.createSCPClient();
scpClient.put("D:/test.txt ", "./");//从本地复制文件到远程目录
scpClient.get("./test.txt", "E:/");//从远程获取文件
/**
* 通过SFTP远程读取文件内容
* test.txt文件内容为sftp---test
*/
SFTPv3Client sftpClient = new SFTPv3Client(conn);
SFTPv3FileHandle sftpHandle = sftpClient.openFileRW("./test.txt");
byte[] bs = new byte[11];
int i = 0;
long offset = 0;
while(i!=-1){
i = sftpClient.read(sftpHandle, offset, bs, 0, bs.length);
offset += i;
}
System.out.println(new String(bs));
//打开一个会话session,执行linux命令
Session sess = conn.openSession();
sess.execCommand("ls");
System.out.println("Here is some information about the remote host:");
//接收目标服务器上的控制台返回结果,输出结果。
InputStream stdout = new StreamGobbler(sess.getStdout());
BufferedReader br = new BufferedReader(new InputStreamReader(stdout));
while (true)
{
String line = br.readLine();
if (line == null)
break;
System.out.println(line);
}
//得到脚本运行成功与否的标志 :0-成功 非0-失败
System.out.println("ExitCode: " + sess.getExitStatus());
//关闭session和connection
sess.close();
conn.close();
}
catch (IOException e)
{
e.printStackTrace(System.err);
System.exit(2);
}
}
}输出结果:
sftp---test Here is some information about the remote host: test.txt ExitCode: 0
相关推荐
projava 2020-11-14
WanKaShing 2020-11-12
airfish000 2020-09-11
tryfind 2020-09-14
yegen00 2020-09-10
kkaazz 2020-09-03
风语者 2020-09-02
BraveWangDev 2020-08-19
lichuanlong00 2020-08-15
gsl 2020-08-15
pandaphinex 2020-08-09
yhuihon 2020-08-09
CheNorton 2020-08-02
xiangqiao 2020-07-28
hpujsj 2020-07-26
hpujsj 2020-07-26
sshong 2020-07-19
BraveWangDev 2020-07-19
annan 2020-07-18