使用 SSH.NET SshClient.RunCommand 执行的命令 (.4gl) 失败,并显示“没有此类文件或目录”

2023-12-08

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

如果我正常运行该脚本,它工作正常,在 Informix DB 上正常工作。

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

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

fglgo:加载共享库时出错:libiffgisql.so:无法打开共享对象文件:没有这样的文件或目录
文件加载结束: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 得到的错误。
为什么会发生这种情况?谁可以让脚本正确执行?


The SshClient.RunCommand内部使用 SSH“exec”通道。默认情况下,它(正确地)不会为会话分配伪终端 (PTY)。因此,(可能)会获取一组不同的启动脚本。和/或根据不存在/存在,在脚本中采取不同的分支TERM环境变量。因此,环境可能与您使用 SSH 客户端的交互式会话不同。

所以,就你的情况而言,PATH可能设置不同;因此无法找到共享对象。

要验证这是否是根本原因,请在 SSH 客户端中禁用伪终端分配。例如在 PuTTY 中,它是连接 > SSH > TTY > 不分配伪终端。然后,前往连接 > SSH > 远程命令并输入您的g4l命令。查看会话 > 退出时关闭窗口 > 从不并打开会话。你应该得到同样的“没有这样的文件或目录” error.


解决此问题的方法(按优先顺序排列):

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

  2. 修复您的启动脚本以设置PATH对于交互式和非交互式会话都是相同的。

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

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

    尽管 SSH.NET 不支持这一点。您必须修改其代码问题SendPseudoTerminalRequest请求在.RunCommand实现(我没有测试这个)。

    您还可以尝试使用“shell”通道.CreateShell方法。对于它,SSH.NET确实支持伪终端分配。

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


