找回密码
 注册
关于网站域名变更的通知
查看: 397|回复: 4
打印 上一主题 下一主题

为什么通过ganymed-ssh2连接linux,无法执行ll命令?

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-9-22 13:52 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
为什么通过ganymed-ssh2连接linux,无法执行ll命令?
: c$ G& z9 h* w3 q6 K8 t- E: W, K& [

该用户从未签到

2#
发表于 2021-9-22 15:05 | 只看该作者
step 1 引入jar包$ w( ]; w' K7 A& F' ?, s# _+ F
<dependency>9 M0 O& _2 a+ K, |
            <groupId>ch.ethz.ganymed</groupId>6 j$ Y# E* \) |  q; @' _
            <artifactId>ganymed-ssh2</artifactId>
9 n' g8 G" x4 ~6 k" E3 I+ f- q            <version>build210</version>
  V2 ^- J- r1 H; R0 C+ b. E. E8 g  N0 \2 J
</dependency>
0 O( ]3 t- \/ m- `) \% Y% g6 V0 E% n* o
step 2 代码0 G  F. e1 ]$ t8 m5 Q
+ d8 \: g# l* Z4 ?& d& M5 \) K
import java.io.BufferedReader;
. Z& D. J( _! ]import java.io.IOException;
; G: u7 R' a4 a! kimport java.io.InputStream;1 m8 g& c- u; O3 }& \& W: f
import java.io.InputStreamReader;. u5 b1 M; a6 y/ Q
import java.io.UnsupportedEncodingException;
0 m6 r( m; W' t6 u2 }( L8 `
  \% {  F( }2 n: ^7 E- ?//import org.apache.commons.lang.StringUtils;) }2 o* A. G# D8 c

$ G/ }) T! `3 J8 Rimport ch.ethz.ssh2.Connection;+ h/ S! s0 p# ?" Q* |, T, k0 k
import ch.ethz.ssh2.Session;
3 t7 j$ [: O  timport ch.ethz.ssh2.StreamGobbler;& e- z* |" z# j" |( d

6 t: w- i0 w/ L2 Y! w; _2 `; e- \public class MainCommand {
7 @+ u. t' q/ x# i' Y    private static String DEFAULTCHART = "UTF-8";5 u  c$ l8 Z* O2 L/ I  F
  M: }4 {  C- a& M
    private static Connection login(String ip, String username, String password) {
2 q) j: @% l( T+ c3 i+ [" H        boolean flag = false;
( u0 s; ]  V/ @; P        Connection connection = null;" X3 x0 e, R6 B5 z
        try {
4 N% Q6 f( r) \" f/ T9 e            connection = new Connection(ip);( V; }- p1 G6 \2 @
            connection.connect();// 连接# A0 W. N+ f3 ~
            flag = connection.authenticateWithPassword(username, password);// 认证
& b5 u; V' j7 C, M            if (flag) {
/ E4 B& H0 w3 d/ J7 K, F                System.out.println("================登录成功==================");1 T% P$ V% R% R# e  h; L
                return connection;* x6 ~8 O6 u8 a0 R3 \4 P7 K
            }& K6 v0 V# `9 x+ I) ?& |
        } catch (IOException e) {, T% k" @: _: r, ~$ d2 C" U* u$ B# K
            System.out.println("=========登录失败=========" + e);
/ h: s/ x" A: {& g: [& o            connection.close();9 }6 ^2 l) [: c, r, U; ]9 Q
        }
3 t0 R/ d8 [) _% M7 d+ h        return connection;
8 i+ c" K0 L9 S" f9 }) O    }
: j) F2 _5 s% y5 \6 r2 {: o; x+ i1 Z+ W' p5 d4 I# B  R3 k  }
    /**
8 y" X  H, s* j     * 远程执行shll脚本或者命令
* ^1 M9 \5 D7 H/ C  @     *
# g/ [: g" l# Q4 x5 W! _6 Q     * @param cmd
. N3 I0 v/ A8 v( N. |: R1 D     *            即将执行的命令
; B( Q- W6 g' X+ O     * @return 命令执行完后返回的结果值# [/ G2 p2 R# K5 X! ^$ R
     */
3 ?  h, n" y  l, m: E- C, F    private static String execmd(Connection connection, String cmd) {+ a1 M" T( i; v3 @" d: G8 }1 c. L; v6 c. z
        String result = "";8 U7 u6 |, O5 F& D6 U  R
        try{- }; P. s) g- N* H1 w5 k, G$ a
            if (connection != null) {
0 \+ O# ?6 N6 ^% D& q7 `                Session session = connection.openSession();// 打开一个会话- M$ ?4 N; g+ h: K; V9 e7 O
                session.execCommand(cmd);// 执行命令& y2 L; {  V  w: Q3 A
                result = processStdout(session.getStdout(), DEFAULTCHART);# T9 \3 l& R5 l% s, M* n! V
                System.out.println(result);
& f0 R) @6 d$ j% g7 k: M/ e                // 如果为得到标准输出为空,说明脚本执行出错了
9 j7 J: M1 N7 e4 Y1 v1 H; S& \                /*if (StringUtils.isBlank(result)) {
' i4 m( F; O2 n                    System.out.println("得到标准输出为空,链接conn:" + connection + ",执行的命令:" + cmd);
; a; f- Z+ d0 A8 G                    result = processStdout(session.getStderr(), DEFAULTCHART);& O6 F- Q* e# B2 c$ H8 G5 m
                } else {  y+ I2 r. C% D8 P& i
                    System.out.println("执行命令成功,链接conn:" + connection + ",执行的命令:" + cmd);
1 @1 D2 a6 l. L% v4 y                }*/
! {& }+ u, \1 S8 |                connection.close();
$ f9 [3 H6 m/ Y- N                session.close();$ g6 H& v( o) J2 \* F3 a
            }1 h7 q; A8 o' ^
        } catch (IOException e) {1 F& o1 ]) I9 Y8 N3 g
            System.out.println("执行命令失败,链接conn:" + connection + ",执行的命令:" + cmd + "  " + e);
