- 浏览: 214871 次
- 性别:
- 来自: 北京
最新评论
-
xupo:
tzg157 写道qinkangwencai 写道别误导大家了 ...
Java多线程编程环境中单例模式的实现 -
xupo:
qinkangwencai 写道别误导大家了行吗?double ...
Java多线程编程环境中单例模式的实现 -
qaddafi2008:
内部静态类的方法貌似是目前最好的解法了!
Java多线程编程环境中单例模式的实现 -
sanshizi:
学习了
Java多线程编程环境中单例模式的实现 -
tzg157:
qinkangwencai 写道别误导大家了行吗?double ...
Java多线程编程环境中单例模式的实现
使用InputStream和OutputStream来获得命令行运行结果和输入内容是首先需要具备的.
然后要解决SSH连接问题.
在OpenSource项目里找到了Ganymed SSH-2 for Java .下载后有例子,但是没有找到有关交互命令的例子.所以自己探索了一下
在网上看有老外讨论用这个如何改密码,基本上的问题都是因为找不到返回的提示
Linux修改密码输入passwd后,首先是输入当前密码,然后是输入两个新密码
如果当前密码输入错误,或者新密码输入不符合系统密码规则要求,会要求重新输入.如果碰到这种情况,程序很容易进入一个不太好控制的循环.
可能一般人都认为输入命令后所有的返回都应该是用session.getStdout();而不是session.getStderr();从方法名称上看确实如此,一个是取得标准输出,一个是取得错误信息.
其实在输入passwd后.
Changing password for user [username].
Changing password for [username]
Changing password for [username]
这两行是需要通过session.getStdout();来获得的.但是后面的
(current) UNIX password:
New UNIX password:
Retype new UNIX password:
这三行是需要使用sessssion.getStderr();来获取的
如果用户输入没有通过系统检测,会返回具体原因,但是都是BAD PASSWORD开始的.
如果最后修改成功了.你也会看到有successfully来表示.这些信息是通过session.getStdout();来获取的.
现在问题很好解决了吧.
写了一个类来完成修改密码的操作
import ch.ethz.ssh2.Connection; import ch.ethz.ssh2.Session; import ch.ethz.ssh2.StreamGobbler; import com.io.Debug; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; /** * * @author leon.lee */ public class ChangeEmailPassword { private String username = ""; private String oldpassword = ""; private Connection conn = null; private boolean hasError = false; private String ErrorMessage = ""; private boolean isSuccessfully = false; private String SystemMessage = ""; public static final String HOST = "127.0.0.1"; //server ip public boolean isSuccessfully(){ return isSuccessfully; } public boolean isHasError(){ return hasError; } public String getErrorMessage(){ return ErrorMessage; } public void setErrorMessage(String msg){ hasError = true; this.ErrorMessage = msg; } /** * Creates a new instance of <code>ChangeEmailPassword</code>. * @param username * @param oldpassword */ public ChangeEmailPassword(String username,String oldpassword) { this.username = username; this.oldpassword = oldpassword; try{ conn = new Connection(HOST); conn.connect(); /* Authenticate */ boolean isAuthenticated = conn.authenticateWithPassword(username, oldpassword); if (isAuthenticated == false) { setErrorMessage("Authentication failed."); conn=null; } }catch(Exception e){ conn.close(); conn = null; System.out.println(e); } } public void setNewPassword(String newpassword) { if(hasError){ return; } if (conn==null){ return; } try{ Session sess = conn.openSession(); sess.execCommand("passwd"); InputStream so = sess.getStdout(); InputStream err = sess.getStderr(); OutputStream out = sess.getStdin(); byte[] buffer = new byte[500];//其实没有必要这么大.130就差不多了.怕万一有什么提示. int length = 0; length = err.read(buffer); // if (length > 0) { // System.out.println("#1:"+ new String(buffer, 0, length)); // //(current) UNIX password: // } String coldpassword = oldpassword+"\n"; out.write(coldpassword.getBytes()); length = err.read(buffer); // if (length > 0) { // System.out.println("#2:"+ new String(buffer, 0, length)); // //(current) UNIX password: // } String cnewpass = newpassword +"\n"; out.write(cnewpass.getBytes()); length = err.read(buffer); if (length > 0) { String rs = new String(buffer, 0, length); //System.out.println("#3:"+rs); if(rs.indexOf("BAD")>-1){ sess.close(); conn.close(); setErrorMessage(rs); return; } } out.write(cnewpass.getBytes()); length = so.read(buffer); if (length > 0) { String rs = new String(buffer, 0, length); if(rs.indexOf("successfully")>-1){ this.isSuccessfully = true; this.SystemMessage = rs; } } /* Close this session */ sess.close(); /* Close the connection */ conn.close(); } catch (IOException e) { e.printStackTrace(System.err); } } /** * @param args the command line arguments */ public static void main(String[] args) { ChangeEmailPassword cep = new ChangeEmailPassword("username", "oldpassword"); if(cep.isHasError()){ System.out.println(cep.getErrorMessage()); cep = null; return; } cep.setNewPassword("newpassword"); if(cep.isHasError()){ System.out.println(cep.getErrorMessage()); cep = null; return; } if(cep.isSuccessfully){ System.out.println(cep.getSystemMessage()); } } /** * @return the SystemMessage */ public String getSystemMessage() { return SystemMessage; } }
把里面注解掉的System.out.println打开可以看到系统提示的信息.我只保留了最关键的信息提示
发表评论
-
RHEL5 利用 CentOS的yum 安装openssl gc++及Nginx
2011-04-12 16:17 122261.确保RHEL5中已经安装了yum[root@xupo~]# ... -
用URL重写来实现会话管理
2011-04-11 11:02 1325通常,会话管理是通过服务器将 Session ID 作为一个 ... -
花生壳配置
2011-03-18 17:22 1030[edgen@rhel54 ~]$ su - root口令:[ ... -
服务器相关配置备忘
2011-03-11 10:28 1289JDK安装配置 1、下载jd ... -
Hibernate C3P0 Maven 配置
2011-02-10 14:55 2999pom.xml中增加: <depe ... -
用blazeDS实现推技术
2010-11-11 10:37 1118http://blog.csdn.net/yangyawen/ ... -
用 Quartz 进行作业调度
2010-09-06 14:46 940http://www.ibm.com/developerwor ... -
工作流
2010-09-06 14:26 1050jbpm4 :http://sourceforge.net/p ... -
《构建高性能web站点》读书笔记
2010-08-13 20:20 1054《构建高性能web站点》读书笔记 http://book.g ... -
Comet:基于 HTTP 长连接的“服务器推”技术
2010-08-13 20:15 886http://czh19860925.iteye.com/bl ... -
(转)关于大型软件重构的一些想法
2010-04-01 20:51 1140做当前这个项目也快 ... -
关于设计模式中各种工厂的理解
2010-04-01 20:46 1058对于Java的工厂模式,简单工厂、工厂方法、抽象工厂之间的区别 ... -
(转)探讨代理模式与Java反射机制的应用
2010-04-01 20:21 1336代理模式,相信大多数人都非常熟悉,常见的实现方式是通过公共接口 ... -
OpenNMS架构介绍
2010-03-30 10:06 12595一、OpenNMS简介 OpenNMS的开发基于TMN及FC ... -
OpenNMS配置指南
2010-03-30 09:54 3216OpenNMS的配置是一个繁琐的过程,由于网上没有系统介绍如何 ... -
java调用javascript :js引擎rhino
2009-10-30 16:04 9273前段时间,在浏览javaeye论坛,看见有人征集如何在java ... -
扩展 Eclipse 辅助和规范开发流程
2009-10-26 15:12 1482本如果市场上的开发工具不能满足您的需要,而自己开发 IDE 又 ... -
How to access eclipse workspace?
2009-10-26 14:36 1350摘要: 在开发eclipse pluin的时候,某些情况下 ... -
作业调度器的JAVA实现(第一篇)--Job Scheduling in Java
2009-09-07 23:41 2873On some projects, you find you ... -
对象缓存管理器JAVA实现(第一篇)---一个简单的对象缓存器实现方式
2009-09-07 23:31 2267As I wrote in a previous post, ...
相关推荐
标题“Java Linux SSH登录”指的是使用Java编程语言与Linux操作系统进行安全外壳(SSH)通信的过程。在描述中提到,这个过程通常涉及建立一个通道并执行单个命令。这里,我们将会详细探讨Java如何通过SSH连接到Linux...
在IT行业中,Linux、Java、Web、SSH以及远程工具是至关重要的组成部分,它们构成了...在实际工作中,通过SSH工具进行远程操作,配合Linux系统的强大功能和Java的跨平台特性,能够实现高效且安全的远程开发和运维工作。
Java 实现模拟 SSH 和 Telnet 登陆,以及发送...总的来说,通过 Java 实现 SSH 和 Telnet 功能涉及网络编程、加密通信和命令行接口的交互。理解这些概念并熟练运用相关库,可以为你的 IT 项目提供强大的远程管理能力。
基于Java的Linux远程登录系统研究与实现涉及了Java编程语言、Linux操作系统、远程登录技术以及跨平台应用开发等方面的知识。 首先,Java语言具备了良好的跨平台性,这使得基于Java开发的应用可以运行在不同操作系统...
Linux服务器是一种基于Linux操作系统并提供网络服务的计算机系统,而Java作为一种跨平台的编程语言,能够通过SSH(Secure Shell)协议与Linux服务器进行通信。SSH是一种安全的网络协议,用于在网络中传输命令和数据...
在这种情况下,使用SSH(Secure Shell)协议是常见的解决方案,因为它提供了安全的网络通信。SSHXCUTE.jar是一个Java库,它允许程序员通过SSH连接到Linux系统并执行shell命令,而无需深入了解SSH的底层细节。 ...
总的来说,实现Linux与Windows之间的文件上传下载以及网页版的文件管理界面,需要结合Java的文件操作、网络通信、SSH连接和HTML前端技术。通过合理的设计和实现,可以构建出高效、安全的跨平台文件传输系统。
标题中的“通过SSH协议连接到服务器执行指令”指的是使用Secure Shell (SSH) 协议来远程控制和管理服务器。SSH是一种网络协议,用于安全地在两台计算机之间进行通信,特别是用于管理员对服务器进行远程操作。它允许...
Java操作Linux环境主要涉及到的是Java对远程系统的交互能力,尤其是通过SSH(Secure Shell)协议进行安全的网络通信。JSCH(Java Simple SSH)是Java中一个常用的库,它提供了SSH2协议的实现,使得Java程序可以执行...
Linux远程连接工具类SSH是一种广泛使用的通信协议,它允许用户在本地计算机上安全地操作远程Linux系统。SSH,全称为Secure Shell,旨在提供加密的网络服务,特别适用于管理服务器、执行命令、传输文件等场景。在开发...
总的来说,JediTerm 是一个强大且实用的工具,它通过提供 SSH 连接和 PTY 支持,使得 Java 开发者可以在熟悉的开发环境中便捷地进行终端操作,无论是在本地还是远程系统。对于需要在 IDE 内部管理和调试服务器的...
总结来说,"基于Java的Linux远程登录系统研究与实现"项目涉及到了Java编程、SSH协议、用户认证、网络通信安全等多个重要知识点。通过学习和实践这一系统,开发者不仅能深入理解Java的网络编程,还能掌握构建安全远程...
Java实现SSHD协议是将SSH(Secure Shell)协议集成到Java应用程序中,以便与Linux或Unix系统进行安全的远程通信。SSH是一种网络协议,用于在不安全的网络上提供加密的网络服务,常用于远程登录、文件传输以及执行...
在Java应用程序中,命令执行是通过SSH协议实现的。SSH协议提供了一个安全的通道,用于在客户端和服务器之间传输数据。在Java应用程序中,我们可以使用Ganymed SSH-2库来实现命令执行。 命令执行的原理可以分为以下...
在Java环境中,通过使用SSH2相关的jar包,开发者可以实现与Linux服务器的远程交互,执行命令、传输文件等操作。 SSH2 jar包通常包含了如JCraft公司的JSch库,这是一个Java实现的SSH2库,它提供了对SSH2协议的支持,...
标题中的“ganymed-ssh2-build210.jar”是一个特定版本的Java库,用于实现SSH(Secure Shell)协议,使Java程序能够与Linux服务器进行安全通信。SSH是一种网络协议,广泛用于在不安全的网络环境中提供加密的远程登录...
9. **远程访问与版本控制**:Linux支持SSH协议,允许安全的远程访问和文件传输。同时,版本控制系统如Git在Linux环境中被广泛使用,对于协同开发Java项目至关重要。 10. **容器技术**:Docker等容器技术在Linux上...
1. **平台独立性**:由于 J2SSH 是用 Java 编写的,因此它可以跨平台运行,支持各种操作系统,如 Windows、Linux 和 macOS。 2. **安全特性**:SSH 提供了加密的网络通信,确保数据在传输过程中的安全性,防止中间...
对于"linux ssh"这个标签,表明了ganymed-ssh2库可以用于与Linux系统进行SSH通信。在Linux环境中,SSH常用于远程管理服务器、自动化运维任务,以及在不安全网络中安全地传输文件。 总的来说,这个压缩包提供了一...
在Java开发中,SSH(Secure Shell)是一种广泛用于网络服务的安全协议,主要用于远程登录、文件传输等,确保数据传输过程中的安全性。SSH权限分配是指在使用SSH进行远程操作时,如何管理和控制用户对服务器资源的...