您的位置:首页 > 运维架构 > Linux

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: