采用JSCH实现对linux远程操作,执行简单的命令详解编程语言
2023-06-13 09:20:29 时间
JSch是Java Secure Channel的缩写。JSch是一个SSH2的纯Java实现。它允许你连接到一个SSH服务器,并且可以使用端口转发,X11转发,文件传输等,当然你也可以集成它的功能到你自己的应用程序。
官方地址为:http://www.jcraft.com/jsch/
GitHub 地址为:https://github.com/vngx/vngx-jsch
JSCH的特点:
1.基于DSA和RSA加密。
2.可以实现4中认证机制。分别是:
(1i): password
(2i): publickey(DSA,RSA)
(3i): keyboard-interactive
(4i): gss-api-with-mic
3.生成public/private key pair.
4.执行bash script 等脚本
5.可以通过HTTP/SOCK5 proxy
6.支持常见SSH1协议和SSH2协议
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.nio.charset.Charset; import com.jcraft.jsch.Channel; import com.jcraft.jsch.ChannelExec; import com.jcraft.jsch.JSch; import com.jcraft.jsch.JSchException; import com.jcraft.jsch.Session; public class JSchDemo { private String charset = "UTF-8"; // 设置编码格式 private String user; // 用户名 private String passwd; // 登录密码 private String host; // 主机IP private JSch jsch; private Session session; /** * @param user用户名 * @param passwd密码 * @param host主机IP public JSchDemo(String user, String passwd, String host) { this.user = user; this.passwd = passwd; this.host = host; /** * 连接到指定的IP * @throws JSchException public void connect() throws JSchException { jsch = new JSch(); session = jsch.getSession(user, host, 22); session.setPassword(passwd); java.util.Properties config = new java.util.Properties(); config.put("StrictHostKeyChecking", "no"); session.setConfig(config); session.connect(); /** * 执行相关的命令 public void execCmd() { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String command = ""; BufferedReader reader = null; Channel channel = null; try { while ((command = br.readLine()) != null) { channel = session.openChannel("exec"); ((ChannelExec) channel).setCommand(command); channel.setInputStream(null); ((ChannelExec) channel).setErrStream(System.err); channel.connect(); InputStream in = channel.getInputStream(); reader = new BufferedReader(new InputStreamReader(in, Charset.forName(charset))); String buf = null; while ((buf = reader.readLine()) != null) { System.out.println(buf); } catch (IOException e) { e.printStackTrace(); } catch (JSchException e) { e.printStackTrace(); } finally { try { reader.close(); } catch (IOException e) { e.printStackTrace(); channel.disconnect(); session.disconnect(); public static void main(String[] args) throws Exception { String user = "root"; String passwd = "123456"; String host = "192.168.1.188"; JSchDemo demo = new JSchDemo(user, passwd, host); demo.connect(); demo.execCmd(); }
10788.html
cjava相关文章
- Linux中使用命令行实现后台运行(linux命令后台运行)
- 命令Linux中i命令的作用了解Linux中i命令的强大功能(linux-i)
- Linux笔记本:给你一个满意的选择(linux推荐笔记本)
- 【学习Linux,提升工作效率】(工作中常用linux命令)
- 行学习深入浅出:Linux红帽命令行学习之旅(linux红帽命令)
- Linux加载DLL:一种新的方法(linux调用dll)
- 定时触发:Linux脚本自动执行(linux脚本定时执行)
- 学习Linux命令:一步一步走(如何学习linux命令)
- Linux发展史:从分支到主干(linux的分支)
- 测速Linux:速度来袭!(测速linux)
- Linux系统下默认编码设置指南(linux系统默认编码)
- 映射Linux驱动程序:让操作更高效(映射linux驱动器)
- Linux设置alias,命令瞬间变简单(linux设置alias)
- 无所不能的vi: Linux下必会的命令(linux下vi命令)
- 配置Linux下别名配置实现快捷操作(linux别名)
- 文件Linux下执行文件的使用指南(linux可执行)
- 开源中兴展开Linux开源之旅(中兴linux)
- Linux下终止进程的技巧(终止进程 linux)
- 提升Linux系统管理效率的关键步骤(linux 管理员)
- Linux查询:简洁掌握系统配置(linux查询配置)