使用JSch库在Java中连接Linux服务器
使用JSch库在Java中连接Linux服务器
简介
JSch库能够实现在Java中连接Linux服务器并执行命令、操作文件等功能,支持多种认证方式。其官方网站为 http://www.jcraft.com/jsch/。
在Java中,与之类似的库还包括:Apache Mina SSHD http://mina.apache.org/sshd-project/。
案例
步骤1:创建Maven项目并添加依赖
在pom.xml
文件中添加JSch库的依赖:
<dependencies>
<!-- https://mvnrepository.com/artifact/com.jcraft/jsch -->
<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>0.1.55</version>
</dependency>
</dependencies>
步骤2:编写ShellTest类
创建一个名为ShellTest
的Java类,代码如下:
package com.test;
import com.jcraft.jsch.*;
import javax.swing.*;
import java.io.FilterInputStream;
import java.io.IOException;
/**
* @author Sindrol
* @date 2020/3/10 11:16
*/
public class ShellTest {
public static void main(String[] args) throws JSchException {
JSch jsch = new JSch();
//jsch.setKnownHosts("C:\\Users\\XXX\\.ssh\\known_hosts");
String host = JOptionPane.showInputDialog("Enter hostname", "192.168.213.134");
int port = 22;
String user = "root";
Session session = jsch.getSession(user, host, 22);
String passwd = JOptionPane.showInputDialog("Enter password", "123456");
session.setPassword(passwd);
session.setUserInfo(new MyUserInfo());
session.connect(30000);
Channel channel = session.openChannel("shell");
//((ChannelShell)channel).setAgentForwarding(true);
//解决Windows下输入流的问题
channel.setInputStream(new FilterInputStream(System.in) {
@Override
public int read(byte[] b, int off, int len) throws IOException {
return in.read(b, off, (len > 1024 ? 1024 : len));
}
});
//channel.setInputStream(System.in);
channel.setOutputStream(System.out);
//去除控制台彩色输出
((ChannelShell) channel).setPtyType("vt102");
//((ChannelShell) channel).setEnv("LANG", "zh_CN");
channel.connect(3 * 1000);
}
public static class MyUserInfo implements UserInfo, UIKeyboardInteractive {
@Override
public String getPassword() {
return null;
}
@Override
public boolean promptYesNo(String message) {
Object[] options = {"yes", "no"};
int foo = JOptionPane.showOptionDialog(null,
message,
"Warning",
JOptionPane.DEFAULT_OPTION,
JOptionPane.WARNING_MESSAGE,
null, options, options[0]);
return foo == 0;
}
@Override
public String getPassphrase() {
return null;
}
@Override
public boolean promptPassphrase(String message) {
return false;
}
@Override
public boolean promptPassword(String message) {
return false;
}
@Override
public void showMessage(String message) {
JOptionPane.showMessageDialog(null, message);
}
@Override
public String[] promptKeyboardInteractive(String destination,
String name,
String instruction,
String[] prompt,
boolean[] echo) {
return null;
}
}
}
步骤3:运行程序
可以直接运行上述程序,或者将其打包成JAR文件后在命令行窗口中运行。运行后,程序会弹出对话框要求输入主机名和密码,之后即可通过命令行与远程Linux服务器进行交互。
使用JSch库在Java中连接Linux服务器
https://www.dearcloud.cn/2020/03/10/20200310-java-jsch/index/