200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > Java模拟ssh交互_java模拟ssh执行shell命令

Java模拟ssh交互_java模拟ssh执行shell命令

时间:2022-12-19 06:49:26

相关推荐

Java模拟ssh交互_java模拟ssh执行shell命令

java模拟ssh执行shell命令

我们通常是在shell上操作linux命令,有没有可以通过java代码连接到ssh服务器来进行shell命令的操作呢?事实告诉我们是可以的,下面我们看一下源代码。

一、maven pom.xml

ch.ethz.ganymed

ganymed-ssh2

build210

二、代码实现

package www.gzdx.ssh;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import ch.ethz.ssh2.Connection;

import ch.ethz.ssh2.Session;

/**

* @date 7月28日

*/

public class SshBasic {

private static final Logger LOGGER = LoggerFactory.getLogger(SshBasic.class);

private Connection conn;

private static SshBasic instance;

private SshBasic() {

}

public static SshBasic getInstance() {

if (instance == null) {

synchronized (SshBasic.class) {

instance = new SshBasic();

}

}

return instance;

}

/**

* 连接ssh服务器

* @param hostname ip地址

* @param username 用户名

* @param password 密码

* @return

*/

public Connection connect(String hostname, String username, String password) {

try {

conn = new Connection(hostname);

conn.connect();

boolean isAuthenticated = conn.authenticateWithPassword(username, password);

if (isAuthenticated == false)

throw new IOException("Authentication failed.");

System.out.println("与主机:"+ hostname + "连接成功");

} catch (IOException e) {

System.out.println(e.getMessage() + e);

}

return conn;

}

/**

* 执行命令

* @param command 命令字符串

* @return

*/

public boolean execCommand(String command) {

boolean flag = false;

Session sess = null;

BufferedReader br = null;

if (conn == null)

throw new IllegalStateException("没有建立连接");

System.out.println("开始执行命令:" + command);

int length = -1;

byte[] buffer = new byte[1024];

long start = System.currentTimeMillis();

StringBuilder sb = new StringBuilder();

try {

sess = conn.openSession();

sess.execCommand(command);

InputStream is = sess.getStderr();

while ((length = is.read(buffer)) > -1) {

sb.append(new String(buffer, 0, length));

}

System.out.println(sb.toString()); // 实时打印命令执行情况

flag = true;

System.out.println("命令执行成功,耗时:秒"+ (System.currentTimeMillis() - start) / 1000.0 + "秒");

} catch (IOException e) {

System.out.println(e.getMessage() + e);

} finally {

try {

if (sess != null) {

sess.close();

}

if (null != br) {

br.close();

}

} catch (IOException e) {

e.printStackTrace();

}

}

return flag;

}

/**

* 关闭连接

*/

public void close() {

if (conn != null) {

conn.close();

}

}

public static void main(String[] args) {

String hostname = "主机ip地址";

String username = "用户名";

String password = "密码";

SshBasic instance = SshBasic.getInstance();

instance.connect(hostname, username, password);

instance.execCommand("scp /home/ueap/3.txt /home/ueap/ftp/");//在服务器上可执行的shell命令

instance.close();

}

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。