1、通过maven引入jsch
<dependency> <groupId>com.jcraft</groupId> <artifactId>jsch</artifactId> <version>0.1.55</version> </dependency>
2、代码编写
这里通过jsch远程连接linux服务器,并在控制台实现命令的交互。
(1)创建MyUserInfo
创建UserInfo类,实现UserInfo接口(必须)、UIKeyboardInteractive接口(可选)。将public boolean promptYesNo(String s)方法的返回值更改为true。
public class MyUserInfo implements UserInfo, UIKeyboardInteractive { @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) { //return false; return true; } @Override public void showMessage(String s) { } @Override public String[] promptKeyboardInteractive(String s, String s1, String s2, String[] strings, boolean[] booleans) { return null; } }
(2)创建Shell类连接服务器
public class Shell { /** * * @param host 服务器ip地址 * @param username 用户名 * @param password 密码 * @param port 端口 */ public void show(String host,String username,String password,int port){ try { //1、创建JSch对象 JSch jSch = new JSch(); //2、设置连接服务器参数 //用户名、主机ip、端口 获取session Session session = jSch.getSession(username, host, port); //设置密码 session.setPassword(password); //设置用户信息(必须) session.setUserInfo(new MyUserInfo()); //设置session连接超时时间 session.connect(30000); //3、设置操作服务器的方式 //采用shell方式(即命令交互) Channel channel = session.openChannel("shell"); //命令从控制台输入 channel.setInputStream(System.in); //显示信息从控制台输出 channel.setOutputStream(System.out); //设置命令执行超时时间 channel.connect(3*1000); } catch (JSchException e) { e.printStackTrace(); } } }
(3)启动
启动前确保linux服务器22端口开启。
public class AppMain { public static void main(String[] args) throws InterruptedException { String username="root";//用户名 String host="100.100.100.100";//ip地址 int port=22;//端口 22端口,即为ssh应用端口,远程连接端口 String password="123456789";//密码 Shell shell = new Shell(); shell.show(host,username,password,port); } }
3、测试结果
当main函数启动后,就可以将控制台当成shell进行linux命令交互。