Java进行ssh登录linux 后执行命令
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>
原文链接:https://blog.csdn.net/whb3299065/article/details/99638297