sshxcute_Java 使用SSH连接Linux 使用passwd命令修改密码
[ 通过使用远程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命令修改密码相关推荐
- java使用ssh连接Linux并执行命令
maven pom.xml配置:<dependency><groupId>com.jcraft</groupId><artifactId>jsch< ...
- java实现连接linux,JAVA实现远道SSH连接linux并执行命令
JAVA实现远程SSH连接linux并执行命令 package com.codeconch.ssh; import java.io.BufferedReader; import java.io.IOE ...
- passwd命令修改密码_Linux passwd命令–更改用户密码
passwd命令修改密码 介绍 (Introduction) Linux passwd command changes a user's password. A user can only chang ...
- linux下passwd命令修改用户密码
passwd 命令后面不接任何参数或用户名,则表示修改当前用户的密码:请看下面的例子: [root@localhost ~]# passwd 注:没有加任何用户,我是用root用户来执行的passwd ...
- python通过ssh连接linux,执行命令
#连接ssh的工具函数 def loginLinux(reqdata,hostname,username,password):try:# 创建ssh对象ssh = paramiko.SSHClient ...
- Loadrunner通过ssh连接linux进行hadoop基准测试
版权声明:本文为博主原创文章,未经博主允许不得转载.欢迎访问我的博客 https://blog.csdn.net/smooth00/article/details/73796622 Loadrunne ...
- java 远程shell脚本_java通过ssh连接服务器执行shell命令详解及实例
java通过ssh连接服务器执行shell命令详解 java通过ssh连接服务器执行shell命令:JSch 是SSH2的一个纯Java实现.它允许你连接到一个sshd 服务器,使用端口转发,X11转 ...
- linux ssh抓包,如何在SSH连接Linux系统的环境下使用wireshark抓包?
TSINGSEE青犀视频云边端架构EasyNVR.EasyDSS.EasyGBS等都是有两种操作系统的版本,一种是linux,一种是windows.而大多数开发者用户都会使用linux版本进行安装. ...
- SSH连接Linux CentOS7-Putty篇
SSH连接Linux CentOS7-Putty篇 这是第一次使用Putty 利用SSH连接Linux.如果你想学习如何使用配置私钥在本地连接Linux服务器, 可以仔细阅读这篇文章,了解一下有关本地 ...
最新文章
- AI又被彩虹吹!​网易被预言为“下一个百度”?
- CentOS 5.1下安装Opensim
- python软件桌面图标_python制作一个桌面便签软件
- jpa mysql查找_jpa查找数据库最新一条消息
- 程序员修神之路--redis做分布式锁可能不那么简单
- WindowsXP命令行修改服务启动选项
- linux Centos下磁盘分区及文件系统创建与挂载
- 一个搜索迷宫出路的程序
- 海鲜之战:上半场活鲜炒作已曲终,下半场冷冻海鲜厚积薄发?
- Python Day 2
- 我开发共享软件的三次经历(上):打造一款很多人用的软件
- 小米3g刷高格固件_小米路由器3g刷第三方固件遇到的一些坑
- ghost12备份linux,用GHOST对LINUX系统做备份(转)
- 离散数学 --- 特殊图 --- 欧拉图,哈密顿图
- 含有共轭复数根的Jordan分解
- 《单片机原理及应用(魏洪磊)》第七章第8题
- 在运行java程序时出现 Error: could not open c:\program Files\Java\jre6\lib\amd64\jvm.cfg'
- WebGL编程指南三:varying变量的使用和理解光栅化过程。
- 从入门到精通我是这样学习算法的
- linux 查看显卡信息及显卡驱动信息