代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
Java
】
java模拟ssh执行shell命令
作者:
欣然
/ 发布于
2018/9/27
/
1201
我们通常是在shell上操作linux命令,有没有可以通过java代码连接到ssh服务器来进行shell命令的操作呢?事实告诉我们是可以的,下面我们看一下源代码。
maven pom.xml <dependency> <groupId>ch.ethz.ganymed</groupId> <artifactId>ganymed-ssh2</artifactId> <version>build210</version> </dependency> 代码实现 package www.gzdx.ssh; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import ch.ethz.ssh2.Connection; import ch.ethz.ssh2.Session; /** ?* @date 2017年7月28日 ?*/ public class SshBasic { ?? ?private static final Logger LOGGER = LoggerFactory.getLogger(SshBasic.class); ?? ?private Connection conn; ?? ?private static SshBasic instance; ?? ?private SshBasic() { ?? ?} ?? ?public static SshBasic getInstance() { ?? ??? ?if (instance == null) { ?? ??? ??? ?synchronized (SshBasic.class) { ?? ??? ??? ??? ?instance = new SshBasic(); ?? ??? ??? ?} ?? ??? ?} ?? ??? ?return instance; ?? ?} ?? ?/** ?? ? * 连接ssh服务器 ?? ? * @param hostname ip地址 ?? ? * @param username 用户名 ?? ? * @param password? 密码 ?? ? * @return ?? ? */ ?? ?public Connection connect(String hostname, String username, String password) { ?? ??? ?try { ?? ??? ??? ?conn = new Connection(hostname); ?? ??? ??? ?conn.connect(); ?? ??? ??? ?boolean isAuthenticated = conn.authenticateWithPassword(username, password); ?? ??? ??? ?if (isAuthenticated == false) ?? ??? ??? ??? ?throw new IOException("Authentication failed."); ?? ??? ??? ?System.out.println("与主机:"+ hostname + "连接成功"); ?? ??? ?} catch (IOException e) { ?? ??? ??? ?System.out.println(e.getMessage() + e); ?? ??? ?} ?? ??? ?return conn; ?? ?} ?? ? ?? ?/** ?? ? * 执行命令 ?? ? * @param command 命令字符串 ?? ? * @return ?? ? */ ?? ?public boolean execCommand(String command) { ?? ??? ?boolean flag = false; ?? ??? ?Session sess = null; ?? ??? ?BufferedReader br = null; ?? ??? ?if (conn == null) ?? ??? ??? ?throw new IllegalStateException("没有建立连接"); ?? ??? ? ?? ??? ?System.out.println("开始执行命令:" +? command); ?? ??? ?int length = -1; ?? ??? ?byte[] buffer = new byte[1024]; ?? ??? ?long start = System.currentTimeMillis(); ?? ??? ?StringBuilder sb = new StringBuilder(); ?? ??? ?try { ?? ??? ??? ?sess = conn.openSession(); ?? ??? ??? ?sess.execCommand(command); ?? ??? ??? ?InputStream is = sess.getStderr(); ?? ??? ??? ?while ((length = is.read(buffer)) > -1) { ?? ??? ??? ??? ?sb.append(new String(buffer, 0, length)); ?? ??? ??? ?} ?? ??? ??? ?System.out.println(sb.toString()); // 实时打印命令执行情况 ?? ??? ??? ?flag = true; ?? ??? ??? ?System.out.println("命令执行成功,耗时:秒"+ (System.currentTimeMillis() - start) / 1000.0 + "秒"); ?? ??? ?} catch (IOException e) { ?? ??? ??? ?System.out.println(e.getMessage() + e); ?? ??? ?} finally { ?? ??? ??? ?try { ?? ??? ??? ??? ?if (sess != null) { ?? ??? ??? ??? ??? ?sess.close(); ?? ??? ??? ??? ?} ?? ??? ??? ??? ?if (null != br) { ?? ??? ??? ??? ??? ?br.close(); ?? ??? ??? ??? ?} ?? ??? ??? ?} catch (IOException e) { ?? ??? ??? ??? ?e.printStackTrace(); ?? ??? ??? ?} ?? ??? ?} ?? ??? ?return flag; ?? ?} ?? ?/** ?? ? * 关闭连接 ?? ? */ ?? ?public void close() { ?? ??? ?if (conn != null) { ?? ??? ??? ?conn.close(); ?? ??? ?} ?? ?} ?? ?public static void main(String[] args) { ?? ??? ?String hostname = "主机ip地址"; ?? ??? ?String username = "用户名"; ?? ??? ?String password = "密码"; ?? ??? ?SshBasic instance = SshBasic.getInstance(); ?? ??? ?instance.connect(hostname, username, password); ?? ??? ?instance.execCommand("scp /home/ueap/3.txt /home/ueap/ftp/");//在服务器上可执行的shell命令 ?? ??? ?instance.close(); ?? ?} }
试试其它关键字
同语言下
.
List 切割成几份 工具类
.
一行一行读取txt的内容
.
Java PDF转换成图片并输出给前台展示
.
java 多线程框架
.
double类型如果小数点后为零则显示整数否则保留两位小
.
将图片转换为Base64字符串公共类抽取
.
sqlParser 处理SQL(增删改查) 替换schema 用于多租户
.
JAVA 月份中的第几周处理 1-7属于第一周 依次类推 29-
.
java计算两个经纬度之间的距离
.
输入时间参数计算年龄
可能有用的
.
List 切割成几份 工具类
.
一行一行读取txt的内容
.
Java PDF转换成图片并输出给前台展示
.
java 多线程框架
.
double类型如果小数点后为零则显示整数否则保留两位小
.
将图片转换为Base64字符串公共类抽取
.
sqlParser 处理SQL(增删改查) 替换schema 用于多租户
.
JAVA 月份中的第几周处理 1-7属于第一周 依次类推 29-
.
java计算两个经纬度之间的距离
.
输入时间参数计算年龄
欣然
贡献的其它代码
(
11
)
.
获取微信昵称时 过滤特殊字符
.
java模拟ssh执行shell命令
.
一组数中两两二元组,差最大有几对,差最小呢?(数组
.
构造连续日期的sql
.
倒计时间表
.
将str进行用pad进行左补足到len位
.
字符串转成 Json 格式
.
判断复选框是否为空
.
两个日期范围内的间隔
.
8数码游戏
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3