热门标签 | 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; 
    } 
}


推荐阅读
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 学习Java异常处理之throws之抛出并捕获异常(9)
    任务描述本关任务:在main方法之外创建任意一个方法接收给定的两个字符串,把第二个字符串的长度减1生成一个整数值,输出第一个字符串长度是 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • 本文介绍了Java中Hashtable的clear()方法,该方法用于清除和移除指定Hashtable中的所有键。通过示例程序演示了clear()方法的使用。 ... [详细]
  • 本文介绍了在sqoop1.4.*版本中,如何实现自定义分隔符的方法及步骤。通过修改sqoop生成的java文件,并重新编译,可以满足实际开发中对分隔符的需求。具体步骤包括修改java文件中的一行代码,重新编译所需的hadoop包等。详细步骤和编译方法在本文中都有详细说明。 ... [详细]
  • 本文介绍了解决java开源项目apache commons email简单使用报错的方法,包括使用正确的JAR包和正确的代码配置,以及相关参数的设置。详细介绍了如何使用apache commons email发送邮件。 ... [详细]
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 开发笔记:spring boot项目打成war包部署到服务器的步骤与注意事项
    本文介绍了将spring boot项目打成war包并部署到服务器的步骤与注意事项。通过本文的学习,读者可以了解到如何将spring boot项目打包成war包,并成功地部署到服务器上。 ... [详细]
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社区 版权所有