今天在做一个连接linux SSH服务器的一个客户端,要求可以执行自定义的linux命令,发现已经有一个工具可以帮组建立连接JSCH
在运动Shell命令的时候可以在控制台上输入linux命令去执行,但是这个东西要放到web上运用,需要将输入输出转到其他流,所以考虑用管道流来控制,但是具体怎么让传进去的命令执行还是不大清楚,下面是代码:
package com.sun.work;
import java.io.IOException;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
import java.util.Properties;
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
public class PipeStreamTest {
public static void main(String args[]){
try {
new PipeStreamTest().connect();
} catch (JSchException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void connect() throws JSchException {
JSch jsch = new JSch();
Session session = jsch.getSession("test", "10.67.7.109", 22);
session.setPassword("SVNAdmin");
Properties prop = new Properties();
prop.setProperty("StrictHostKeyChecking", "no");// StrictHostKeyChecking:
// ask | yes | no
session.setConfig(prop);
session.connect();
Channel channel = session.openChannel("shell");
Sender t1 = new Sender();
Receiver t2 = new Receiver();
PipedInputStream pis1 = t2.getInputStream();
PipedOutputStream pos1 = t1.getOutputStream();
//如果是用控制台,可以这样设置。
// channel.setOutputStream(System.out);
// channel.setInputStream(System.in);
channel.setInputStream(pis1);
channel.setOutputStream(pos1);
try {
pos1.connect(pis1);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
t1.start();
t2.start();
channel.connect();
}
class Sender extends Thread {
private PipedOutputStream out = new PipedOutputStream();
public PipedOutputStream getOutputStream() {
return out;
}
public void run() {
String s = "ls -F";
try {
out.write(s.getBytes());
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
class Receiver extends Thread {
private PipedInputStream in = new PipedInputStream();
public PipedInputStream getInputStream() {
return in;
}
public void run() {
byte[] buf = new byte[10240];
try {
while(in.read()!=-1){
int len = in.read(buf);
System.out.println(len);
String s = new String(buf, 0, len);
System.out.println(s);
//in.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
最后感觉命令似乎并没有传到服务器端。。。。
分享到:
- 2009-03-03 17:02
- 浏览 2655
- 评论(1)
- 论坛回复 / 浏览 (0 / 4590)
- 查看更多
相关推荐
JSch是Java Secure Channel的缩写。JSch是一个SSH2的纯Java实现。它允许你连接到一个SSH服务器,并且可以使用端口转发,X11转发,文件传输等,当然你也可以集成它的功能到你自己的应用程序。
eclipse-jsch-agent-proxy 在 Eclipse 上使用 ssh-agent 和 Pageant 的插件... 使用这些插件运行 Eclipse, 运行 > 运行方式 > Eclipse 应用程序选择您要使用的 ssh 代理, 窗口 > 首选项 > 常规 > 网络连接 > SSH2
Android 应用程序通过 ssh(使用 Jsch)控制您的 linux 桌面。 ## 依赖 # wmctrl, openssh-server ## 配置文件 ## 去做 config.xml 中的应用程序列表: 定义要下载的图标列表的函数,以及它们在服务器上...
nus-soc-print 这是一个Android应用程序,可通过SSH将办公文档和PDF文件打印到NUS School of Computing的Unix打印机。 iOS版本存在于。 该应用程序已在。...Jsch SSH库 Flurry Analytics(仅适用于Andr
应用一: 实现从普通用户“test”切换到root用户,自动输入root的密码,不用在终端提示符下执行密码输入操作。 步骤: (1)vi autosu.sh (2)#! /usr/bin/expect -f //指定expect工具的路径,如果不清楚具体路径,...
带有丑陋代码的 Android 应用程序,可通过 ssh 会话控制我的灯光和其他东西ssh 会话需要两个库:JSCH 和 JZLIB
sshdrill将请求的转发转换为途中每个跃点的一系列转发,扫描正在运行的嵌套ssh会话数量,并相应地应用转发。 ##示例会话 me@workstation:~$ alias ssh=sshdrill me@workstation:~$ ssh jumphost1 user@jumphost1:~...
Kismet_Wardriving_Suite ... 该应用程序将连接回它启动的SSH服务器,并通过Jsch Java库发出命令。 默认密码设置为“ changeme”,因此请勿在Linux Deploy中更改它。 第二次提交:该应用程序已更新
7只蜜蜂 目的 7Bee是一个脚本程序,主要目的是执行项目构建脚本。... Windows脚本可能需要调整JDK路径,还需要下载并将其放置在3rdparty \ jsch \ lib \中。 运行引导程序后,将在lib目录中创建bee.jar。 但是
JSSHTunnel是一个轻量级的GUI应用程序,可通过SSH连接转发本地和远程端口。 它是用Java编写的,并使用Eclipse SWT和JSch。 您只需要一个JVM即可运行它。 0.0.0针对Windows,位于系统托盘中。