JAVA经过Telnet连接执行shell脚本

JAVA通过Telnet连接执行shell脚本/**?* commons-net-2.0.jar是工程依赖包 ?*/package telnet2import java

JAVA通过Telnet连接执行shell脚本

/**
?* commons-net-2.0.jar是工程依赖包
?*/
package telnet2;

import java.io.InputStream;
import java.io.PrintStream;

import org.apache.commons.net.telnet.TelnetClient;

/**
?* @descript NetTelenet.java
?* @author sinclair
?* @date Jun 10, 2010
?*/
public class NetTelnet {
??? private TelnetClient telnet = new TelnetClient();
??? private InputStream in;
??? private PrintStream out;
??? private char prompt = '$';// 普通用户结束

??? public NetTelnet( String ip, int port, String user, String password ) {
?try {
???? telnet.connect( ip, port );
???? in = telnet.getInputStream();
???? out = new PrintStream( telnet.getOutputStream() );
???? // 根据root用户设置结束符
???? this.prompt = user.equals( "root" ) ? '#' : '$';
???? login( user, password );
?} catch ( Exception e ) {
???? e.printStackTrace();
?}
??? }

??? /**
???? * 登录
???? *
???? * @param user
???? * @param password
???? */
??? public void login( String user, String password ) {
?readUntil( "login:" );
?write( user );
?readUntil( "Password:" );
?write( password );
?readUntil( prompt + " " );
??? }

??? /**
???? * 读取分析结果
???? *
???? * @param pattern
???? * @return
???? */
??? public String readUntil( String pattern ) {
?try {
???? char lastChar = pattern.charAt( pattern.length() - 1 );
???? StringBuffer sb = new StringBuffer();
???? char ch = ( char ) in.read();
???? while ( true ) {
??sb.append( ch );
??if (ch == lastChar) {
????? if (sb.toString().endsWith( pattern )) {
???return sb.toString();
????? }
??}
??ch = ( char ) in.read();
???? }
?} catch ( Exception e ) {
???? e.printStackTrace();
?}
?return null;
??? }

??? /**
???? * 写操作
???? *
???? * @param value
???? */
??? public void write( String value ) {
?try {
???? out.println( value );
???? out.flush();
?} catch ( Exception e ) {
???? e.printStackTrace();
?}
??? }

??? /**
???? * 向目标发送命令字符串
???? *
???? * @param command
???? * @return
???? */
??? public String sendCommand( String command ) {
?try {
???? write( command );
???? return readUntil( prompt + " " );
?} catch ( Exception e ) {
???? e.printStackTrace();
?}
?return null;
??? }

??? /**
???? * 关闭连接
???? */
??? public void disconnect() {
?try {
???? telnet.disconnect();
?} catch ( Exception e ) {
???? e.printStackTrace();
?}
??? }

??? public static void main( String[] args ) {
?try {
???? System.out.println( "启动Telnet..." );
???? String ip = "192.168.0.11";
???? int port = 23;
???? String user = "user";
???? String password = "111111";
???? NetTelnet telnet = new NetTelnet( ip, port, user, password );
???? telnet.sendCommand( "export LANG=en" );
???? String r1 = telnet.sendCommand( "cd /home/project/" );
???? String r2 = telnet.sendCommand( "pwd" );
???? String r3 = telnet.sendCommand( "sh a.sh" );

???? System.out.println( "显示结果" );
???? System.out.println( r1 );
???? System.out.println( r2 );
???? System.out.println( r3 );

???? telnet.disconnect();
?} catch ( Exception e ) {
???? e.printStackTrace();
?}
??? }
}