欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java實現(xiàn)ssh登錄linux并執(zhí)行命令的三種實現(xiàn)方式

 更新時間:2024年11月30日 09:07:51   作者:堅持奮斗的李洛克  
文章介紹了三種在Java中實現(xiàn)SSH登錄Linux并執(zhí)行命令的方法,包括使用ganymed-ssh2、jsch和sshd-core,由于ganymed-ssh2和jsch的最新版本較舊,可能無法與較新的Linux系統(tǒng)兼容,而sshd-core一直在更新,推薦使用

java實現(xiàn)ssh登錄linux并執(zhí)行命令

1.方法一

使用ganymed-ssh2

        <dependency>
            <groupId>ch.ethz.ganymed</groupId>
            <artifactId>ganymed-ssh2</artifactId>
            <version>262</version>
        </dependency>

但是這個包最新版本是2014年之后,就沒有更新了,linux 操作系統(tǒng)安裝 open-ssh 8.5及更高級版本,就一直提示連接失敗。就不再提供demo

2.方法二

jsch 暫時能使用,也是很久沒有更新了,恐怕后續(xù)也會有無法匹配系統(tǒng)最新協(xié)議的問題。

     <dependency>
            <groupId>com.jcraft</groupId>
            <artifactId>jsch</artifactId>
            <version>0.1.55</version>
        </dependency>
public class RemoteExecuteCommand {

