- 浏览: 816944 次
- 性别:
- 来自: 西安
-
文章分类
- 全部博客 (307)
- struts (8)
- hibernate (3)
- spring (32)
- opensourceproject (12)
- javaScript (9)
- primeton EOS (2)
- journey of heart (10)
- Design pattern (6)
- ejb (17)
- point (37)
- Linux&Unix (22)
- ibatis (10)
- AJAX (6)
- DB (26)
- Protocol (6)
- chart (4)
- web server (11)
- webservice (7)
- integration (3)
- tuxedo (5)
- ext (4)
- android (1)
- c/c++ (12)
- JVM (1)
- paginationFrame (2)
- code (2)
- report (1)
- High-performance web (1)
- svn (1)
- JQuery (1)
- workDaily (2)
- cloud (16)
- Python (8)
- English (2)
- shell (5)
- googleCode (1)
- nio (1)
- hyper-v (1)
- debug (3)
- vbs (2)
- openstack (3)
- K8S (1)
- Mesos (0)
- Spark (0)
- Marathon (0)
最新评论
-
钱图大展:
chao2751021 写道lib包哪里去下载,找不到
大型网站用户行为记录的一个实现--基于clickStream(第一部分) -
钱图大展:
无法下载
大型网站用户行为记录的一个实现--基于clickStream(第一部分) -
fm395728572:
shell脚本中用到了环境变量,但是获取不到,例如脚本中有一句 ...
ganymed-ssh2 for Java -
liuhanjiang:
我qq147229234
大型网站用户行为记录的一个实现--基于clickStream(第一部分) -
liuhanjiang:
博主 我利用您提供的方法实现博文中介绍的clickstream ...
大型网站用户行为记录的一个实现--基于clickStream(第一部分)
ganymed-ssh2简介:
Ganymed SSH-2 for Java是用纯Java实现SSH-2协议的一个包。可以利用它直接在Java程序中连接SSH服务器。Ganymed SSH-2支持SSH对话(远程命令执行和shell访问),本地和远程端口转发,本地数据流转发,X11转发和SCP。这些都没有依赖任何JCE provider,而且所有这些都包含加密的功能。
下载地址:
http://www.ganymed.ethz.ch/ssh2/
使用方法:
将 ganymed-ssh2-build210.jar 加入到项目的lib中
下面我们重点介绍一下ganymed-ssh2 的使用,非常简单:
打印结果:
Here is some information about the remote host:
root pts/1 133.64.37.208 Sun May 3 13:16 - 13:19 (00:03)
wtmp begins Sun May 3 13:16:08 2009
ExitCode: 0
总结使用步骤:
1. 首先构造一个连接器,传入一个需要登陆的ip地址
Connection conn = new Connection(hostname);
2. 模拟登陆目的服务器 传入用户名和密码 ,
boolean isAuthenticated = conn.authenticateWithPassword(username, password);它会返回一个布尔值,true 代表成功登陆目的服务器,否则登陆失败
3. 打开一个session,有点象Hibernate的session ,执行你需要的linux 脚本命令 。
Session sess = conn.openSession();
sess.execCommand("last");
4. 接收目标服务器上的控制台返回结果,读取br中的内容
InputStream stdout = new StreamGobbler(sess.getStdout());
BufferedReader br = new BufferedReader(new InputStreamReader(stdout));
5.得到脚本运行成功与否的标志 :0-成功 非0-失败
System.out.println("ExitCode: " + sess.getExitStatus());
6.关闭session和connection
sess.close();
conn.close();
注意的地方:如果你需要执行多个linux控制台脚本,比如第一个脚本的返回结果是第二个脚本的入参,你必须打开多个Session,也就是多次调用
Session sess = conn.openSession();,使用完毕记得关闭就可以了
package cn.com.xinli.ssh.test; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import ch.ethz.ssh2.Connection; import ch.ethz.ssh2.Session; import ch.ethz.ssh2.StreamGobbler; public class Basic { public static void main(String[] args) { String hostname = "172.100.1.64"; String username = "******"; String password = "******"; try { /* Create a connection instance */ Connection conn = new Connection(hostname); /* Now connect */ conn.connect(); /* Authenticate. * If you get an IOException saying something like * "Authentication method password not supported by the server at this stage." * then please check the FAQ. */ boolean isAuthenticated = conn.authenticateWithPassword(username, password); if (isAuthenticated == false) throw new IOException("Authentication failed."); /* Create a session */ Session sess = conn.openSession(); sess.execCommand("last"); System.out.println("Here is some information about the remote host:"); /* * This basic example does not handle stderr, which is sometimes dangerous * (please read the FAQ). */ InputStream stdout = new StreamGobbler(sess.getStdout()); BufferedReader br = new BufferedReader(new InputStreamReader(stdout)); while (true) { String line = br.readLine(); if (line == null) break; System.out.println(line); } /* Show exit status, if available (otherwise "null") */ /** * 0 成功 * 1 失败 */ System.out.println("ExitCode: " + sess.getExitStatus()); /* Close this session */ sess.close(); /* Close the connection */ conn.close(); } catch (IOException e) { e.printStackTrace(System.err); System.exit(2); } } }
评论
于是将代码放到项目中,部署到linux环境下,出现问题debug了一下,发现每次运行到
String line = br.readLine()时去读取Linux控制台返回的值时,就卡住了。
好像是进入了类似于waitFor()的状态。
求解
我的java程序部署在linux环境下面,用它来链接windows机,windows机下的telnet服务和23端口都已经开通,但是却链接不上,但是在linux下用telnet命令,却能够链接上,请问这个是什么原因????
你写的java程序不支持连接windows吧 比如无法匹配返回的prompt(windows下面的prompt是>)
我的java程序部署在linux环境下面,用它来链接windows机,windows机下的telnet服务和23端口都已经开通,但是却链接不上,但是在linux下用telnet命令,却能够链接上,请问这个是什么原因????
像:[root@AY140321084527950cefZ usr]#
这个方式返回的好像只有#号后面的内容 前面的内容没有 如何获得呢?

