java實現ssh連接服務器的方法步驟
更新時間:2023年09月08日 09:46:01 作者:Roc-xb
本文主要介紹了java實現ssh連接服務器的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
一、引入依賴
<dependency> <groupId>com.jcraft</groupId> <artifactId>jsch</artifactId> <version>0.1.54</version> </dependency>
二、工具類
(1)SSHExecutor類
import com.jcraft.jsch.*;
import java.io.*;
import java.util.concurrent.TimeUnit;
import static java.lang.String.format;
public class SSHExecutor {
private static long INTERVAL = 100L;
private static int SESSION_TIMEOUT = 30000;
private static int CHANNEL_TIMEOUT = 3000;
private JSch jsch = null;
private Session session = null;
public SSHExecutor(SSHInfo sshInfo) throws JSchException {
jsch = new JSch();
session = jsch.getSession(sshInfo.getUser(), sshInfo.getHost(), sshInfo.getPort());
session.setPassword(sshInfo.getPassword());
session.setUserInfo(new MyUserInfo());
session.connect(SESSION_TIMEOUT);
}
/*
* 注意編碼轉換
* */
public long shell(String cmd, String outputFileName) throws JSchException, IOException, InterruptedException {
long start = System.currentTimeMillis();
Channel channel = session.openChannel("shell");
PipedInputStream pipeIn = new PipedInputStream();
PipedOutputStream pipeOut = new PipedOutputStream(pipeIn);
FileOutputStream fileOut = new FileOutputStream(outputFileName, true);
channel.setInputStream(pipeIn);
channel.setOutputStream(fileOut);
channel.connect(CHANNEL_TIMEOUT);
pipeOut.write(cmd.getBytes());
Thread.sleep(INTERVAL);
pipeOut.close();
pipeIn.close();
fileOut.close();
channel.disconnect();
return System.currentTimeMillis() - start;
}
public int exec(String cmd) throws IOException, JSchException, InterruptedException {
ChannelExec channelExec = (ChannelExec) session.openChannel("exec");
channelExec.setCommand(cmd);
channelExec.setInputStream(null);
channelExec.setErrStream(System.err);
InputStream in = channelExec.getInputStream();
channelExec.connect();
int res = -1;
StringBuffer buf = new StringBuffer(1024);
byte[] tmp = new byte[1024];
while (true) {
while (in.available() > 0) {
int i = in.read(tmp, 0, 1024);
if (i < 0) break;
buf.append(new String(tmp, 0, i));
}
if (channelExec.isClosed()) {
res = channelExec.getExitStatus();
System.out.println( format("Exit-status: %d", res));
break;
}
TimeUnit.MILLISECONDS.sleep(100);
}
System.out.println(buf.toString());
channelExec.disconnect();
return res;
}
public Session getSession() {
return session;
}
public void close() {
getSession().disconnect();
}
/*
* SSH連接信息
* */
public static class SSHInfo {
private String user;
private String password;
private String host;
private int port;
public SSHInfo(String user, String password, String host, int port) {
this.user = user;
this.password = password;
this.host = host;
this.port = port;
}
public String getUser() {
return user;
}
public String getPassword() {
return password;
}
public String getHost() {
return host;
}
public int getPort() {
return port;
}
}
/*
* 自定義UserInfo
* */
private static class MyUserInfo implements UserInfo {
@Override
public String getPassphrase() {
return null;
}
@Override
public String getPassword() {
return null;
}
@Override
public boolean promptPassword(String s) {
return false;
}
@Override
public boolean promptPassphrase(String s) {
return false;
}
@Override
public boolean promptYesNo(String s) {
System.out.println(s);
System.out.println("true");
return true;
}
@Override
public void showMessage(String s) {
}
}
}(2)SSHUtil類
import com.jcraft.jsch.JSchException;
import java.io.IOException;
public class SSHUtil {
public static SSHExecutor sshExecutor;
public static void start (){
// 此處配置服務器信息
SSHExecutor.SSHInfo sshInfo = new SSHExecutor.SSHInfo("用戶名", "密碼", "host", "port");
try {
sshExecutor = new SSHExecutor(sshInfo);
System.err.println("ssh災備日志服務器已鏈接");
} catch (Exception e) {
System.err.println("ssh災備日志服務器鏈接失敗??!");
e.printStackTrace();
sshExecutor.close();
}
}
/**
* 運行cmd命令
*/
public static void runCmd (String cmd) throws JSchException, IOException, InterruptedException {
sshExecutor.exec(cmd);
}
}三、使用方法
啟動類中加入
SSHUtil.start();
例如:運行cmd命令
SSHUtil.runCmd("cmd");到此這篇關于java實現ssh連接服務器的方法步驟的文章就介紹到這了,更多相關java ssh連接服務器內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Spring中BeanFactoryPostProcessors是如何執(zhí)行的
BeanFactoryPostProcessor是Spring容器提供的一個擴展機制,它允許開發(fā)者在Bean的實例化和初始化之前對BeanDefinition進行修改和處理,這篇文章主要介紹了你知道Spring中BeanFactoryPostProcessors是如何執(zhí)行的嗎,需要的朋友可以參考下2023-11-11
Springboot+Thymeleaf+Jpa實現登錄功能(附源碼)
最近有學習到關于Springboot+Thymeleaf+Jpa的綜合運用知識,因此想寫一個簡單的登錄界面來嘗試一下,需要的朋友們下面隨著小編來一起學習學習吧2021-05-05
詳解Jenkins 實現Gitlab事件自動觸發(fā)Jenkins構建及釘釘消息推送
這篇文章主要介紹了Jenkins 實現Gitlab事件自動觸發(fā)Jenkins構建及釘釘消息推送,應該會對大家學習Jenkins有所啟發(fā)2021-04-04

