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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
为什么通过ganymed-ssh2连接linux,无法执行ll命令?
1 T% J+ `( P% m7 s  l+ Y
" [" ?% ?; ]" O; V

该用户从未签到

2#
发表于 2021-9-22 15:05 | 只看该作者
step 1 引入jar包8 K. u# X; E& R: ~% ?; S
<dependency>
2 \: C( e4 W+ q- Y            <groupId>ch.ethz.ganymed</groupId>
' N% |0 e! y, n3 s! \  g+ O& r            <artifactId>ganymed-ssh2</artifactId>" \1 O! \, g7 T7 @
            <version>build210</version>4 K- w0 Q0 G. V( k; T8 }0 [& {

# C/ j# W3 m, D: U7 J" e! `</dependency>
. E7 I; f" ]/ S8 ^8 ^  ^/ p  p1 ]$ F; ^2 `
step 2 代码
- M4 J" s3 c2 f0 _; {
6 p7 S" n* S, L) k, vimport java.io.BufferedReader;5 |8 H0 ^+ J5 g) W" f1 E9 G$ ~' I
import java.io.IOException;5 X6 l' W+ b  |5 N5 Z9 E; n
import java.io.InputStream;
) |0 H0 d5 S8 `+ x( v) Wimport java.io.InputStreamReader;$ Q+ y5 O4 @& g0 N; g# X
import java.io.UnsupportedEncodingException;# h4 h1 ^, n" q* o7 K) v: O. x

: }  f! \3 \" S& X3 o% s//import org.apache.commons.lang.StringUtils;& ?0 z0 V' \! L
% v% s$ J: h& M' ]9 \
import ch.ethz.ssh2.Connection;
# a& T1 ]  p% w* z, Q8 `import ch.ethz.ssh2.Session;
2 [, R# Q# C  r: [import ch.ethz.ssh2.StreamGobbler;; M' T. z( c% c4 p. c; r3 S

4 Q9 I; V- w! {2 lpublic class MainCommand {
& r8 |5 q9 d3 r4 u8 p, O0 Q0 a    private static String DEFAULTCHART = "UTF-8";
. p4 t6 P$ J" S0 L4 `
2 N# x& n! [2 D" I8 {% i    private static Connection login(String ip, String username, String password) {) K, p- e: V# g0 b
        boolean flag = false;
% H, I* d: t+ c+ `' P# g        Connection connection = null;
4 i+ _4 p7 k' x) p        try {0 l7 z7 p5 \0 x
            connection = new Connection(ip);
% ~4 M) i5 `8 D) ~3 K- J" O            connection.connect();// 连接
  w- r1 U; K- c6 V3 _            flag = connection.authenticateWithPassword(username, password);// 认证
0 V" n: c% M  @            if (flag) {
$ M& @6 t% b, W                System.out.println("================登录成功==================");
' i# M3 Z) P2 o, G( ]0 p7 q2 |                return connection;; K0 F% C* o6 J
            }: q5 u3 }' u( c: A
        } catch (IOException e) {9 ^. Q0 _5 S- g1 S# @* i
            System.out.println("=========登录失败=========" + e);
/ P+ \' S# r/ ?, x2 s3 W            connection.close();( y" L& ]- T6 N5 n% B
        }9 a& V. n2 D- U8 U: u
        return connection;