类似问题请参见

  • Renci SSH.NET - 没有为 opmnctl 返回结果字符串
  • 当使用 JSch 通过 Java 执行时,某些 Unix 命令会失败并显示“...未找到”
  • 使用 JSch 执行的命令的行为与 SSH 终端不同(绕过确认提示消息“yes/”no”)
  • JSch:有没有办法将用户环境变量公开给“exec”通道?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 SSH.NET SshClient.RunCommand 执行的命令 (.4gl) 失败,并显示“没有此类文件或目录” 的相关文章

  • ASP.NET Core Serilog 未将属性推送到其自定义列

    我有这个设置appsettings json对于我的 Serilog 安装 Serilog MinimumLevel Information Enrich LogUserName Override Microsoft Critical Wr
  • 当我使用“control-c”关闭发送对等方的套接字时,为什么接收对等方的套接字不断接收“”

    我是套接字编程的新手 我知道使用 control c 关闭套接字是一个坏习惯 但是为什么在我使用 control c 关闭发送进程后 接收方上的套接字不断接收 在 control c 退出进程后 发送方的套接字不应该关闭吗 谢谢 我知道使用
  • 从父类调用子类方法

    a doStuff 方法是否可以在不编辑 A 类的情况下打印 B did stuff 如果是这样 我该怎么做 class Program static void Main string args A a new A B b new B a
  • 使闭包捕获的变量变得易失性

    闭包捕获的变量如何与不同线程交互 在下面的示例代码中 我想将totalEvents 声明为易失性的 但C 不允许这样做 是的 我知道这是错误的代码 这只是一个例子 private void WaitFor10Events volatile
  • 实时服务器上的 woff 字体 MIME 类型错误

    我有一个 asp net MVC 4 网站 我在其中使用 woff 字体 在 VS IIS 上运行时一切正常 然而 当我将 pate 上传到 1and1 托管 实时服务器 时 我得到以下信息 网络错误 404 未找到 http www co
  • 将布尔参数传递给 SQL Server 存储过程

    我早些时候问过这个问题 我以为我找到了问题所在 但我没有 我在将布尔参数传递给存储过程时遇到问题 这是我的 C 代码 public bool upload false protected void showDate object sende
  • 为什么#pragma optimize("", off)

    我正在审查一个 C MFC 项目 在某些文件的开头有这样一行 pragma optimize off 我知道这会关闭所有以下功能的优化 但这样做的动机通常是什么 我专门使用它来在一组特定代码中获得更好的调试信息 并在优化的情况下编译应用程序
  • 指针问题(仅在发布版本中)

    不确定如何描述这一点 但我在这里 由于某种原因 当尝试创建我的游戏的发布版本进行测试时 它的敌人创建方面不起作用 Enemies e level1 3 e level1 0 Enemies sdlLib 500 2 3 128 250 32
  • 如何将图像和 POST 数据上传到 Azure 移动服务 ApiController 终结点?

    我正在尝试上传图片and POST表单数据 尽管理想情况下我希望它是json 到我的端点Azure 移动服务应用 我有ApiController method HttpPost Route api upload databaseId sea
  • 将目录压缩为单个文件的方法有哪些

    不知道怎么问 所以我会解释一下情况 我需要存储一些压缩文件 最初的想法是创建一个文件夹并存储所需数量的压缩文件 并创建一个文件来保存有关每个压缩文件的数据 但是 我不被允许创建许多文件 只能有一个 我决定创建一个压缩文件 其中包含有关进一步
  • 如果使用 SingleOrDefault() 并在数字列表中搜索不在列表中的数字,如何返回 null?

    使用查询正数列表时SingleOrDefault 当在列表中找不到数字时 如何返回 null 或像 1 这样的自定义值 而不是类型的默认值 在本例中为 0 你可以使用 var first theIntegers Cast
  • WPF TabControl,用C#代码更改TabItem的背景颜色

    嗨 我认为这是一个初学者的问题 我搜索了所有相关问题 但所有这些都由 xaml 回答 但是 我需要的是后台代码 我有一个 TabControl 我需要设置其项目的背景颜色 我需要在选择 取消选择和悬停时为项目设置不同的颜色 非常感谢你的帮助
  • 指针减法混乱

    当我们从另一个指针中减去一个指针时 差值不等于它们相距多少字节 而是等于它们相距多少个整数 如果指向整数 为什么这样 这个想法是你指向内存块 06 07 08 09 10 11 mem 18 24 17 53 7 14 data 如果你有i
  • 使用 System.Text.Json 即时格式化 JSON 流

    我有一个未缩进的 Json 字符串 例如 hash 123 id 456 我想缩进字符串并将其序列化为 JSON 文件 天真地 我可以使用缩进字符串Newtonsoft如下 using Newtonsoft Json Linq JToken
  • vector 超出范围后不清除内存

    我遇到了以下问题 我不确定我是否错了或者它是一个非常奇怪的错误 我填充了一个巨大的字符串数组 并希望在某个点将其清除 这是一个最小的例子 include
  • 如何衡量两个字符串之间的相似度? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 给定两个字符串text1 and text2 public SOMEUSABLERETURNTYPE Compare string t
  • Qt表格小部件,删除行的按钮

    我有一个 QTableWidget 对于所有行 我将一列的 setCellWidget 设置为按钮 我想将此按钮连接到删除该行的函数 我尝试了这段代码 它不起作用 因为如果我只是单击按钮 我不会将当前行设置为按钮的行 ui gt table
  • 无法使用 wget 在 CentOS 机器上安装 oracle jdk

    我想在CentOS上安装oracle java jdk 8 我无法安装 java jdk 因为当我尝试使用命令安装 java jdk 时 root ADARSH PROD1 wget no cookies no check certific
  • 如何在 VBA 中声明接受 XlfOper (LPXLOPER) 类型参数的函数?

    我在之前的回答里发现了问题 https stackoverflow com q 19325258 159684一种无需注册即可调用 C xll 中定义的函数的方法 我之前使用 XLW 提供的注册基础结构 并且使用 XlfOper 类型在 V
  • x86 上未对齐的指针

    有人可以提供一个示例 将指针从一种类型转换为另一种类型由于未对齐而失败吗 在评论中这个答案 https stackoverflow com questions 544928 reading integer size bytes from a