# q- K8 u  o. }            e.printStackTrace();
+ l! i1 J- e  h% w        }& Q. d& v% b8 E7 F
        return result;/ _6 ]* {8 p- ?2 [9 g2 P

$ c2 r. ^6 K) |+ v& ^$ P- Z    }5 y8 c6 f! R- V  M1 V

, Y  m) X. J/ l# ^    /**
& ?5 A2 Z2 n, u& M     * 解析脚本执行返回的结果集
# q* U8 J' Q( {0 h' C     * # W+ N. N  W* J- p/ |
     * @param in) `$ W# O, d# P9 H) T
     *            输入流对象2 O# R( c+ Z6 @" x6 O& b/ h
     * @param charset% p7 ~- L- r  h, e9 e
     *            编码/ U# \( _1 Q! @! E" ]- @
     * @return 以纯文本的格式返回3 w7 R" N+ v, j1 |0 X9 n; e0 ~
     */4 Z  H9 K# p2 D/ o% w8 x# U
    private static String processStdout(InputStream in, String charset) {
, @' k$ [! r$ K+ D        InputStream stdout = new StreamGobbler(in);
) t' U# o& z9 K# g* k( h0 k, L        StringBuffer buffer = new StringBuffer();2 q6 a0 _8 a/ ~" c) S
        ;
2 ^# r5 w$ H/ I0 d- t2 N        try {' A! Q, [6 G# ]1 W2 b& a  v0 r
            BufferedReader br = new BufferedReader(new InputStreamReader(stdout, charset));: O. z( d, u' m" c% @& S7 V0 K6 |
            String line = null;8 @, P4 Z2 P- `. s
            while ((line = br.readLine()) != null) {
4 T& ?" i4 ]$ t' K1 F                buffer.append(line + "\n");9 s; R+ e6 B! i/ L
                System.out.println(line);: E  r) e2 s! _" [- z2 T
            }
1 K  Z& c, O+ _. X' d/ ]            br.close();
1 U/ g8 c9 x; j) n% \& v6 D        } catch (UnsupportedEncodingException e) {  v3 X6 G6 K) o
            System.out.println("解析脚本出错:" + e.getMessage());7 d; e! n& p# y7 J
            e.printStackTrace();7 K5 q0 W% c% d6 \- |
        } catch (IOException e) {
0 u8 U5 E; a. Y            System.out.println("解析脚本出错:" + e.getMessage());
4 [, b; Z' Z4 p1 A            e.printStackTrace();, w$ T0 A2 J9 I% i. v1 n- o
        }
: N% I2 K- Q4 S" P  B! {# q        return buffer.toString();+ X6 M6 M/ n! r- i: h$ |
    }
  i% a7 @+ Y, r, ]9 D1 o4 T& T( n2 H4 h0 M& a. n
    public static void main(String[] args) {1 m% F( x; V  \9 T
        long currentTimeMillis = System.currentTimeMillis();) k0 _# p; R7 z# v! s: C: G
        String ip = "192.168.115.64";3 E7 R  o0 \5 t* x2 E, ~$ U8 F& g4 L
        String username = "xfraud";
! {& l! r" M8 l/ D' i        String password = "cfca1234";
, y. A! [0 A; A) C        String cmd = "uname -a";        
1 W* ]- F9 s$ u: r7 X0 s        Connection connection = login(ip, username, password);
! P" _3 ?' j  P* L5 O        String execmd = execmd(connection, cmd);
6 X& g; v* k) h2 y$ h7 b! g! p        System.out.println(execmd);
' d4 X/ |/ M) t4 q        long currentTimeMillis1 = System.currentTimeMillis();$ P3 a" ?$ k/ l: h% ]
        System.out.println("ganymed-ssh2方式"+(currentTimeMillis1-currentTimeMillis));
5 ^& V& D, S& v    }
0 V  m& x2 H& E# }0 F! O  [}
! M" F  A- ~8 t6 o. X2 v

该用户从未签到

3#
发表于 2021-9-22 15:13 | 只看该作者
ping通了吗

点评

能到这一步,肯定是ping通了的吧  详情 回复 发表于 2021-9-22 15:22
  • TA的每日心情
    慵懒
    2020-6-13 15:46
  • 签到天数: 1 天

    [LV.1]初来乍到

    4#
    发表于 2021-9-22 15:22 | 只看该作者
    NingW 发表于 2021-9-22 15:137 M( S$ K' K6 [8 Z, `
    ping通了吗
    / |4 o6 M: k8 W" R
    能到这一步,肯定是ping通了的吧
    : W1 S2 D3 G! l6 @. ^! l/ z* y

    该用户从未签到

    5#
    发表于 2021-9-22 15:23 | 只看该作者
    0 x5 S6 C2 G  a! L  E* M
    ll 是在 ~/.bashrc 中定义的,是 ls -alF 命令的别名(alias),“通过ganymed-ssh2连接linux”时没有执行 ~/.bashrc吧
    % r, z# D4 L- G7 u3 I6 L8 [9 R
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-11-24 11:19 , Processed in 0.171875 second(s), 27 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表