! h9 O$ N; x* a1 J/ L: @5 l$ y    }4 s2 ]$ e4 o7 X4 ?/ j
" _( g6 T/ Z  w$ v1 T" V
    /**- @. u2 B! c- W
     * 远程执行shll脚本或者命令, r6 z; R; c0 |- B. G
     *
# ?' x2 N- J- t2 }* p9 X     * @param cmd% \  ~1 u, c* t1 K* n
     *            即将执行的命令
+ b9 l/ |; ?) P- S     * @return 命令执行完后返回的结果值
! d6 X) _- S# B# _: M7 {     */. A9 ~# @5 F0 ?
    private static String execmd(Connection connection, String cmd) {, m! |% M" Q$ U4 o: V6 b! Y+ r) w- l
        String result = "";* J3 R9 v( k9 Q  t
        try{
1 K" D7 L9 b% G5 U$ a            if (connection != null) {
: P3 d1 H) M) |6 |$ I' C+ f                Session session = connection.openSession();// 打开一个会话5 v4 q; M& @% A6 y8 r8 m
                session.execCommand(cmd);// 执行命令
5 ~2 z8 H# H; g8 C# x! f* V  b7 m                result = processStdout(session.getStdout(), DEFAULTCHART);, c3 _5 ]' V. ~/ R+ W8 e( y. r2 Q6 U
                System.out.println(result);
9 x; Y- [% R$ q+ b                // 如果为得到标准输出为空,说明脚本执行出错了
2 B& z0 y/ o" Q; \, p" i                /*if (StringUtils.isBlank(result)) {3 u: `. {( h0 R8 H
                    System.out.println("得到标准输出为空,链接conn:" + connection + ",执行的命令:" + cmd);/ w# c4 `4 t7 o; c1 |
                    result = processStdout(session.getStderr(), DEFAULTCHART);
; S! U: T" n4 t& S- u' O1 `                } else {2 I8 n4 \( p9 [
                    System.out.println("执行命令成功,链接conn:" + connection + ",执行的命令:" + cmd);( L0 K5 H# G$ G
                }*/5 @6 X3 A2 w7 X
                connection.close();. d, E5 B" ~3 N6 Q
                session.close();
) N1 _  v9 s9 j* F3 Z5 i            }! B/ W: {7 Q7 f; g* C
        } catch (IOException e) {
/ X# P; ?* c! t            System.out.println("执行命令失败,链接conn:" + connection + ",执行的命令:" + cmd + "  " + e);, j  E7 \) p$ e5 m$ q3 D. W
            e.printStackTrace();( C- `1 ]- ^: Q: C" h6 p* T
        }
8 Q( ~1 n8 ~* m  |0 ?        return result;
" W8 {: {; G$ t4 [- ?4 V$ w4 f- B, V- T3 D6 o; W- X; u/ u: K
    }
& q* ]: d5 P5 B( |& `+ w; h) J* H
" l0 Z! V: V4 K' s) q( U    /**9 Z2 i8 {' Y$ H  l  f1 ^
     * 解析脚本执行返回的结果集/ k4 H0 U& C# C8 ^0 _! _9 J* D
     *
8 J3 g) L* @6 K: W$ B! {; p     * @param in) m- }3 p/ E2 q+ Z0 m
     *            输入流对象, Z+ C" B2 |) w2 v5 x" ]* T
     * @param charset) O6 @/ x/ W, m2 A( {, o8 {
     *            编码+ ?  F: ^7 r8 R6 h6 |* K9 b
     * @return 以纯文本的格式返回. r- N5 ?# [9 K' G$ K! e
     */
6 g& V! ]4 \# I7 I6 _- n4 M( }    private static String processStdout(InputStream in, String charset) {- A0 M0 M4 y- N" n
        InputStream stdout = new StreamGobbler(in);8 Q& ?* V$ M. ~/ `! A& V2 H
        StringBuffer buffer = new StringBuffer();
0 c0 ?$ z. h, o4 A8 t7 g' a        ;
, j3 O! }, }- O        try {
; p! P' m& y( F! I! j# S8 D            BufferedReader br = new BufferedReader(new InputStreamReader(stdout, charset));
( g0 ^' u8 ^# \$ [8 Q            String line = null;; z3 d3 Z) o. {4 q; ]4 E
            while ((line = br.readLine()) != null) {+ E/ d' Q8 ^1 _# G
                buffer.append(line + "\n");
/ v7 x* _! L" q) }8 Z3 [                System.out.println(line);
- Z/ y' t( i) |6 N            }$ u  P9 V8 ?8 O& Y$ ]
            br.close();
, R& O- G! ~; `0 R9 ?1 z        } catch (UnsupportedEncodingException e) {
6 q+ d: b" B3 B% ~  i' m$ w            System.out.println("解析脚本出错:" + e.getMessage());' K/ _9 H- L! Q! A0 q. b
            e.printStackTrace();6 q$ T% n" e( X7 W. Z  B
        } catch (IOException e) {+ i; [6 ?6 n* N" w8 h5 g1 N9 ?
            System.out.println("解析脚本出错:" + e.getMessage());
" k! L# L, Z$ X- b            e.printStackTrace();
2 N" \% R8 W2 F6 T. t: J! p        }
3 b6 {  p' d4 j  I        return buffer.toString();+ w; p7 Q" n; J
    }, E0 R; e$ g% t. y% e, g# z1 ?

! P: S* N% J5 @9 t( s) ^    public static void main(String[] args) {6 [# l3 {) n: M+ f8 U. I
        long currentTimeMillis = System.currentTimeMillis();
( K9 G0 Q. M4 v1 `( v        String ip = "192.168.115.64";" N/ F( ~* S. a- a8 ?3 M
        String username = "xfraud";
0 A! a  M9 g& ^7 z6 F' b        String password = "cfca1234";0 U5 E- ^; u8 k( ]% p) B6 O3 G+ Q
        String cmd = "uname -a";        
2 P1 e7 `  H( M& w- x        Connection connection = login(ip, username, password);
% l7 z' R, v/ |# V' ~+ ?8 o: R- v        String execmd = execmd(connection, cmd);3 C* [8 J  G, A1 l
        System.out.println(execmd);4 P2 k$ J9 y* i3 G2 t# S
        long currentTimeMillis1 = System.currentTimeMillis();6 B) F$ B0 V( r- D
        System.out.println("ganymed-ssh2方式"+(currentTimeMillis1-currentTimeMillis));
+ _1 ]: P2 X) ^: X, J% z" ~/ |    }
$ P4 T7 M0 g) w}' T* u! N. f5 j/ a. t  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:13
    , U7 [/ r5 Z; K+ n$ tping通了吗
    : z! [& T8 m0 n( [7 G
    能到这一步,肯定是ping通了的吧
    2 C( `/ y& @! z8 g; W+ N) z, U0 T

    该用户从未签到

    5#
    发表于 2021-9-22 15:23 | 只看该作者

    - v  Z6 T- ~9 T3 }ll 是在 ~/.bashrc 中定义的,是 ls -alF 命令的别名(alias),“通过ganymed-ssh2连接linux”时没有执行 ~/.bashrc吧' ^  n% C+ v& M0 H) ?0 X
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-11-24 01:22 , Processed in 0.156250 second(s), 29 queries , Gzip On.

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

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

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