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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
为什么通过ganymed-ssh2连接linux,无法执行ll命令?' w2 X; i# a0 I, B3 C0 Z& h
- j1 O9 h( m1 ~, K, S6 D7 G8 `

该用户从未签到

2#
发表于 2021-9-22 15:05 | 只看该作者
step 1 引入jar包
3 G) s/ [" u; n! q' h! R<dependency>! K' m7 I& h( [  s! s
            <groupId>ch.ethz.ganymed</groupId>
- @: v! y3 f0 @# T7 I* ^3 h            <artifactId>ganymed-ssh2</artifactId>7 o! K$ p1 k# D6 q; H
            <version>build210</version>6 y/ S4 P; y3 F! i$ c" d

9 o* }8 h, U8 F5 B</dependency>
- n, }" Y' T* e# n/ s! n  E( P4 o+ {  s
step 2 代码
$ \4 ]6 e) o$ a- Y. U8 q5 V% q( q% |
import java.io.BufferedReader;
- i8 [5 E# q( l4 S. Z: q6 v: t% Yimport java.io.IOException;4 Q' R' j  A- ~2 w
import java.io.InputStream;
; W2 w5 ^! f, pimport java.io.InputStreamReader;( |6 k' L2 q3 [; N1 M1 S
import java.io.UnsupportedEncodingException;, v; k2 Q; T$ ^: {+ \
! p9 G7 R8 b5 |, r
//import org.apache.commons.lang.StringUtils;4 B) J& y9 t; I" G; `) K
. L: F; c/ X6 U$ u0 k
import ch.ethz.ssh2.Connection;3 W/ s7 _" O* M# z2 ^
import ch.ethz.ssh2.Session;" d: y0 D% s9 g5 o
import ch.ethz.ssh2.StreamGobbler;
/ `6 @  c: r* ]% a
+ p( ~0 e# |7 V: W- |) i, C% cpublic class MainCommand {5 b; }- K8 h3 k4 Q9 p
    private static String DEFAULTCHART = "UTF-8";
) H% ~+ W$ C. G3 A4 c5 J: z7 Q4 c. L' b2 v. ~! m
    private static Connection login(String ip, String username, String password) {
; B: a! `# |, ^# z" [$ _7 z        boolean flag = false;) p, |: v( ^8 M1 y  A) J& O
        Connection connection = null;
