[ 通过使用远程SHELL执行框架 sshxcute 实现远程登录Linux并执行命令。 sshxcute 项目地址: http://code.google.com/p/sshxcute/   示例代码: import net.neoremind

[1、passwd 简单说明;我们已经学会如何添加用户了,所以我们还要学习设置或修改用户的密码;passwd命令的用法也很多,我们只选如下的几个参数加以说明;想了解更多,请参 使用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] 这两行是需要通过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;

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;

}

public ChangeEmailPassword(String username,String oldpassword) {

this.username = username;

this.oldpassword = oldpassword;

try{

conn = new Connection(HOST);

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 = 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;

}

}

sess.close();

conn.close();

} catch (IOException e) {

e.printStackTrace(System.err);

}

}

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());

}

}

public String getSystemMessage() {

return SystemMessage;

}

}

//把里面注解掉的System.out.println打开可以看到系统提示的信息.我只保留了最关键的信息提示

[本文演示将root密码从“123456”修改为“654321”,不多说,直接上图:        ]

sshxcute_Java 使用SSH连接Linux 使用passwd命令修改密码相关推荐

  1. java使用ssh连接Linux并执行命令

    maven pom.xml配置:<dependency><groupId>com.jcraft</groupId><artifactId>jsch< ...

  2. java实现连接linux,JAVA实现远道SSH连接linux并执行命令

    JAVA实现远程SSH连接linux并执行命令 package com.codeconch.ssh; import java.io.BufferedReader; import java.io.IOE ...

  3. passwd命令修改密码_Linux passwd命令–更改用户密码

    passwd命令修改密码 介绍 (Introduction) Linux passwd command changes a user's password. A user can only chang ...

  4. linux下passwd命令修改用户密码

    passwd 命令后面不接任何参数或用户名,则表示修改当前用户的密码:请看下面的例子: [root@localhost ~]# passwd 注:没有加任何用户,我是用root用户来执行的passwd ...

  5. python通过ssh连接linux,执行命令

    #连接ssh的工具函数 def loginLinux(reqdata,hostname,username,password):try:# 创建ssh对象ssh = paramiko.SSHClient ...

  6. Loadrunner通过ssh连接linux进行hadoop基准测试

    版权声明:本文为博主原创文章,未经博主允许不得转载.欢迎访问我的博客 https://blog.csdn.net/smooth00/article/details/73796622 Loadrunne ...

  7. java 远程shell脚本_java通过ssh连接服务器执行shell命令详解及实例

    java通过ssh连接服务器执行shell命令详解 java通过ssh连接服务器执行shell命令:JSch 是SSH2的一个纯Java实现.它允许你连接到一个sshd 服务器,使用端口转发,X11转 ...

  8. linux ssh抓包,如何在SSH连接Linux系统的环境下使用wireshark抓包?

    TSINGSEE青犀视频云边端架构EasyNVR.EasyDSS.EasyGBS等都是有两种操作系统的版本,一种是linux,一种是windows.而大多数开发者用户都会使用linux版本进行安装. ...

  9. SSH连接Linux CentOS7-Putty篇

    SSH连接Linux CentOS7-Putty篇 这是第一次使用Putty 利用SSH连接Linux.如果你想学习如何使用配置私钥在本地连接Linux服务器, 可以仔细阅读这篇文章,了解一下有关本地 ...

最新文章

  1. AI又被彩虹吹!​网易被预言为“下一个百度”?
  2. CentOS 5.1下安装Opensim
  3. python软件桌面图标_python制作一个桌面便签软件
  4. jpa mysql查找_jpa查找数据库最新一条消息
  5. 程序员修神之路--redis做分布式锁可能不那么简单
  6. WindowsXP命令行修改服务启动选项
  7. linux Centos下磁盘分区及文件系统创建与挂载
  8. 一个搜索迷宫出路的程序
  9. 海鲜之战:上半场活鲜炒作已曲终,下半场冷冻海鲜厚积薄发?
  10. Python Day 2
  11. 我开发共享软件的三次经历(上):打造一款很多人用的软件
  12. 小米3g刷高格固件_小米路由器3g刷第三方固件遇到的一些坑
  13. ghost12备份linux,用GHOST对LINUX系统做备份(转)
  14. 离散数学 --- 特殊图 --- 欧拉图,哈密顿图
  15. 含有共轭复数根的Jordan分解
  16. 《单片机原理及应用(魏洪磊)》第七章第8题
  17. 在运行java程序时出现 Error: could not open c:\program Files\Java\jre6\lib\amd64\jvm.cfg'
  18. WebGL编程指南三:varying变量的使用和理解光栅化过程。
  19. 从入门到精通我是这样学习算法的
  20. linux 查看显卡信息及显卡驱动信息

热门文章

  1. 怎样让表格的行高一样_怎么把excel的行高变成一样的
  2. 金山是微软VBA的正式授权用户
  3. 2019年新税法+抵扣项的个人所得税攻击计算器
  4. 高德地图各种摄像头图标_【高德地图上的摄像头资讯】高德地图上的摄像头足球知识与常识 - 足球百科 - 599比分...
  5. 微信QQ的二维码登录原理js代码解析
  6. SPA 中前端路由基本原理与实现方式
  7. Android11以上版本使用高德定位,定位成功,卫星数一直为0
  8. 【杂谈】我的书籍推荐
  9. PowerQuery操作分类3
  10. 北京医保可报销的定点医院