Java进行ssh登录linux 后执行命令

最近,由于维护的服务器一直重启(非本地原因),每次部署都比较麻烦。于是抽空研究了一下如果通过java进行ssh登录,并发送一些命令的方案。这里我写一个简单例子,登录,然后获取服务器时间,并打印结果

收先,这次我们采用JSch来进行实现,先发核心jar(其他jar放在最后):

<dependency>
	<groupId>com.jcraft</groupId>
	<artifactId>jsch</artifactId>
	<version>0.1.55</version>
</dependency>

然后我们一步一步来看

一、建立连接

JSch 是通过session来建立连接的,而session是通过JSch 对象来生成session的所以我们首先创建JSch
JSch jsch = new JSch(); Session session = jsch.getSession(userName, host, port);
然后设置session的参数:

 //设置密码	
 session.setPassword(password);
 //连接时不进行公钥确认,如果第一次登陆会让你确定是否接受公钥,改配置跳过这一步
 session.setConfig("StrictHostKeyChecking","no");
 //设置超时时间
 session.setTimeout(6000);
 //连接
 session.connect();
二、发送指令
        //发送指令
        //简历命令管道,有ChannelExec 模式和ChannelShell模式,可以自行百度了解异同
        ChannelExec exec = (ChannelExec) session.openChannel("exec");
        //获取输入流并发送命令
        InputStream in = exec.getInputStream();
        exec.setCommand("date");
        exec.connect();
        //读取输出结果
        String s = IOUtils.toString(in, "UTF-8");
        System.out.println("结果:"+s);
        in.close();
三、完整代码:
import com.jcraft.jsch.ChannelExec;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.testng.annotations.Test;
import java.io.*;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class SSHTest {
    @Test
    public void connectionLinux() throws JSchException, IOException {
        //建立连接
        // 兄弟们,ip和密码我就匿了
        String host="47.107.XXX.XXX";
        int port=22;
        String userName="root";
        String password="XXXXXXXX";
        JSch jsch = new JSch();
        Session session = jsch.getSession(userName, host, port);
        session.setPassword(password);
        session.setConfig("StrictHostKeyChecking","no");
        session.setTimeout(6000);
        session.connect();
        //建立连接结束
        //发送指令
        ChannelExec exec = (ChannelExec) session.openChannel("exec");
        InputStream in = exec.getInputStream();
        exec.setCommand("date");
        exec.connect();
        String s = IOUtils.toString(in, "UTF-8");
        System.out.println("结果:"+s);
        in.close();
    }
}
四、完整jar:
    <dependencies>
        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
            <version>1.12</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.9</version>
        </dependency>
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>6.14.3</version>
        </dependency>
        <dependency>
            <groupId>com.jcraft</groupId>
            <artifactId>jsch</artifactId>
            <version>0.1.55</version>
        </dependency>
    </dependencies>
Logo

更多推荐