EDA365电子论坛网

标题: 为什么通过ganymed-ssh2连接linux,无法执行ll命令? [打印本页]

作者: mengtaiqi    时间: 2021-9-22 13:52
标题: 为什么通过ganymed-ssh2连接linux,无法执行ll命令?
为什么通过ganymed-ssh2连接linux,无法执行ll命令?
) K. N( T  ?2 Q$ t4 D3 b& n% j5 [  N! i, k

作者: showmaker    时间: 2021-9-22 15:05
step 1 引入jar包" @7 ~0 E  A$ u1 H- F+ o( @
<dependency>) v6 j: \. y2 p' }" a& K! t
            <groupId>ch.ethz.ganymed</groupId>
; t6 C7 Y; Z3 O8 I3 i( y            <artifactId>ganymed-ssh2</artifactId>
) w! [6 W7 L; C1 `; @, k            <version>build210</version>& i4 q3 S* X% r, P( ~8 y
  c$ R! [( u9 l
</dependency>
: h7 O8 S9 X- w' p# V2 Z& ~" m
step 2 代码# w6 m: @& m8 ~% E
  @2 J# z# Z$ g1 l% R* Q, i: ~
import java.io.BufferedReader;
$ Z- i# Y  D! y1 R% G6 }" R, limport java.io.IOException;9 X5 U- p* P  m/ j, u) t
import java.io.InputStream;
1 K! s- e0 p3 M! P3 m- H" t4 c+ jimport java.io.InputStreamReader;1 Y- r; T: r/ M2 v$ U
import java.io.UnsupportedEncodingException;
  p, \- a8 [1 C9 z) q9 @6 s1 `% [& M0 w) _6 z3 E
//import org.apache.commons.lang.StringUtils;% ?5 J. b# u2 Q# P7 y  q5 q1 t1 L  H

, [! s* x/ ]6 f# @' q5 [import ch.ethz.ssh2.Connection;
7 }. l4 v" W# Z5 dimport ch.ethz.ssh2.Session;
7 U) v/ g  W9 N) ?+ A8 aimport ch.ethz.ssh2.StreamGobbler;
* H1 K  u9 l" K
3 r. \6 V. `; b/ Rpublic class MainCommand {- \0 h# N' E* S
    private static String DEFAULTCHART = "UTF-8";
3 H% D8 l. G0 x$ {$ e6 X$ b8 Z9 O3 Z( ~& d& n4 \8 Z9 `3 @8 |* l
    private static Connection login(String ip, String username, String password) {
0 k) X; x$ T+ p& g7 [6 C) t- f        boolean flag = false;
5 Q$ M% E# _+ E, |9 N) H4 }        Connection connection = null;
) j5 `3 W3 u' }1 P$ |9 Q7 h        try {
8 f4 ?- Y# z$ r  {2 A& E* F0 _            connection = new Connection(ip);& x5 t& J& @  \. }2 t
            connection.connect();// 连接
+ u; W7 l1 m) @/ Q& a% M) P            flag = connection.authenticateWithPassword(username, password);// 认证
$ r' x% N4 f2 |- q: c& V            if (flag) {
3 A2 M/ g" C; M+ {. t* [                System.out.println("================登录成功==================");& a% j8 C/ a. w7 m
                return connection;
- O/ k: A! `* j) M- N; a            }
6 p# j* C. G8 m7 }; D* T        } catch (IOException e) {5 U2 e7 L- q$ E4 X( H2 M& h
            System.out.println("=========登录失败=========" + e);
/ Z4 B' N9 D& {' C7 X2 i! X+ n1 [            connection.close();" H  O8 g- C" ^/ [- c, K( {" _8 n) j
        }3 w' y3 z6 [) G' r+ ?9 k
        return connection;
6 m5 H& U) R, e    }& n1 `6 s( v. T6 n# i8 g4 B

% L  s# |+ u$ G& f% p    /**  _/ n! y; ]) L1 M
     * 远程执行shll脚本或者命令
. [7 g9 {* a, p4 `5 y     * 6 Z7 o6 J1 }: s$ f
     * @param cmd
' N7 u$ r) i0 o$ N) A' T     *            即将执行的命令) H: V/ |0 L5 A3 h4 q# B
     * @return 命令执行完后返回的结果值
