gpt4 book ai didi

c# - 使用 SSH.NET SshClient.RunCommand 执行的命令 (.4gl) 失败,返回 "No such file or directory"

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:06:09 25 4
gpt4 key购买 nike

我有一个 Web 服务,它使用 SSH.NET 在 Unix 机器上调用 shell 脚本。

如果我正常运行脚本,它工作正常,在 Informix 数据库上正常工作。

只是一些背景:
我调用了一个执行 .4gl 的脚本(不能将其显示为它的业务知识)。

当我使用 SSH.NET 执行 g4l 时,它在日志中返回以下错误:

fglgo: error while loading shared libraries: libiffgisql.so: cannot open shared object file: No such file or directory
file_load ended: 2017-09-21 15:37:01

执行 SSH.NET 脚本的 C# 代码

sshclients = new SshClient(p, 22, username, password);
sshclients.Connect();
sshclients.KeepAliveInterval = new TimeSpan(0, 0, 1);
sshclients.RunCommand("sh " + Script_dir);

我添加了 KeepAliveInterval,看看是否有帮助。

我的问题是我从 Unix/4gl 得到的错误。
为什么会发生这种情况,我可以让谁正确执行脚本?

最佳答案

SshClient.RunCommand 在内部使用 SSH“exec” channel 。默认情况下,它(理所当然地)不会为 session 分配伪终端 (PTY)。因此,(可能)获得了一组不同的启动脚本。和/或根据 TERM 环境变量的存在/不存在,采用脚本中的不同分支。因此,环境可能不同于您使用 SSH 客户端的交互式 session 。

因此,在您的情况下,PATH 的设置可能不同;因此无法找到共享对象。

要验证这是根本原因,请在 SSH 客户端中禁用伪终端分配。例如在 PuTTY 中,它是 Connection > SSH > TTY > Don't allocate a pseudo terminal。然后,转到连接> SSH > 远程命令 并输入您的g4l 命令。选中Session > Close window on exit > Never 并打开 session 。您应该得到相同的“没有这样的文件或目录”错误。


按优先顺序解决此问题的方法:

  1. 修复脚本不依赖于特定环境。

  2. 修复您的启动脚本,为交互式和非交互式 session 设置相同的 PATH

  3. 如果命令本身依赖于特定的环境设置并且您无法修复启动脚本,则可以在命令本身中更改环境。其语法取决于远程系统和/或 shell。在常见的 *nix 系统中,这是可行的:

     sshclients.RunCommand("PATH=\"$PATH;/path/to/g4l\" && sh ...");
  4. 另一种(不推荐)方法是强制为“exec” channel 分配伪终端。

    虽然 SSH.NET 不支持这个。您将不得不在 .RunCommand 实现中修改其代码问题 SendPseudoTerminalRequest 请求(我没有对此进行测试)。

    您还可以尝试使用 .CreateShell 方法使用“shell” channel 。为此,SSH.NET 确实支持伪终端分配。

    不过,使用伪终端自动执行命令可能会给您带来严重的副作用。参见示例 Is there a simple way to get rid of junk values that come when you SSH using Python's Paramiko library and fetch output from CLI of a remote machine?


类似问题见

关于c# - 使用 SSH.NET SshClient.RunCommand 执行的命令 (.4gl) 失败,返回 "No such file or directory",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46350481/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com