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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值