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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值