* K5 C- U0 d, B9 i* w: ~        try {0 {( q4 E/ s2 q4 V# `' V$ G% a( U
            connection = new Connection(ip);# C* g/ E+ ^: f; ?
            connection.connect();// 连接
7 h' z  `+ d( u$ k- p            flag = connection.authenticateWithPassword(username, password);// 认证2 A0 X# O  l6 y$ S5 ]
            if (flag) {; j$ l* J% I9 C8 G3 z# S# \+ G* K  f
                System.out.println("================登录成功==================");
1 ~: A- h( m5 G' `, R8 M                return connection;; b- Q+ {- ?7 L, w8 D, f
            }
$ T% M- s2 M) D' G4 |+ d        } catch (IOException e) {
& h2 N  y% N3 `. f            System.out.println("=========登录失败=========" + e);
4 v- J+ F+ M5 z# L            connection.close();
" a+ w1 }% M* g& n+ J* Q4 a        }, R8 j+ _5 l5 r3 B  ?
        return connection;; h2 @6 ^! v, f3 N
    }6 Z  A: s- m5 A3 w% x( e! J

# }1 I: D  J* G8 G    /**
+ S. L! {) B9 g1 ^8 i     * 远程执行shll脚本或者命令6 n/ b! p: M% x  q
     *
8 o# f) m7 D. W0 U; Z2 X     * @param cmd8 w7 ^; z0 S* G
     *            即将执行的命令( [+ Y6 B+ [& x8 g
     * @return 命令执行完后返回的结果值3 a+ n. ~# F7 Y# ^: C1 t5 Y
     */8 i2 B3 I- \2 v+ \% h4 D/ o
    private static String execmd(Connection connection, String cmd) {
) o: Y/ _3 M5 {: Q        String result = "";
3 |, K# l9 b( C7 T; L        try{$ e/ X# k( d" m$ N
            if (connection != null) {
& \+ q8 j) U9 t  n! D# p! @2 ]                Session session = connection.openSession();// 打开一个会话8 ]: M! N" K/ E! Y: U; q
                session.execCommand(cmd);// 执行命令: l. E6 h2 L" _2 k' i# L
                result = processStdout(session.getStdout(), DEFAULTCHART);
* J- R6 z9 s  D/ z. r2 G) x                System.out.println(result);! h; d5 E* D2 o* G' u
                // 如果为得到标准输出为空,说明脚本执行出错了
  n4 E: r" N% X, _; x                /*if (StringUtils.isBlank(result)) {
, e. ^" e* {3 J$ u0 W/ x                    System.out.println("得到标准输出为空,链接conn:" + connection + ",执行的命令:" + cmd);
) o& T1 W- T( o1 Q- q$ P/ w                    result = processStdout(session.getStderr(), DEFAULTCHART);2 ?" h% p8 t7 `3 d( c( F' ]
                } else {
% U" t: a- |1 r                    System.out.println("执行命令成功,链接conn:" + connection + ",执行的命令:" + cmd);
" k, }- v, R; J, ]8 H6 c                }*/
3 _% h( J4 p. r& {. `                connection.close();2 R  C+ J# J' I+ Z
                session.close();+ e# G; F1 L* o3 X# l) I4 C* d# t
            }0 [+ [8 J- \7 ^! j$ w* L
        } catch (IOException e) {- Y" W% M( X" {& a( X" U5 _& l
            System.out.println("执行命令失败,链接conn:" + connection + ",执行的命令:" + cmd + "  " + e);
2 ]- ~+ O/ o( {$ N( w. Q, {            e.printStackTrace();: Q! T: R1 J/ z. P! }" ?
        }
+ b7 ~4 ]- U/ j+ S1 q        return result;4 L+ K% q1 {) M
& K; i* j& o$ |: ?# J
    }- ?( G2 o6 I* E: o+ i

" p8 _4 _: N: {: L9 y3 Q    /**
; `- T1 u( E0 s; \% w, j     * 解析脚本执行返回的结果集% V7 h3 A+ U3 @2 \: l6 X) t& U
     *
% @# U* x) n1 ~     * @param in
+ G5 A1 V- _3 R% j! o     *            输入流对象# P# A7 C' f5 S! Y' x  L2 `
     * @param charset
# B1 z7 P: k. J  \5 R6 k% |     *            编码
1 L7 K  r0 K5 m     * @return 以纯文本的格式返回" K' q8 r; L5 {0 m5 X: {& t
     */" e% Y, t3 u! @$ Y
    private static String processStdout(InputStream in, String charset) {4 y1 n! l, J' z' F  s
        InputStream stdout = new StreamGobbler(in);- o+ r9 P* s% s0 N
        StringBuffer buffer = new StringBuffer();
9 U& Y; x% ~# O        ;4 Q$ K* i; O( F! Y% N
        try {
; n1 |& ^. H/ Y: H            BufferedReader br = new BufferedReader(new InputStreamReader(stdout, charset));
( _6 d8 ^6 \" K' ?5 J            String line = null;
. X. l" i% g$ o3 x& A+ N& }4 L" l            while ((line = br.readLine()) != null) {
: j8 S! x. ^( t, H                buffer.append(line + "\n");, T" U2 I0 A8 y
                System.out.println(line);1 U7 N9 J0 W5 Y; u8 k
            }! r2 l' A* Z9 @; T9 `  c0 d
            br.close();
7 g7 `/ p, w- \6 b, r        } catch (UnsupportedEncodingException e) {
6 E- H0 k& t, b2 P; b( \            System.out.println("解析脚本出错:" + e.getMessage());& a+ N/ W9 ?, L3 Z  @% e% Q
            e.printStackTrace();
. d2 L# W: Q# L' N  K        } catch (IOException e) {( A! ^- f$ [2 W4 _
            System.out.println("解析脚本出错:" + e.getMessage());, A0 h+ G+ v0 S1 @0 R
            e.printStackTrace();- {3 U) n% A, G! b3 `
        }' {, A& U; y; _" [
        return buffer.toString();* W+ V7 x5 [# a' N! G
    }: C+ }) m5 I( f

  h9 X8 I, v( I0 S9 R4 a2 w, _    public static void main(String[] args) {% K- y  k& C- t$ \/ I
        long currentTimeMillis = System.currentTimeMillis();
' D( d8 h# l* D" n3 H        String ip = "192.168.115.64";( M# e! Q7 c& l% R; _! M
        String username = "xfraud";; H' r5 `( K; i; [5 y' _( h3 v( n
        String password = "cfca1234";: ]: W. F2 G2 d# q
        String cmd = "uname -a";        
& N7 r7 B% o# F$ b- Z* r) f        Connection connection = login(ip, username, password);
- w5 N- Z; D4 o/ F9 G+ P        String execmd = execmd(connection, cmd);2 q' O% g7 s: C3 p* D# Z% S  L. r
        System.out.println(execmd);
* J( O, O' J4 P  q9 G2 p% X- V: j5 d        long currentTimeMillis1 = System.currentTimeMillis();
0 X# J9 B5 ?! `: d        System.out.println("ganymed-ssh2方式"+(currentTimeMillis1-currentTimeMillis));" I6 b- L& ]( P: \) P
    }0 p6 L2 N+ C) R2 L9 e" h! w
}
8 }, f# h2 g  u7 l6 E

该用户从未签到

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:13
    ( a" @' }0 X, R6 Q4 {: ~; C$ J) Mping通了吗
    3 t4 ^# b3 K8 L0 u* R1 D
    能到这一步,肯定是ping通了的吧" ]( |0 O" V; q' O# I% n8 @

    该用户从未签到

    5#
    发表于 2021-9-22 15:23 | 只看该作者
      t5 Q9 Z  K, s9 b. Y' k
    ll 是在 ~/.bashrc 中定义的,是 ls -alF 命令的别名(alias),“通过ganymed-ssh2连接linux”时没有执行 ~/.bashrc吧
    / t( a( \5 D: W0 y
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

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

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

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

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