热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

java通过SSH远程修改linux用户密码详解程序员

使用的第三方包下载:ganymed-ssh2-build210.jar代码如下:packagecom.util;importjava.io.IOException;importja

使用的第三方包下载:ganymed-ssh2-build210.jar

代码如下:

package com.util; 
 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 
 
import ch.ethz.ssh2.Connection; 
import ch.ethz.ssh2.Session; 
 
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 = "192.168.25.111"; //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; 
    } 
    
    public ChangeEmailPassword(String username,String oldpassword) { 
        this.username = username; 
        this.oldpassword = oldpassword; 
         try{ 
             cOnn= new Connection(HOST,22); 
             conn.connect(); 
            
            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 = newpassword+"/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 || rs.indexOf("Sorry")>-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; 
                } 
            } 
            
            sess.close(); 
            
            conn.close(); 
        } catch (IOException e) { 
            e.printStackTrace(System.err); 
        } 
    } 
    
    public static void main(String[] args) { 
        ChangeEmailPassword cep = new ChangeEmailPassword("root", "password"); 
        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()); 
        } 
    } 
    
    public String getSystemMessage() { 
        return SystemMessage; 
    } 
}


推荐阅读
  • oracle c3p0 dword 60,web_day10 dbcp c3p0 dbutils
    createdatabasemydbcharactersetutf8;alertdatabasemydbcharactersetutf8;1.自定义连接池为了不去经常创建连接和释放 ... [详细]
  • 本文介绍了如何利用HTTP隧道技术在受限网络环境中绕过IDS和防火墙等安全设备,实现RDP端口的暴力破解攻击。文章详细描述了部署过程、攻击实施及流量分析,旨在提升网络安全意识。 ... [详细]
  • 使用Maven JAR插件将单个或多个文件及其依赖项合并为一个可引用的JAR包
    本文介绍了如何利用Maven中的maven-assembly-plugin插件将单个或多个Java文件及其依赖项打包成一个可引用的JAR文件。首先,需要创建一个新的Maven项目,并将待打包的Java文件复制到该项目中。通过配置maven-assembly-plugin,可以实现将所有文件及其依赖项合并为一个独立的JAR包,方便在其他项目中引用和使用。此外,该方法还支持自定义装配描述符,以满足不同场景下的需求。 ... [详细]
  • 在探讨Hibernate框架的高级特性时,缓存机制和懒加载策略是提升数据操作效率的关键要素。缓存策略能够显著减少数据库访问次数,从而提高应用性能,特别是在处理频繁访问的数据时。Hibernate提供了多层次的缓存支持,包括一级缓存和二级缓存,以满足不同场景下的需求。懒加载策略则通过按需加载关联对象,进一步优化了资源利用和响应时间。本文将深入分析这些机制的实现原理及其最佳实践。 ... [详细]
  • Android中将独立SO库封装进JAR包并实现SO库的加载与调用
    在Android开发中,将独立的SO库封装进JAR包并实现其加载与调用是一个常见的需求。本文详细介绍了如何将SO库嵌入到JAR包中,并确保在外部应用调用该JAR包时能够正确加载和使用这些SO库。通过这种方式,开发者可以更方便地管理和分发包含原生代码的库文件,提高开发效率和代码复用性。文章还探讨了常见的问题及其解决方案,帮助开发者避免在实际应用中遇到的坑。 ... [详细]
  • 本文介绍了如何使用Java和PDFBox库根据坐标值对PDF文件进行局部切割的方法。 ... [详细]
  • 本文探讨了如何在 Java 中将多参数方法通过 Lambda 表达式传递给一个接受 List 的 Function。具体分析了 `OrderUtil` 类中的 `runInBatches` 方法及其使用场景。 ... [详细]
  • 在分析Android的Audio系统时,我们对mpAudioPolicy->get_input进行了详细探讨,发现其背后涉及的机制相当复杂。本文将详细介绍这一过程及其背后的实现细节。 ... [详细]
  • 字节流(InputStream和OutputStream),字节流读写文件,字节流的缓冲区,字节缓冲流
    字节流抽象类InputStream和OutputStream是字节流的顶级父类所有的字节输入流都继承自InputStream,所有的输出流都继承子OutputStreamInput ... [详细]
  • 基于Linux开源VOIP系统LinPhone[四]
    ****************************************************************************************** ... [详细]
  • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
    本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
  • 属性类 `Properties` 是 `Hashtable` 类的子类,用于存储键值对形式的数据。该类在 Java 中广泛应用于配置文件的读取与写入,支持字符串类型的键和值。通过 `Properties` 类,开发者可以方便地进行配置信息的管理,确保应用程序的灵活性和可维护性。此外,`Properties` 类还提供了加载和保存属性文件的方法,使其在实际开发中具有较高的实用价值。 ... [详细]
  • DVWA学习笔记系列:深入理解CSRF攻击机制
    DVWA学习笔记系列:深入理解CSRF攻击机制 ... [详细]
  • 深入解析Struts、Spring与Hibernate三大框架的面试要点与技巧 ... [详细]
  • 在iOS开发中,基于HTTPS协议的安全网络请求实现至关重要。HTTPS(全称:HyperText Transfer Protocol over Secure Socket Layer)是一种旨在提供安全通信的HTTP扩展,通过SSL/TLS加密技术确保数据传输的安全性和隐私性。本文将详细介绍如何在iOS应用中实现安全的HTTPS网络请求,包括证书验证、SSL握手过程以及常见安全问题的解决方法。 ... [详细]
author-avatar
看具戴_370
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有