|
ll 是在 ~/.bashrc 中定义的,是 ls -alF 命令的别名(alias),“通过ganymed-ssh2连接linux”时没有执行 ~/.bashrc吧 |
NingW 发表于 2021-9-22 15:13 能到这一步,肯定是ping通了的吧 |
|
step 1 引入jar包 <dependency> <groupId>ch.ethz.ganymed</groupId>) k& k* e3 I! |9 ?- F7 H Y <artifactId>ganymed-ssh2</artifactId> <version>build210</version>( {* v. O+ G y3 }, V# H2 y </dependency> step 2 代码1 O0 ]0 ^7 i7 w* A: f4 r& f import java.io.BufferedReader; import java.io.IOException;& u6 \ F4 Q( G3 M& e import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; //import org.apache.commons.lang.StringUtils; & H7 P" s3 o( _* F0 |5 ?5 Q import ch.ethz.ssh2.Connection; import ch.ethz.ssh2.Session; import ch.ethz.ssh2.StreamGobbler; public class MainCommand {7 @+ d- Q6 [- v$ E7 F, d private static String DEFAULTCHART = "UTF-8";; l& K2 k1 u' [: }$ U J+ a4 p) l9 b9 m private static Connection login(String ip, String username, String password) {( |. m2 D$ h1 G$ M% T6 _ boolean flag = false; Connection connection = null;$ u# w! W* G2 e! d/ a; V# v try { connection = new Connection(ip); W2 A8 v; `7 L) X connection.connect();// 连接. l) G! J) h+ ]% d flag = connection.authenticateWithPassword(username, password);// 认证( @7 j( f C2 Q$ w' N3 n S) a if (flag) { System.out.println("================登录成功=================="); return connection; } } catch (IOException e) { System.out.println("=========登录失败=========" + e); connection.close();- h5 t5 |8 W" ^6 `2 O$ B } return connection;" ?2 v% e1 X. B7 _" w5 M } /** * 远程执行shll脚本或者命令 * 9 l, g6 u: ^9 a. u% R4 E2 T * @param cmd9 ~- e* p5 C3 [& F3 C% N2 l * 即将执行的命令( @* `# e$ j( T: @9 Q. Y# q0 o) ~* b * @return 命令执行完后返回的结果值 */ private static String execmd(Connection connection, String cmd) { String result = "";* U- O1 t7 Q* L try{8 D: G S @& t5 J* I if (connection != null) { Session session = connection.openSession();// 打开一个会话 session.execCommand(cmd);// 执行命令 result = processStdout(session.getStdout(), DEFAULTCHART); System.out.println(result); // 如果为得到标准输出为空,说明脚本执行出错了 /*if (StringUtils.isBlank(result)) {! u3 l. N2 x5 h/ y' H, h System.out.println("得到标准输出为空,链接conn:" + connection + ",执行的命令:" + cmd);5 ~) x: J4 j* ~" p) f5 x; a result = processStdout(session.getStderr(), DEFAULTCHART);9 Y+ I, ~" f" r } else {4 p+ y1 n0 }4 k* ]$ C% s System.out.println("执行命令成功,链接conn:" + connection + ",执行的命令:" + cmd);& S! z6 y" w! L" E% I8 f+ A' K }*/ connection.close();9 U6 A4 ^" }" {4 D& B2 [ session.close();, L Y7 j( ^7 d( t4 C% a8 H7 B/ E } } catch (IOException e) {4 r) z4 X# _1 A! T7 z6 b# J System.out.println("执行命令失败,链接conn:" + connection + ",执行的命令:" + cmd + " " + e); e.printStackTrace(); }# z6 b* P5 \# O( x2 J! p& U+ n. z* b return result;: t) t+ H, c0 [/ o% o + s+ z5 P+ u. W: r% f2 J4 }: H( H5 H } ' b( f& S# d6 r$ i# ~% k1 W ~ /**/ f6 g7 C' U2 }3 F1 b * 解析脚本执行返回的结果集 * * @param in' \1 T! |; i, z4 p8 a0 | * 输入流对象 * @param charset, \* u7 q6 S: }# k V9 c * 编码1 Z3 J i# V2 T0 ^; |, Y * @return 以纯文本的格式返回# j! N- e" l+ k */% m. k \$ C; d2 C! I+ C private static String processStdout(InputStream in, String charset) { InputStream stdout = new StreamGobbler(in);3 l; u2 @5 l! k s/ |6 F" @ StringBuffer buffer = new StringBuffer();7 G, E6 a6 E/ V, ^; E ;( a5 S' ^9 U( d( k0 B/ Z try { H3 e& _' O' J* A% i BufferedReader br = new BufferedReader(new InputStreamReader(stdout, charset)); String line = null;5 T8 @) `% r3 H% Q1 {3 J3 r& ]0 n while ((line = br.readLine()) != null) {# P) e# G( V `0 z buffer.append(line + "\n");; c; M ~: b& R ]7 C8 k8 w2 ]: \ System.out.println(line);. _; W8 y& m% H' g } br.close(); } catch (UnsupportedEncodingException e) { System.out.println("解析脚本出错:" + e.getMessage()); e.printStackTrace();9 V) o9 i5 Y2 l } catch (IOException e) { System.out.println("解析脚本出错:" + e.getMessage()); e.printStackTrace();* g. \1 j' o9 R9 P! C }) ^/ N/ g, M6 O* Q1 ?4 o3 J8 m, i return buffer.toString();. m; I- H6 o4 n5 X$ I2 u }& l( }$ ]: C+ v# g( J public static void main(String[] args) { long currentTimeMillis = System.currentTimeMillis();: T0 |3 L- H1 P String ip = "192.168.115.64"; String username = "xfraud"; String password = "cfca1234";0 m. P. b4 K4 A% ^$ Q$ w String cmd = "uname -a"; % O. z/ j- m1 x& o" v9 p' A& t/ C. a2 j Connection connection = login(ip, username, password); String execmd = execmd(connection, cmd); System.out.println(execmd);8 W, P' c4 _$ ]; d long currentTimeMillis1 = System.currentTimeMillis();, ~8 M& m' h; C: x: h System.out.println("ganymed-ssh2方式"+(currentTimeMillis1-currentTimeMillis));# k1 y& y7 g% ~. h0 [ }+ D) }3 N3 a( r } |
/1
关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )
GMT+8, 2025-11-24 02:33 , Processed in 0.187500 second(s), 29 queries , Gzip On.
地址:深圳市南山区科技生态园2栋A座805 电话:19926409050