使用 SSH exec 通道调用 shell 脚本,但它会忽略对其他 shell 脚本的调用

2023-12-09

我正在设法使用 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

IE。该脚本依赖于.(当前路径)位于PATH环境变量,什么都不是默认的。

因此,为了使脚本能够正常工作,.必须添加到PATH在一些启动脚本中。很可能仅在交互式会话中添加(可能是无意的错误)。可能是因为添加是在仅针对交互式会话执行(来源)的启动脚本中完成的。

JSch 中的“exec”通道(理所当然)不会为会话分配伪终端 (PTY)。因此,与使用 SSH 客户端登录时相比,(可能)会获取一组不同的启动脚本。和/或根据不存在/存在,在脚本中采取不同的分支TERM环境变量。因此,环境可能与您使用 SSH 客户端的交互式会话不同。


解决方案是(按优先顺序):

  • 更正脚本,使其不依赖于非默认设置. in PATH。使用显式路径调用子脚本:

    ./script_one.sh
    ./script_two.sh
    
  • 更正启动脚本以添加. to the PATH无条件(即使对于非交互式会话)。

  • (不推荐)使用以下命令强制为“exec”通道分配伪终端.setPty method:

    Channel channel=session.openChannel("exec");
    ((ChannelExec)channel).setPty(true);
    

    使用伪终端自动执行命令可能会给您带来令人讨厌的副作用。参见示例有没有一种简单的方法可以消除使用 Python 的 Paramiko 库进行 SSH 并从远程计算机的 CLI 获取输出时出现的垃圾值?


另请参阅相关问题使用 JSch setCommand 执行时,带有源选项的 Shell ping 命令失败.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 SSH exec 通道调用 shell 脚本,但它会忽略对其他 shell 脚本的调用 的相关文章

  • 使用 JPA Criteria API 进行分页的总行数

    我正在系统中为实体实现 高级搜索 功能 以便用户可以使用该实体的属性上的多个条件 eq ne gt lt 等 来搜索该实体 我正在使用 JPA 的 Criteria API 动态生成 Criteria 查询 然后使用setFirstResu
  • JAVA - Xuggler - 组合 MP3 音频文件和 MP4 电影时播放视频

    使用 JAVA 和 Xuggler 以下代码组合 MP3 音频文件和 MP4 电影文件并输出组合的 mp4 文件 我希望在合并音频和视频文件时应自动播放输出视频文件 String inputVideoFilePath in mp4 Stri
  • 运行具有外部依赖项的 Scala 脚本

    我在 Users joe scala lib 下有以下 jar commons codec 1 4 jar httpclient 4 1 1 jar httpcore 4 1 jar commons logging 1 1 1 jar ht
  • 我需要什么库才能在 Java 中访问这个 com.sun.image.codec.jpeg?

    我正在用java创建一个图像水印程序 并导入了以下内容 import com sun image codec jpeg JPEGCodec import com sun image codec jpeg JPEGEncodeParam im
  • 使用 AES SecretKey 的 Java KeyStore setEntry()

    我目前正在 Java 中开发一个密钥处理类 特别是使用 KeyStore 我正在尝试使用 AES 实例生成 SecretKey 然后使用 setEntry 方法将其放入 KeyStore 中 我已经包含了代码的相关部分 The KS Obj
  • Java 文件上传速度非常慢

    我构建了一个小型服务 它从 Android 设备接收图像并将其保存到 Amazon S3 存储桶中 代码非常简单 但是速度非常慢 事情是这样的 public synchronized static Response postCommentP
  • Calendar.getInstance(TimeZone.getTimeZone("UTC")) 不返回 UTC 时间

    我对得到的结果真的很困惑Calendar getInstance TimeZone getTimeZone UTC 方法调用 它返回 IST 时间 这是我使用的代码 Calendar cal Two Calendar getInstance
  • 如何使用 Maven 打包并运行具有依赖项的简单命令行应用程序?

    我对 java 和 Maven 都是全新的 所以这可能非常简单 如果我遵循maven2hello world此处的说明 http maven apache org guides getting started maven in Five m
  • 很好地处理数据库约束错误

    再一次 它应该很简单 我的任务是在我们的应用程序的域对象中放置一个具有唯一约束的特定字段 这本身并不是一个很大的挑战 我刚刚做了以下事情 public class Location more fields Column unique tru
  • 在游戏视图下添加 admob

    我一直试图将 admob 放在我的游戏视图下 这是我的代码 public class HoodStarGame extends AndroidApplication Override public void onCreate Bundle
  • Javafx过滤表视图

    我正在尝试使用文本字段来过滤表视图 我想要一个文本字段 txtSearch 来搜索 nhs 号码 名字 姓氏 和 分类类别 我尝试过在线实施各种解决方案 但没有运气 我对这一切仍然很陌生 所以如果问得不好 我深表歉意 任何帮助将不胜感激 我
  • Jersey 客户端请求中未设置 Content-Length-Header

    我正在使用 Jersey Client 访问网络服务 如下所示 response r accept MediaType TEXT PLAIN TYPE header content length 0 post String class 其中
  • 如何在JSTL中调​​用java方法? [复制]

    这个问题在这里已经有答案了 这可能是重复的问题 我只想调用不是 getter 或 setter 方法的方法例如 xyz 类的 makeCall someObj stringvalue Java类 Class XYZ public Strin
  • java.lang.NumberFormatException: Invalid int: "3546504756",这个错误是什么意思?

    我正在创建一个 Android 应用程序 并且正在从文本文件中读取一些坐标 我在用着Integer parseInt xCoordinateStringFromFile 将 X 坐标转换为整数 Y 坐标的转换方法相同 当我运行该应用程序时
  • 测试弱引用

    在 Java 中测试弱引用的正确方法是什么 我最初的想法是执行以下操作 public class WeakReferenceTest public class Target private String value public Targe
  • 游戏内的java.awt.Robot?

    我正在尝试使用下面的代码来模拟击键 当我打开记事本时 它工作正常 但当我打开我想使用它的游戏时 它没有执行任何操作 所以按键似乎不起作用 我尝试模拟鼠标移动和点击 这些动作确实有效 有谁知道如何解决这个问题 我发现这个问题 如何在游戏中使用
  • 如何制作 Bash 脚本来查找项目中未使用的图像?

    如何制作一个 Bash shell 脚本 它可以识别所有 jpg gif 和 png 文件 然后识别文件夹中任何文本文件中哪些文件未通过 url href 或 src 链接 这就是我开始的 但我最终得到了与我想要的相反的结果 我不想知道引用
  • Java中的Object类是什么?

    什么是或什么类型private Object obj Object http download oracle com javase 6 docs api java lang Object html是Java继承层次结构中每个类的最终祖先 从
  • 为什么这个作业不起作用?

    我有课Results which extends ArrayList
  • 调整添加的绘制组件的大小和奇怪的摆动行为

    这个问题困扰了我好几天 我正在制作一个特殊的绘画程序 我制作了一个 JPanel 并添加了使用 Paint 方法绘制的自定义 jComponent 问题是 每当我调整窗口大小时 所有添加的组件都会 消失 或者只是不绘制 因此我最终会得到一个

随机推荐