我正在使用此处提供的有用示例,使用JSch exec在远程服务器上执行Shell脚本.我可以看到脚本返回的回显,并且结尾处的退出状态为0-乍一看,一切看起来都很不错.

但是,问题在于脚本本身会调出其他脚本,而这些脚本似乎被完全忽略,只是被跳过了.

该脚本直接调用其他脚本.即脚本的第一行类似于:

script_two.sh

任何人都可以建议以任何方式克服这一问题吗?我确实开始研究“ shell”通道而不是“ exec”通道,但是在我的情况下这可能很棘手,因为在允许用户访问系统之前,服务器会提供一个表格来填写(名称,编号,为什么您已登录,等等)-我尚无法以编程方式填写并提交此表格,因此,如果可能的话,我想坚持使用exec.

我是这一切的新手,所以任何帮助/建议都将受到欢迎!

下面的代码段.就像我说的那样,这似乎可行,但是以“ scriptFileName”表示的sh脚本会在代码中调用其他sh脚本,并且这些脚本不会执行.

预先感谢您的帮助,J

JSch jsch = new JSch();

JSch.setConfig(FileTransferConstants.STRICT_HOST_KEY_CHECKING, "no");

Session session = jsch.getSession(username, hostIPAddress, port);

session.setPassword(password);

session.connect();

//create the execution channel over the session

ChannelExec channelExec = (ChannelExec)session.openChannel("exec");

channelExec.setCommand(scriptFileName);

channelExec.connect();

解决方法:

我认为脚本看起来像:

script_one.sh

script_two.sh

即该脚本依赖. (当前路径)位于PATH环境变量中,这不是默认值.

因此,为了使脚本正常工作,请使用.必须在某些启动脚本中添加到PATH中.这种添加很有可能仅针对交互式会话发生(可能是无意间错误地).可能是因为添加是在仅针对交互式会话执行(来源)的启动脚本中完成的.

JSch中的“ exec”通道(正确地)没有为会话分配伪终端(PTY).因此,与使用SSH客户端登录时相比,(可能)获得了(可能)不同的启动脚本集.基于TERM环境变量的存在/不存在,和/或在脚本中采用不同的分支.因此,环境可能不同于您与SSH客户端一起使用的交互式会话.

解决方案为(按优先顺序排列):

>更正脚本,使其不依赖具有的非默认设置.在PATH中.用显式路径调用子脚本:

./script_one.sh

./script_two.sh

>更正启动脚本以添加.无条件地连接到PATH(即使是非交互式会话).

>(不推荐)使用.setPty方法为“ exec”通道强制伪终端分配:

Channel channel=session.openChannel("exec");

((ChannelExec)channel).setPty(true);

标签:jsch,shell,ssh,java

来源: https://codeday.me/bug/20191118/2028468.html

java channelexec_java-使用SSH exec通道调用Shell脚本,但忽略对其他Shell脚本的调用相关推荐

  1. java runtime shell_java Runtime.exec()执行shell/cmd命令:常见的几种陷阱与一种完善实现...

    Runtime.getRuntime().exec()执行JVM之外的程序:常见的几种陷阱 前言 日常java开发中,有时需要通过java运行其它应用功程序,比如shell命令等.jdk的Runtim ...

  2. vba调用linux shell,调用命令提示符并通过VBA中的Shell Exec执行命令

    我试图在VBA Excel中使用Shell脚本在命令提示符上执行命令.当我在命令提示符下执行此命令时,它通过打印一个数字作为输出.但是当我在脚本中调用相同的命令时,它不会在消息框中显示此数字.调用命令 ...

  3. linux exec 脚本之家,详解Shell脚本中调用另一个Shell脚本的三种方式

    主要以下有几种方式: Command Explanation fork 新开一个子 Shell 执行,子 Shell 可以从父 Shell 继承环境变量,但是子 Shell 中的环境变量不会带回给父 ...

  4. python调用adb shell命令_Python之使用adb shell命令启动应用的方法详解

    Python之使用adb shell命令启动应用的方法详解 一直有一个心愿希望可以用Python做安卓自动化功能测试,在一步步摸索中,之前是用monkeyrunner,但是发现对于控件ID的使用非常具 ...

  5. JSch:Java Secure Channel -- java 代码实现 ssh 远程操作

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. JSch 是SSH2的一个纯Java实现. 它允许你连接到一个 sshd 服务器,使用端口转发,X1 ...

  6. sqlplus中调用shell_记一次突破反弹shell

    这是 酒仙桥六号部队 的第 106 篇文章. 全文共计1809个字,预计阅读时长6分钟. 背景 某天闲着无聊,小伙伴发来一个某网站,说只能执行命令,不能反弹shell. 测试 对着目标站点一顿测试. ...

  7. java实现连接linux,JAVA实现远道SSH连接linux并执行命令

    JAVA实现远程SSH连接linux并执行命令 package com.codeconch.ssh; import java.io.BufferedReader; import java.io.IOE ...

  8. shell实例第19讲:一个脚本中调用另一个脚本的3种方法

    在Shell脚本中调用另一个脚本(3种方法) 准备:主脚本是second.sh,主脚本中调用first.sh 方法1:exec(1)执行方式:exec /home/weibo/shell_test/s ...

  9. java ssh 和mvc_[转]JAVA三大框架SSH和MVC

    Java-SSH(MVC) JAVA三大框架的各自作用 hibernate是底层基于jdbc的orm(对象关系映射)持久化框架,即:表与类的映射,字段与属性的映射,记录与对象的映射 数据库模型 也就是 ...

最新文章

  1. linux如何卸载挂载文件
  2. 云计算究竟能帮你具体做些什么事?
  3. firefox 自定义快捷键
  4. Context类(上下文)
  5. 02 - 替换SetInput方法 VTK 6.0 迁移 (2013-06-30 16:22)
  6. Android初学第21天
  7. [haoi2011]防线修建
  8. JAVA入门级教学之(逻辑(布尔)运算符)
  9. 抽取类的#技巧#成员变量最可能
  10. C++从零实现简单深度神经网络(基于OpenCV)
  11. 集成学习的前世今生(一)
  12. Using BLAS and LAPACK from C/C++
  13. mysql in 子查询 效率慢 优化(转)
  14. Linux kernel中 __bitmap_weight函数的理解
  15. 银联网关支付 java版
  16. ubuntu安装google chrome无法启动且打不开网站
  17. MLX90614 非接触式红外测温
  18. input 时分秒输入_JavaScript实现input框获取系统默认年月日时分秒
  19. try{}里面有一个return语句,那么紧跟在这个try后的finally{}里的code会不会被执行,什么时候被执行,在return前还是后?
  20. 施密特-卡塞格林望远镜

热门文章

  1. 办公室琐事--沟通、交流
  2. 如何把 DropDownList 某一个 Item 的 Text 改成粗体 ?
  3. [CHM]果壳中的XAML(XAML in a Nutshell)
  4. 语音处理-自相关-端点
  5. C编程,随机数,排序
  6. linux 忘记密码(以centos6为例)
  7. 清华大学保研笔试题目及解答
  8. [云炬创业基础笔记]第五章创业机会评估测试11
  9. 科大星云诗社动态20210125
  10. 科大星云诗社动态20210423