" ?" j8 x/ {0 \3 W9 _: w     */
5 c% T8 _) g8 T    private static String execmd(Connection connection, String cmd) {4 u9 p5 z0 A5 B! V& g7 f  j
        String result = "";, j: i2 g7 S' w
        try{
! _% [% B# g- g( C            if (connection != null) {) K1 _- j  V1 w/ r. Z! f
                Session session = connection.openSession();// 打开一个会话
8 Y$ |9 r3 o  C/ h4 @                session.execCommand(cmd);// 执行命令
' {# c* |. J/ S9 r8 N, H                result = processStdout(session.getStdout(), DEFAULTCHART);+ \, n1 J" b. D) }2 ^
                System.out.println(result);, \9 a; ?3 b  X8 h7 h7 }; `
                // 如果为得到标准输出为空,说明脚本执行出错了0 n- ?# A% A# A: q  z4 l
                /*if (StringUtils.isBlank(result)) {
" H' f: b9 ?8 \                    System.out.println("得到标准输出为空,链接conn:" + connection + ",执行的命令:" + cmd);
. @" A/ d/ j% C9 ~) C. @                    result = processStdout(session.getStderr(), DEFAULTCHART);  J% Y" w6 {  M3 x$ |
                } else {: h4 Q6 P  \7 u6 K( e
                    System.out.println("执行命令成功,链接conn:" + connection + ",执行的命令:" + cmd);
+ P& v. C6 I/ q. ]                }*/% R* S: B4 W7 A' @
                connection.close();
6 l7 j& V4 I% a6 R4 g% A3 n: }/ [                session.close();
' X# b" J) J; i" y            }
& i$ m6 M! ^1 i        } catch (IOException e) {
2 G! S$ E& e* i2 n( m            System.out.println("执行命令失败,链接conn:" + connection + ",执行的命令:" + cmd + "  " + e);- _9 V! D( \' z
            e.printStackTrace();
  E# R" d2 t, ^% s- N7 h7 x        }
% @! j. {/ `3 W" |0 Y/ o        return result;
) o; O+ ]" h" D3 J+ R6 _+ ^  b( ]# r
) w' @! U  ^" g' m9 ]    }
% d( b* b% O# r- l) C8 O7 X
7 R8 a: t0 x' k5 O( T    /**
- ~* X5 b$ V& y6 J" j# M     * 解析脚本执行返回的结果集
7 o( m/ g3 Q3 D. x7 ]     * / W& ?3 E) k9 \. `, P
     * @param in, c; c1 }8 a- y
     *            输入流对象, [" L1 y4 e% U: \8 B9 u# `
     * @param charset/ N5 k! g( v( x. h* L
     *            编码( ~' v4 |0 `/ ]) t
     * @return 以纯文本的格式返回
8 N9 y7 x1 s' C: W6 A6 @9 r7 [     */( \- y9 d  y1 H3 ~  I; P# L
    private static String processStdout(InputStream in, String charset) {
) j% `$ [# I' \4 V3 N        InputStream stdout = new StreamGobbler(in);* t( K' G% a4 W0 r% q2 a
        StringBuffer buffer = new StringBuffer();
8 `- S* z2 h2 w8 B# r2 r        ;
$ d# ~5 U# Y' s5 L; B. p- {9 E9 u        try {
: v0 r( \) D' W" P  ?- ^            BufferedReader br = new BufferedReader(new InputStreamReader(stdout, charset));! \& {: U1 v7 ^5 t! W
            String line = null;
" O$ `- Y5 \8 V' b. o" s            while ((line = br.readLine()) != null) {& B' d" i7 Z3 A1 q
                buffer.append(line + "\n");
& w/ b4 y& c+ G4 W2 a! l                System.out.println(line);9 F7 f) e, W% ?' y3 f/ X+ s: L
            }
6 R! ?. M7 _1 ]            br.close();7 W$ c, z2 o+ q5 i9 H
        } catch (UnsupportedEncodingException e) {1 U# F! N7 D8 q/ I: _
            System.out.println("解析脚本出错:" + e.getMessage());
0 X. U; f0 v0 A" l4 k" @8 F            e.printStackTrace();
( i" [% O. _: J' g4 `( Z        } catch (IOException e) {
2 ]2 s' }$ E* b$ o) N            System.out.println("解析脚本出错:" + e.getMessage());
0 X! V& \# r8 m            e.printStackTrace();, F; S- S6 m) [
        }, |* f! `' D7 n
        return buffer.toString();
& B+ |1 ^! F; q: W    }
( J1 H# X, |7 m3 d/ j7 i" s+ W- b, z( _5 \- w- t
    public static void main(String[] args) {
2 E8 \6 Y: P# J! \$ K        long currentTimeMillis = System.currentTimeMillis();  O9 e5 [8 u3 z4 J! g
        String ip = "192.168.115.64";
: Y# B" C8 F( ^8 E+ i/ @" L$ c        String username = "xfraud";
( c2 m8 Z4 t3 h1 M5 G. B/ B  |        String password = "cfca1234";
: h) n( e' |! |) f        String cmd = "uname -a";        
! c0 h, I% I' `& }        Connection connection = login(ip, username, password);. \8 u/ @* L; X0 r& Q# b
        String execmd = execmd(connection, cmd);
; f  F: r& r% S& e# J8 ?( _3 R1 Y: c        System.out.println(execmd);
+ G( M- B/ z" O5 s        long currentTimeMillis1 = System.currentTimeMillis();$ i1 F1 i6 W5 y4 U0 g
        System.out.println("ganymed-ssh2方式"+(currentTimeMillis1-currentTimeMillis));
; m3 H( E+ Q2 |7 S    }6 L5 Y, ?6 i% T* m1 r4 i
}* s3 V" g3 x( L( c( B

作者: NingW    时间: 2021-9-22 15:13
ping通了吗
作者: younicp    时间: 2021-9-22 15:22
NingW 发表于 2021-9-22 15:13
# ]6 a/ H" q) \ping通了吗

* L! [+ E0 G6 t% }能到这一步,肯定是ping通了的吧9 j& E* F9 ^2 k/ s0 k4 l

作者: dapmood    时间: 2021-9-22 15:23
0 a4 W9 z- @$ n, L" ]
ll 是在 ~/.bashrc 中定义的,是 ls -alF 命令的别名(alias),“通过ganymed-ssh2连接linux”时没有执行 ~/.bashrc吧
7 I  d; H4 V) K




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2