随机推荐

  • 降低 OpenCV 中的图像分辨率

    我正在使用 OpenCV 从 A4Tech 相机捕获图像 当我尝试降低图像分辨率时 图像断言失败 CvCapture camera cvCreateCameraCapture 1 0 is index of Laptop integrate
  • PHP:格式化时间 Stackoverflow 或 Apple Mail 风格

    有这个php net 文档中的非常好的功能使您能够以 Facebook 风格的方式格式化时间 例如 2 minutes ago 4 weeks ago or 3 years ago 不过 我更喜欢 Stackoverflow 和 Apple
  • Python 深度压缩

    我正在尝试编写一个像 zip 这样的函数 我不擅长解释我的意思 所以我只会显示我正在尝试做的事情的 代码 a 1 2 3 4 5 b a zip a b 1 1 2 2 3 3 4 5 4 5 myzip a b 1 1 2 2 3 3 4
  • Django 使用 postgres 进行测试 - 重置序列

    到目前为止 开发和测试已经在 SQLite 上完成 而生产则在 Postgres 上完成 现在一切都需要在 Postgres 上运行 并且大量测试失败了 原因是 每个测试的 ID 不是以 1 开头 而是在测试之间继续 解决此问题的一种方法是
  • Powershell:根据创建日期将文件移动到文件夹

    我不是编码员 但我仍然尝试调整此处找到的 PS 脚本 但仍然无法获得我想要的行为 对我来说最困难的部分是 2 位数的日要求 dd 经过几次菜鸟尝试后 我需要一些帮助 我有一个包含数百张 JPG 的文件夹 我根据拍摄日期手动将这些 JPG 分
  • 获取 jQuery 和/或 DOM 对象的 HTML 字符串

    我想我已经读完了全文jQuery API 文档并在调试器中查看 jQuery 对象和简单的 DOM 元素 以检查它们在运行时实际拥有的方法 但对于我来说 我找不到一种方法来获取表示 jQuery 对象内容的 html 字符串或一个 DOM
  • Java - 滚动到 JTextArea 内的特定文本

    我正在尝试在我正在编写的当前程序中实现一个功能 并且我想学习如何向下滚动到 JTextArea 中的特定文本 例如 假设我有以下内容 JTextArea area new JTextArea someReallyLongString som
  • 如何按升序打印奇数? [复制]

    这个问题在这里已经有答案了 我需要按升序打印一系列奇数 我只能按降序解决它 num int input print Type any integer count 1 while count lt num num 1 if num 2 0 p
  • 通过异步 JavaScript (Mocha) 进行循环测试

    我正在尝试使用 Mocha 测试异步 JavaScript 但在循环异步填充数组时遇到一些问题 我的目标是创建 N arr length 测试 数组的每个元素一个 可能我缺少一些关于摩卡语义的东西 到目前为止 这是我的 非工作的 简化代码
  • 如何从 wxPython 中的 wx.TextCtrl 控件获取滚动位置/范围

    我有一个小型日志记录应用程序 用 wxPython 编写 它从我们正在开发的一些套件接收数据 并且我想在滚动窗口中显示文本 就目前情况而言 我使用 wx TextCtrl 进行文本显示 但滚动行为存在一些问题 基本上 我希望如果滚动条位于窗
  • BinaryReader ReadString指定长度?

    我正在开发一个解析器来接收 UDP 信息 解析它并存储它 为此 我正在使用BinaryReader因为它主要是二进制信息 但其中一些将是字符串 MSDN 说为了ReadString 功能 从当前流中读取字符串 该字符串的前缀为 长度 一次编
  • Android:从java脚本到java的回调函数

    我创建了一个应用程序 在其中使用 webview 并加载一个简单的静态 html 页面 我正在从活动调用 java 脚本函数 但无法从 java 脚本调用函数 我尝试了一些链接 但没有成功 Javascript回调函数传递给Android
  • 在 Quartz.Net 中为 BiWeekly 作业配置 CronString

    如何为以下作业配置 Quartz Net 作业调度程序的 CronString 作业应在周一中午 12 00 在 BiWeekly 上运行 即它应该在每个星期一运行 但中间会跳过一周 例子 1st Run gt 19 Nov 2012 Mo
  • 执行 JSF 导航时,不会调用映射到转发调度程序的过滤器

    我正在尝试使用 Tomcat 7 编写一个带有登录系统的简单 JSF Web 应用程序 我有两个页面 index xhtml 和 restricted welcome xhtml restricted 下面的页面只能由登录的用户访问 直接浏
  • JAVA:是否可以在循环外使用已在循环内初始化的变量?

    我是一名新程序员 试图通过制作游戏来练习 我希望玩家能够设置自己的名字 并回答 是 或 否 这个名字是否正确 我通过使用 while 循环来做到这一点 但是 由于该名称是在循环内部初始化的 因此我无法在外部使用它 我想知道是否有办法这样做
  • 如何针对不连续的元素中断 XSLT for-each 循环?

    我有一个具有以下结构的结构化 XML
  • HTML Canvas 剪辑和 putImageData

    我有一个画布 背景中有一个大图像 前面有一个较小的圆形图像 我通过像这样使用剪辑实现了这种圆形图像效果 ctx save ctx beginPath ctx arc x y r 0 Math PI 2 true ctx closePath
  • “错误:在结束后写入”与 csv-write-stream

    我确信这是对流工作方式的根本误解 但我正在用头撞墙 我有一些 json 格式的传感器数据 我想使用 csv write stream 包将其附加到 csv 文件中 数据作为 post 请求发送到节点服务器 目的是将其附加到 csv 文件 它
  • WPF 根据不同的数据库表向 DataGrid 或列表视图添加组合框

    我想添加一个ComboBox to a DataGrid or ListView但组合框的底层ViewSource将通过每行的数据进行过滤DataRowView of the DataGrid Example 公司列表和有关公司的一些信息显
  • 使用 SSH.NET SshClient.RunCommand 执行的命令 (.4gl) 失败,并显示“没有此类文件或目录”

    我有一个 Web 服务 它使用 SSH NET 调用 Unix 机器上的 shell 脚本 如果我正常运行该脚本 它工作正常 在 Informix DB 上正常工作 只是一些背景 我调用一个执行的脚本 4gl 不能将此显示为其业务知识 当我