比如用root登录,
想达到
第一个命令"pwd"输出"/root"
第二个命令"cd test"
第三个命令"pwd"输出"/root/test"
如果想做成这样,这三个命令共享conn和session都达不到啊,
有什么办法吗?谢谢哈
sess.execCommand("pwd");
sess.close();
sess.execCommand("cd test");
sess.close();
sess.execCmmand("pwd");
sess.close();
或者sess.execCmmand"pwd && cd rpt && pwd");
比如用root登录,
想达到
第一个命令"pwd"输出"/root"
第二个命令"cd test"
第三个命令"pwd"输出"/root/test"
如果想做成这样,这三个命令共享conn和session都达不到啊,
有什么办法吗?谢谢哈
恩 求教
如我先执行:ssh root@61.142.114.210
然后接着提示输入密码
这种要怎么实现?
可以在你执行的脚本中设置需要用到的变量 如:写全路径。这个问题和父子SHELL有关。看看这方面的可以解决你的问题。。
new Connection("localhost", 22);中不是有指定端口号的么。
比如用root登录,
想达到
第一个命令"pwd"输出"/root"
第二个命令"cd test"
第三个命令"pwd"输出"/root/test"
如果想做成这样,这三个命令共享conn和session都达不到啊,
有什么办法吗?谢谢哈
应该怎么配置呢?
发表评论
-
eclipse link 方式管理插件
2012-02-24 15:55 1571以配置tomcat插件为例: (条件:F:\eclip ... -
使用mapinfo 开发GIS 应用
2011-03-18 06:56 13101. mapJ 对象是在tomcat启动的时候 从web ... -
java mail adapter
2011-01-21 12:23 15422011.04.27: 使用jmail 发送中文标题的 ... -
4种调用https服务的方式
2011-01-05 23:45 8803以前在网厅的时候,请求计费的账单开 ... -
正则表达式30分钟入门教程
2010-11-17 12:58 1482正则表达式30分钟入门教程 -
java 异常层次
2010-05-26 16:14 1344Java 中的异常类,包括内置的异常类以及自定义的异常类,都直 ... -
java 解惑你知多少 (转载)
2010-04-26 12:43 1220(1) http://jiangzhengjun.it ... -
jvm调优
2010-04-16 15:35 1294(1) http://pengjiaheng.itey ... -
谈谈重构
2010-04-15 13:34 1329代码重构阅读心得[转] http://www.cnblogs ... -
session会话跟踪的一个小例子
2010-03-14 18:16 1876内容包括: 必备知识: ... -
cookie机制和session机制的区别
2010-03-14 17:06 1208一、cookie机制和sessio ... -
Cookie详解
2010-03-14 16:02 1409Cookie在英文中是小甜品 ... -
什么是Cookie?
2010-03-14 15:06 1457按照Netscape官方文档中 ... -
任务、进程和线程的区别(转)
2010-02-04 17:16 2291任务(task)是最抽象 ... -
加密,解密,认证,数字签名,公钥私钥
2010-01-13 20:42 2341Bob,Alice和数字证书 网络安全中最知名的 ... -
JNI
2009-12-26 14:09 1599JNI是Java Native Inter ... -
JSON在处理hibernate中的cascade对象时的解决方案
2009-12-24 22:12 1531如果数据间存在级联关系,在hibernate中极容易嵌套而 ... -
digester框架 将 XML->JavaBean
2009-11-08 17:38 1760digester组件简化了xml文 ... -
什么是P问题、NP问题和NPC问题
2009-10-25 20:20 2063什么是P问题、NP问题和NPC问题 出自mat ... -
用Fat Jar Eclipse Plug-In打包可执行jar文件
2009-09-30 08:29 3974Fat Jar Eclipse Plug-In [FJEP] ...
相关推荐
Ganymed SSH-2 for Java是用纯Java实现SSH-2协议的一个包。可以利用它直接在Java程序中连接SSH服务器。官网地址为 http://www.ganymed.ethz.ch/ssh2/ 可以看到最后的更新日志为2006年,是比较古老的一个工具了。
Ganymed SSH-2 for Java是用纯Java实现SSH-2协议的一个包。可以利用它直接在Java程序中连接SSH服务器。Ganymed SSH-2支持SSH对话(远程命令执行和shell访问),本地和远程端口转发,本地数据流转发,X11转发和SCP。这些...
Ganymed SSH-2 for Java是用纯Java实现SSH-2协议的一个包。可以利用它直接在Java程序中连接SSH服务器,执行linux命令
**Ganymed SSH-2 for Java** 是一个开源库,专为Java开发者设计,用于实现Secure Shell(SSH-2)协议。SSH-2是一种安全的网络协议,用于在网络之间提供加密通信,常用于远程登录、文件传输以及执行远程命令等。...
这需要用于 Java 的开源 Ganymed SSH-2,它可以免费获得并自动包含在 zip 文件中。 对于 SFTP-GET,必须使用包含的与 Matlab 兼容的自定义 Ganymed SSH-2 Java 库。 有关文档,请参阅 ssh2-examples.m。 如需支持...
在这个项目中,开发者使用了Ganymed SSH2库,这是一个开源的Java实现,支持SSH2协议的全部功能,包括文件传输、命令执行和端口转发等。文件“ganymed-ssh2-build210.jar”就是这个库的特定版本,用于构建SSH连接并...
* Ganymed SSH-2:用于连接远程Linux服务器 * Commons IO:用于处理输入输出流 ```xml <groupId>ch.ethz.ganymed <artifactId>ganymed-ssh2 <version>262 <groupId>commons-io <artifactId>commons-io ...