Java运用ganymed-ssh2-build210.jar包远程连接操作linux服务器
2018-03-01 11:19
1111 查看
(1) 脚本命令的输入,和显示内容的输出
//创建连接,传入一个需要登陆的ip地址和port
Connection conn = new Connection(IP, SERVER_SSH_PORT);
//链接
conn.connect();
//账号,密码验证
boolean isAuthenticated = conn.authenticateWithPassword(admin, pwd1);
if (isAuthenticated == false) {
throw new IOException("密码不正确!");
}
打开一个session,有点象Hibernate的session ,执行你需要的linux 脚本命令 。
Session sess = conn.openSession();
方法一.直接使用封装好的执行命令
sess.execCommand("last");
方法二.使用脚本输入流输入:必须添加一下语句开启:
session.requestDumbPTY();
session.startShell();
即可获取输入输出流
InputStream in = sess.getStdout();InputStream err = sess.getStderr();OutputStream out = sess.getStdin()使用下面语句直接吧字符串命令写入即可:
session.getStdin().write((cmd + "\n").getBytes());
(2) 下载和上传文件的字节流:
先创建SCPClient对象,用于上传和下载操作:
SCPClient client = new SCPClient(conn);
下载文件字节流:
private static byte[] getRemoteFileBytes(SCPClient client, String pathFile) throws IOException {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
client.get(remoteFile, bos);
bos.flush();
byte[] bytes = bos.toByteArray();
bos.close();
return bytes;
}
上传文件字节流:
client.put(fileBytes, fileName, pathFile);
直接传输文件
//服务器端的文件下载到本地的目录下scpClient.getFile("/home/oracle/RUNNING.txt", "C:/");
//将本地文件上传到服务器端的目录下scp.putFile("C:/RUNNING.txt", "/home/oracl
4000
e");
输入命令并显示结果的方法参考:
/**
* sessionExcuteEnd 和 sessionLogOutTime 全局变量
*
* @param session
* @param cmds
* @throws IOException
*/
public static void excuteCommands(Session session, String... cmds) throws IOException {
sessionExcuteEnd = false;
//显示代码
final InputStream is = new StreamGobbler(session.getStdout());
new Thread() {
public void run() {
BufferedReader br = new BufferedReader(new InputStreamReader(is));
while (true) {
try {
sessionLogOutTime = System.currentTimeMillis();
String line = br.readLine();
if (line == null) break;
System.out.println(line);
} catch (IOException e) {
e.printStackTrace();
}
}
try {
is.close();
br.close();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("END");
sessionExcuteEnd = true;
}
}.start();
//命令输入代码
session.requestDumbPTY();
session.startShell();
for (String cmd : cmds) {
//2秒没日志响应,则输出下一步命令
while (System.currentTimeMillis() < sessionLogOutTime + 2000) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
sessionLogOutTime = System.currentTimeMillis();
session.getStdin().write((cmd + "\n").getBytes());
}
while (!sessionExcuteEnd) {
if (System.currentTimeMillis() - sessionLogOutTime > 5000) {//5秒未打印出日志,结束
session.close();
break;
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
ch.ethz.ssh2的API: 相关API说明
下载地址: Ganymed SSH-2 for Java
//创建连接,传入一个需要登陆的ip地址和port
Connection conn = new Connection(IP, SERVER_SSH_PORT);
//链接
conn.connect();
//账号,密码验证
boolean isAuthenticated = conn.authenticateWithPassword(admin, pwd1);
if (isAuthenticated == false) {
throw new IOException("密码不正确!");
}
打开一个session,有点象Hibernate的session ,执行你需要的linux 脚本命令 。
Session sess = conn.openSession();
方法一.直接使用封装好的执行命令
sess.execCommand("last");
方法二.使用脚本输入流输入:必须添加一下语句开启:
session.requestDumbPTY();
session.startShell();
即可获取输入输出流
InputStream in = sess.getStdout();InputStream err = sess.getStderr();OutputStream out = sess.getStdin()使用下面语句直接吧字符串命令写入即可:
session.getStdin().write((cmd + "\n").getBytes());
(2) 下载和上传文件的字节流:
先创建SCPClient对象,用于上传和下载操作:
SCPClient client = new SCPClient(conn);
下载文件字节流:
private static byte[] getRemoteFileBytes(SCPClient client, String pathFile) throws IOException {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
client.get(remoteFile, bos);
bos.flush();
byte[] bytes = bos.toByteArray();
bos.close();
return bytes;
}
上传文件字节流:
client.put(fileBytes, fileName, pathFile);
直接传输文件
//服务器端的文件下载到本地的目录下scpClient.getFile("/home/oracle/RUNNING.txt", "C:/");
//将本地文件上传到服务器端的目录下scp.putFile("C:/RUNNING.txt", "/home/oracl
4000
e");
输入命令并显示结果的方法参考:
/**
* sessionExcuteEnd 和 sessionLogOutTime 全局变量
*
* @param session
* @param cmds
* @throws IOException
*/
public static void excuteCommands(Session session, String... cmds) throws IOException {
sessionExcuteEnd = false;
//显示代码
final InputStream is = new StreamGobbler(session.getStdout());
new Thread() {
public void run() {
BufferedReader br = new BufferedReader(new InputStreamReader(is));
while (true) {
try {
sessionLogOutTime = System.currentTimeMillis();
String line = br.readLine();
if (line == null) break;
System.out.println(line);
} catch (IOException e) {
e.printStackTrace();
}
}
try {
is.close();
br.close();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("END");
sessionExcuteEnd = true;
}
}.start();
//命令输入代码
session.requestDumbPTY();
session.startShell();
for (String cmd : cmds) {
//2秒没日志响应,则输出下一步命令
while (System.currentTimeMillis() < sessionLogOutTime + 2000) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
sessionLogOutTime = System.currentTimeMillis();
session.getStdin().write((cmd + "\n").getBytes());
}
while (!sessionExcuteEnd) {
if (System.currentTimeMillis() - sessionLogOutTime > 5000) {//5秒未打印出日志,结束
session.close();
break;
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
ch.ethz.ssh2的API: 相关API说明
下载地址: Ganymed SSH-2 for Java
相关文章推荐
- 使用ganymed-ssh2-build.jar来操作linux服务器(上传、下载文件,远程创建目录,远程删除文件等等)
- Java远程连接操作linux服务器,scp获取文件
- Java通过SSH2协议执行远程Shell脚本(ganymed-ssh2-build210.jar)
- Java通过SSH2协议执行远程Shell脚本(ganymed-ssh2-build210.jar)
- Java远程连接操作linux服务器,scp获取文件
- Java远程连接Linux服务器并执行命令及上传文件功能
- 使用Java远程连接操作Redis
- java通过ssh2远程连接计算机并执行linux命令的方法(转)
- java使用Jsch实现远程操作linux服务器进行文件上传、下载,删除和显示目录信息
- java中如何使用jsch远程连接linux服务器并执行命令
- java工程部署到远程连接的linux服务器
- JAVA远程连接linux服务器读取文件(JSch)
- 利用Python实现对linux服务器SSH远程连接和系统操作的几种方式
- java中使用JSCH包,SFTP及SSH2文件操作及远程命令执行
- 远程桌面连接操作windowns系统搭建java项目运行环境
- java连接远程服务器之manyged-ssh2 (windows和linux)
- java利用Jsch实现在windows平台远程操作linux服务器
- 使用ganymed-ssh2-build通过ssh获得远程服务器参数
- java中使用JSCH包,SFTP及SSH2文件操作及远程命令执行
- ssh2远程连接linux服务器