    public static List<String> remoteExecute(Session session, String command)
    {
        System.out.println("CMD:" + command);
        List<String> resultLines = new ArrayList<>();
        ChannelExec channel = null;

        try
        {
            channel = (ChannelExec) session.openChannel("exec");
            channel.setCommand(command);
            InputStream input = channel.getInputStream();
            channel.connect(50000);
            BufferedReader inputReader = new BufferedReader(new InputStreamReader(input));
            String inputLine = null;
            while ((inputLine = inputReader.readLine()) != null)
            {
                System.out.println(inputLine);
                resultLines.add(inputLine);
            }

        } catch (Exception e)
        {
            e.printStackTrace();
        } finally
        {
            System.out.println("最后關(guān)閉channel");
            channel.disconnect();
        }

        return resultLines;
    }
}


        String usrName = "root";
        String passWord = "******";
		String remoteIP = "*****";
		String remoteIP = "ifconfig";
        JSch jSch = new JSch();
        try
        {
            Session session = jSch.getSession(usrName, remoteIP);
            session.setPassword(passWord);
            session.setConfig("StrictHostKeyChecking", "no");
            session.connect(100000);
            session.setTimeout(15000);
            if (session.isConnected() == true)
            {
                System.out.println("Host(" + remoteIP + ") connected!");
            }

            ChannelExec channel = (ChannelExec) session.openChannel("exec");

            remoteExecute(session, cmd);

3.方法三

使用sshd-core,一直在更新

<dependency>
    <groupId>org.apache.sshd</groupId>
    <artifactId>sshd-core</artifactId>
    <version>2.8.0</version>
</dependency>
//SshConnection 是自定義的,包含userName,pwd,hostName的實體類
 public static SshResponse runCommand(SshConnection conn, String cmd, long timeout)
            throws  IOException {
        SshClient client = SshClient.setUpDefaultClient();

        try {
            // Open the client
            client.start();
            // Connect to the server
            ConnectFuture cf = client.connect(conn.getUsername(), conn.getHostname(), 22);
            ClientSession session = cf.verify().getSession();
            session.addPasswordIdentity(conn.getPassword());
            session.auth().verify(TimeUnit.SECONDS.toMillis(timeout));

            // Create the exec and channel its output/error streams
            ChannelExec ce = session.createExecChannel(cmd);
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            ByteArrayOutputStream err = new ByteArrayOutputStream();
            ce.setOut(out);
            ce.setErr(err);
//       Execute and wait
            ce.open();
            Set<ClientChannelEvent> events =
                    ce.waitFor(EnumSet.of(ClientChannelEvent.CLOSED), TimeUnit.SECONDS.toMillis(timeout));
            session.close(false);

//       Check if timed out
            if (events.contains(ClientChannelEvent.TIMEOUT)) {
                throw new RuntimeException(conn.getHostname()+" 命令 "+cmd+ "執(zhí)行超時 "+timeout);
            }
            return new SshResponse(out.toString(), err.toString(), ce.getExitStatus());

        } finally {
            client.stop();
        }
    }
    
      public static void main(String[] args) throws IOException {
        String hostName = "*****";
        String userName = "root";
        String pwd = "****";
        SshConnection  conn  = new SshConnection(userName,pwd,hostName);
//    &&-表示前面命令執(zhí)行成功在執(zhí)行后面命令; ||表示前面命令執(zhí)行失敗了在執(zhí)行后面命令; ";"表示一次執(zhí)行兩條命令
        String cmd = "pwd && ps  -ef|grep tomcat";
        SshResponse response = runCommand(conn,cmd,15);
        System.out.println("==error=>"+response.getErrOutput());
        System.out.println("===return==>"+response.getReturnCode());
        System.out.println("===stdOut===>"+response.getStdOutput());
    }

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Maven2 plugin開發(fā)教程詳解

    Maven2 plugin開發(fā)教程詳解

    這篇文章主要為大家詳細(xì)介紹了Maven2 plugin的開發(fā)教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Java Elastic Job動態(tài)添加任務(wù)實現(xiàn)過程解析

    Java Elastic Job動態(tài)添加任務(wù)實現(xiàn)過程解析

    這篇文章主要介紹了Java Elastic Job動態(tài)添加任務(wù)實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-08-08
  • interrupt()和線程終止方式_動力節(jié)點Java學(xué)院整理

    interrupt()和線程終止方式_動力節(jié)點Java學(xué)院整理

    線程的thread.interrupt()方法是中斷線程,將會設(shè)置該線程的中斷狀態(tài)位,即設(shè)置為true,中斷的結(jié)果線程是死亡、還是等待新的任務(wù)或是繼續(xù)運行至下一步,就取決于這個程序本身
    2017-05-05
  • SWT(JFace)體驗之圓環(huán)狀(戒指型)

    SWT(JFace)體驗之圓環(huán)狀(戒指型)

    SWT(JFace)體驗之圓環(huán)狀(戒指型)實現(xiàn)代碼。
    2009-06-06
  • springboot使用事物注解方式代碼實例

    springboot使用事物注解方式代碼實例

    這篇文章主要介紹了springboot使用事物注解方式代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11
  • Java實現(xiàn)數(shù)據(jù)脫敏(Desensitization)的操作指南

    Java實現(xiàn)數(shù)據(jù)脫敏(Desensitization)的操作指南

    數(shù)據(jù)脫敏是指通過對敏感數(shù)據(jù)進(jìn)行部分或完全隱藏處理,保護(hù)敏感信息在存儲和使用過程中的安全性,常見的應(yīng)用場景包括日志記錄、接口返回、報表展示、數(shù)據(jù)分析等,本文給大家介紹了Java實現(xiàn)數(shù)據(jù)脫敏(Desensitization)的操作指南,需要的朋友可以參考下
    2025-02-02
  • springMVC?@RestControllerAdvice注解使用方式

    springMVC?@RestControllerAdvice注解使用方式

    這篇文章主要介紹了springMVC?@RestControllerAdvice注解使用方式,下面通過一個簡單的示例,演示如何使用?@RestControllerAdvice,感興趣的朋友跟隨小編一起看看吧
    2024-08-08
  • SpringBoot中的@PostConstruct注解詳細(xì)解析

    SpringBoot中的@PostConstruct注解詳細(xì)解析

    這篇文章主要介紹了SpringBoot中的@PostConstruct注解詳細(xì)解析,@PostConstruct注解,主要用于在Spring容器啟動時執(zhí)行某些操作或者任務(wù),@PostConstruct注解一般放在BEAN的方法上,一旦BEAN初始化完成之后,將會調(diào)用這個方法,需要的朋友可以參考下
    2024-01-01
  • 微信隨機(jī)生成紅包金額算法java版

    微信隨機(jī)生成紅包金額算法java版

    這篇文章主要為大家詳細(xì)介紹了java和php版的微信隨機(jī)生成紅包金額算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-07-07
  • java多線程join()方法的作用和實現(xiàn)原理解析(應(yīng)用場景)

    java多線程join()方法的作用和實現(xiàn)原理解析(應(yīng)用場景)

    join方法主要是用于將當(dāng)前線程掛起,等待其他線程結(jié)束后在執(zhí)行當(dāng)前線程,本文通過應(yīng)用場景分析代碼示例講解java多線程join()方法的作用和實現(xiàn)原理,感興趣的朋友一起看看吧
    2021-07-07

最新評論