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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
为什么通过ganymed-ssh2连接linux,无法执行ll命令?
  \* x" S3 o. h$ y8 I
4 x, {% M5 {! S$ f3 P. V

该用户从未签到

2#
发表于 2021-9-22 15:05 | 只看该作者
step 1 引入jar包4 p, r; F" G( X/ S* C4 L$ z( u6 H
<dependency>( G( L  v6 R% m, K* Z. W' l% l6 S
            <groupId>ch.ethz.ganymed</groupId>1 M* l* O$ {4 r; q+ `
            <artifactId>ganymed-ssh2</artifactId>+ `7 v: T6 E, a: i8 l- N/ u* U
            <version>build210</version>: c7 z  z, W# {

2 Q' ]5 G# \# i" g8 M' B</dependency>
: r9 |! s/ ~$ Y# @- k1 _' O5 ^; |
+ J0 E5 x) X( G' |9 T$ e0 O9 }2 Vstep 2 代码" i5 _& p/ f5 b( K! [; C3 L
. S: y& @$ ^1 s* A7 x5 s1 a
import java.io.BufferedReader;
/ [) n# r4 m. w3 O* p4 \/ Fimport java.io.IOException;
! W# A1 L- y& h9 a7 timport java.io.InputStream;
4 n  g! [- U6 ^$ P9 Gimport java.io.InputStreamReader;
& t1 c9 z' e( n6 s( Bimport java.io.UnsupportedEncodingException;
" N9 |7 l. M  u. ?  K: g4 n, a3 C* _
//import org.apache.commons.lang.StringUtils;
: R+ m4 n2 B, o+ l, Z5 N# {& h" Q% x- B& @& i
import ch.ethz.ssh2.Connection;" T* \) H- E/ D1 A3 J
import ch.ethz.ssh2.Session;
# g4 C! ]& s5 i- y8 {' L5 ~. A/ |$ bimport ch.ethz.ssh2.StreamGobbler;* n( p: Z8 V8 G6 j5 ]) v- J8 g+ w
$ I5 I0 i+ ^  I9 f; y7 T1 F
public class MainCommand {
( O. T# f& q4 H! U    private static String DEFAULTCHART = "UTF-8";3 A2 `7 _6 l/ y0 p$ N1 [
; w/ B" b7 @! w$ k2 i. G
    private static Connection login(String ip, String username, String password) {
* [1 u+ x. O" {; j4 D+ g( U. E        boolean flag = false;( {9 Q) b( c. m" i4 ]. ?
        Connection connection = null;& Q; ?- e$ O, k6 H/ i3 C
        try {
1 ]. w" p: r( w' _' Q# ~! t            connection = new Connection(ip);
# E$ G! o4 F$ `, _3 \4 F            connection.connect();// 连接
7 `9 L* x) _8 U9 F3 P5 ^8 G            flag = connection.authenticateWithPassword(username, password);// 认证
1 h/ ?# J* M9 F- R3 u. \            if (flag) {
- m4 ?0 [( k3 N0 ?& u                System.out.println("================登录成功==================");
4 Q. F  U* ~+ e4 g# r                return connection;
. A1 ^3 c+ O3 H! L% a            }
1 a5 f6 a; A/ u% r0 b        } catch (IOException e) {, y+ L+ G1 G, p6 D
            System.out.println("=========登录失败=========" + e);. C- J; e5 V# t1 |+ }
            connection.close();, S& w8 H5 g3 t& q" O& z& Y2 D4 B! D
        }
2 U$ f& e" R, D( S( U        return connection;7 C9 o1 ]# r6 C5 e( o
    }0 k9 b/ C- x5 W9 K# x& w. T0 T: v. E
  @8 w& o3 j  v7 z$ D2 U/ ]' Z( _
    /**- A  l6 ]( s( H2 ~8 O2 |
     * 远程执行shll脚本或者命令. w, ]! I5 y! ?7 q) {3 o( ]
     * $ Z. T7 }1 |' B. n4 _4 ?1 ^
     * @param cmd" o  E9 ]9 \  d, {, d" L
     *            即将执行的命令
' v" P2 u- P& {1 P& U     * @return 命令执行完后返回的结果值% f3 o1 q- l8 f9 T. C- `$ M
     */% T3 a$ D6 o& K1 b: c6 D4 N
    private static String execmd(Connection connection, String cmd) {
7 n2 p# F8 r+ E& H  C+ _        String result = "";5 d; O1 I) u* v8 R& |
        try{
# t' F" k9 X5 _, Y1 X            if (connection != null) {9 i, Q- B! v( k+ I3 D! |
                Session session = connection.openSession();// 打开一个会话2 [; w& b' T: J- U$ E
                session.execCommand(cmd);// 执行命令( \* `8 _8 g& {; g4 f
                result = processStdout(session.getStdout(), DEFAULTCHART);3 _* u0 ?6 ^9 {" ~; [  k3 I
                System.out.println(result);
0 _1 `: r" T+ z( E2 M* y                // 如果为得到标准输出为空,说明脚本执行出错了4 u+ \& k+ Y# U% P+ D
                /*if (StringUtils.isBlank(result)) {
' C3 P2 Q1 s" Q2 @7 Y                    System.out.println("得到标准输出为空,链接conn:" + connection + ",执行的命令:" + cmd);  F1 D6 L5 l3 i3 `+ @
                    result = processStdout(session.getStderr(), DEFAULTCHART);
7 `) u# n1 R5 S9 h9 ^                } else {1 h9 [' ^- @; F) @
                    System.out.println("执行命令成功,链接conn:" + connection + ",执行的命令:" + cmd);, V' N) ]! B7 p  H  |6 J& _
                }*/
7 w. v& b; A4 n. r                connection.close();+ ~6 _3 u1 u- x
                session.close();
1 Z: f* L# ?- l' r7 F; l9 I6 \0 T            }+ |7 C& ~% R7 B
        } catch (IOException e) {: j- P: ?: E$ w6 U
            System.out.println("执行命令失败,链接conn:" + connection + ",执行的命令:" + cmd + "  " + e);
2 N2 B7 g2 j1 C" \            e.printStackTrace();
' k0 Q# E4 R) v( `: r' T# f        }, }. Y+ ]9 M% F9 t! m2 t
        return result;) N8 T9 x+ k6 l

7 H. N/ y$ J8 V" p" O, J    }2 \. A' u3 N) P$ Q3 ?2 z0 E

  D# z. q; R$ L5 e" t7 g$ K    /**
5 ?, r  P2 g! {     * 解析脚本执行返回的结果集, e7 I% M6 L' s* ^- z
     *
0 O. Q4 w  [1 H     * @param in/ A+ O  d7 Z. v6 v
     *            输入流对象
! I; l7 _& d, L' z0 N& y& H+ }     * @param charset& h4 }, y. I; h1 {, X  T
     *            编码% M9 p  c# M2 W, f& t# X
     * @return 以纯文本的格式返回
" J0 J* r. X! V( o     */% Q  O0 W/ ^( g% [% i
    private static String processStdout(InputStream in, String charset) {8 M3 r6 A( `- E. y- x* f# d9 p8 \
        InputStream stdout = new StreamGobbler(in);
! d6 j+ M3 r; [* ]; D% ^        StringBuffer buffer = new StringBuffer();
9 A4 e+ h" v& k9 d# g        ;5 ~# G( e& V7 O! x) b
        try {- K$ y8 r3 X/ s& e! I% X
            BufferedReader br = new BufferedReader(new InputStreamReader(stdout, charset));6 k6 ^6 M* I3 L$ ^: i
            String line = null;
6 ~8 Z! Z! D1 Q6 s+ ^. y            while ((line = br.readLine()) != null) {! D6 C6 ^; U/ y- b
                buffer.append(line + "\n");; O( K7 o. _& h- }0 r5 \
                System.out.println(line);
. d' V9 h8 m8 |7 D$ Z& l            }
2 f4 u: q( N4 r6 P" p! m            br.close();
5 K& |/ V" Y* a, K        } catch (UnsupportedEncodingException e) {
0 C& S+ r4 M# p/ j            System.out.println("解析脚本出错:" + e.getMessage());# v& I! m$ N3 N4 [8 b7 U, t% D
            e.printStackTrace();
% ]2 n; R+ d' ]8 \. P        } catch (IOException e) {, a; b6 w# ^( P
            System.out.println("解析脚本出错:" + e.getMessage());
0 X. Q) P8 ^& q% {$ ~            e.printStackTrace();
' z- D2 J; b- k$ B' P2 S1 t) g        }) M$ I* F) m; J5 W$ X6 t
        return buffer.toString();
$ y, R+ R1 o4 s* X+ P0 j    }/ }- ~0 j$ k# c  C# P
* {1 C6 `- f4 `' I& ?
    public static void main(String[] args) {/ ?% S/ z* E9 _( A: p; x
        long currentTimeMillis = System.currentTimeMillis();
5 K5 [+ L3 Y/ o: w$ p        String ip = "192.168.115.64";+ k2 t: {4 L/ x/ E( i* }5 i! B* z" ?
        String username = "xfraud";
+ p$ x3 s" M2 v) o% L' u        String password = "cfca1234";
, ~# E/ z* j8 A        String cmd = "uname -a";        2 x9 L9 i9 G! f- z0 {' P
        Connection connection = login(ip, username, password);5 A% @& D- k* ^, g, C6 v0 V
        String execmd = execmd(connection, cmd);
7 z. h& @. a2 p1 D        System.out.println(execmd);
2 d7 Y( d; Q3 R3 P9 H! d" _# `6 h        long currentTimeMillis1 = System.currentTimeMillis();
! |# a' J; W4 g. j        System.out.println("ganymed-ssh2方式"+(currentTimeMillis1-currentTimeMillis));+ T& }. Y3 J& R4 W! t9 \- a  h/ |
    }% Q1 F1 f2 v; O) r% o' f
}
( ?8 a3 B( _9 ~/ m. _

该用户从未签到

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
    $ N+ |+ q9 T5 \. c% W" ?ping通了吗

    8 B/ W( O  i) K1 _8 E1 @: ^  a4 q能到这一步,肯定是ping通了的吧: q; v: U! ]# t6 E1 n

    该用户从未签到

    5#
    发表于 2021-9-22 15:23 | 只看该作者
    ; f7 Q, \5 s1 `7 E1 g& f
    ll 是在 ~/.bashrc 中定义的,是 ls -alF 命令的别名(alias),“通过ganymed-ssh2连接linux”时没有执行 ~/.bashrc吧
    - J. j, X) b; _& q0 o4 P2 C1 s, a8 u
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-11-24 06:50 , Processed in 0.140625 second(s), 26 queries , Gzip On.

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

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

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