package test.core;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.util.Vector;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import test.base.KeterSSHBaseTest;
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpException;
public class CommandTest extends KeterSSHBaseTest {
/**
* Logger for this class
*/
private static final Logger logger = LoggerFactory.getLogger(CommandTest.class);
@Test
public void test() throws Exception {
// logger.info(runBash("id"));//ok
// logger.info(runBash("pwd"));//ok
// logger.info(runBash("ssh 192.168.1.100 echo haha"));//ok
// String cmd_scp="scp /opt/keter/keter-framework/framework-todo.txt 192.168.1.100:/tmp/haha";
// runBash(cmd_scp);
// sshSftp("192.168.1.100","root","1qaz!QAZ",-1);//ok
sshSftp("192.168.1.100","~/.ssh/authorized_keys");
}
public String runBash(String runCommand) throws InterruptedException {
String result = null;
// String returnVal = null;
try {
Runtime r = Runtime.getRuntime();
Process p = r.exec(runCommand);
// Process p = r.exec("/bin/bash -c "+runCommand);
BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null) {
// System.out.println(inputLine);
result += inputLine;
// returnVal = inputLine;
}
if(p.waitFor()!=0){
logger.error("command [{}] executed error!",runCommand);
}
in.close();
} catch (IOException e) {
System.out.println(e);
}
return result;
}
public static void sshSftp(String ip, String user, String psw ,int port) throws Exception{
Session session = null;
Channel channel = null;
JSch jsch = new JSch();
if(port <=0){
//连接服务器,采用默认端口
session = jsch.getSession(user, ip);
}else{
//采用指定的端口连接服务器
session = jsch.getSession(user, ip ,port);
}
//如果服务器连接不上,则抛出异常
if (session == null) {
throw new Exception("session is null");
}
//设置登陆主机的密码
session.setPassword(psw);//设置密码
//设置第一次登陆的时候提示,可选值:(ask | yes | no)
session.setConfig("StrictHostKeyChecking", "no");
//设置登陆超时时间
session.connect(30000);
try {
//创建sftp通信通道
channel = (Channel) session.openChannel("sftp");
channel.connect(1000);
ChannelSftp sftp = (ChannelSftp) channel;
//进入服务器指定的文件夹
sftp.cd("/opt/keter");
//列出服务器指定的文件列表
Vector v = sftp.ls("*.txt");
for(int i=0;i<v.size();i++){
logger.info("server file is:[{}]",v.get(i));
}
//以下代码实现从本地上传一个文件到服务器,如果要实现下载,对换以下流就可以了
putFile(sftp,"/opt/keter/keter-framework/framework-todo.txt","/opt/haha/haha.txt");
} catch (Exception e) {
e.printStackTrace();
} finally {
session.disconnect();
channel.disconnect();
}
}
/**
* 利用JSch包实现SFTP下载、上传文件
* @param ip 主机IP
* @param user 主机登陆用户名
* @param psw 主机登陆密码
* @param port 主机ssh2登陆端口,如果取默认值(默认值22),传-1
* @param privateKey 密钥文件路径
* @param passphrase 密钥的密码
*
*/
public static void sshSftp(String ip, String privateKey) throws Exception{
Session session = null;
Channel channel = null;
JSch jsch = new JSch();
//设置不带口令的密钥
jsch.addIdentity(privateKey);
//连接服务器,采用默认端口
session = jsch.getSession("root", ip);
//如果服务器连接不上,则抛出异常
if (session == null) {
throw new Exception("session is null");
}
//设置登陆主机的密码
// session.setPassword(psw);//设置密码
//设置第一次登陆的时候提示,可选值:(ask | yes | no)
session.setConfig("StrictHostKeyChecking", "no");
//设置登陆超时时间
session.connect(30000);
try {
//创建sftp通信通道
channel = (Channel) session.openChannel("sftp");
channel.connect(1000);
ChannelSftp sftp = (ChannelSftp) channel;
//以下代码实现从本地上传一个文件到服务器,如果要实现下载,对换以下流就可以了
putFile(sftp,"c:/desktop.ini","/opt/haha/desktop");
} catch (Exception e) {
e.printStackTrace();
} finally {
session.disconnect();
channel.disconnect();
}
}
public static void putFile(ChannelSftp sftp,String localFile,String remoteFile) throws SftpException,
FileNotFoundException, IOException {
InputStream instream = new FileInputStream(localFile);
OutputStream outstream = sftp.put(remoteFile);
byte b[] = new byte[1024];
int n;
while ((n = instream.read(b)) != -1) {
outstream.write(b, 0, n);
}
outstream.flush();
outstream.close();
instream.close();
// //进入服务器指定的文件夹
// sftp.cd("domains");
//
// //列出服务器指定的文件列表
// Vector v = sftp.ls("*.txt");
// for(int i=0;i<v.size();i++){
// System.out.println(v.get(i));
// }
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
Linux服务器批处理远程命令执行工具
共34个文件
java:24个
xml:3个
properties:2个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 63 浏览量
2023-07-08
09:10:24
上传
评论
收藏 36KB ZIP 举报
温馨提示
Linux服务器批处理远程命令执行工具。纯java实现的ssh协议(jsch),支持同时连接多台linux主机,执行相同的命令。只需配置目标主机的ip地址、用户名和密码即可实现远程操作。服务器无需配置ssh对等协议或安装任何agent插件。并发远程主机主机连接,顺序返回执行结果。并发命令执行,可配置顺序或随机(阻塞)返回执行结果
资源推荐
资源详情
资源评论
收起资源包目录
ssh-batch-master.zip (34个子文件)
ssh-batch-master
mvn_update.bat 124B
pom.xml 6KB
src
test
resources
logback-test.xml 500B
hosts-test.properties 936B
java
test
ssh
HostsTest.java 625B
CmdSingleTest.java 868B
GetTest.java 1KB
PutTest.java 979B
guava
GuavaConcurrentTest.java 1KB
TestListenableFuture2.java 4KB
GuavaConcurrentSequenceModelTest.java 2KB
core
SshUtilTest.java 826B
CommandTest.java 6KB
base
KeterSSHBaseTest.java 2KB
main
resources
ssh-batch 459B
logback.xml 688B
hosts.properties 686B
java
keter
ssh
exec
HostsExecutor.java 2KB
CmdExecutor.java 6KB
SshBatchMain.java 2KB
core
SshUtil.java 4KB
FileProgressMonitor.java 4KB
hosts
Fetcher.java 175B
SimpleFetcher.java 531B
Assembler.java 1KB
cli
Parser.java 3KB
CommandOptions.java 899B
model
Host.java 930B
framework
AbstractBaseSSHConfig.java 2KB
util
IOUtil.java 2KB
PathUtil.java 916B
LICENSE 8KB
todo 93B
.gitignore 52B
共 34 条
- 1
资源评论
Java程序员-张凯
- 粉丝: 1w+
- 资源: 6656
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功