Renci SSH.NET - 没有为 opmnctl 返回结果字符串
Renci SSH.NET - no result string returned for opmnctl
我正在尝试通过 VB.NET 从命令中获取结果,它返回空字符串,如下面的代码所示:
Dim connInfo As New Renci.SshNet.PasswordConnectionInfo(serverip, user, pass)
Dim sshClient As New Renci.SshNet.SshClient(connInfo)
Dim cmd As Renci.SshNet.SshCommand
Using sshClient
sshClient.Connect()
cmd = sshClient.RunCommand("opmnctl status -l")
MsgBox(cmd.Result)
sshClient.Disconnect()
End Using
而当我尝试使用像 "ls -ltr"
这样的普通命令时,它 returns 结果成功。
是否有另一种获取结果字符串的方法?或者 Renci 不支持 OPMN Oracle 引擎的 opmnctl
命令?任何帮助将不胜感激。
如果 opmnctl
由于某种原因失败,它可能会在错误输出中生成一条消息。
所以还要检查 cmd.Error
和 cmd.ExitStatus
。
请注意,.RunCommand
方法使用非交互式终端,这可能会导致某些命令出现问题。
特别是可以设置不同的环境,当非交互式终端被用作执行一组不同的启动脚本时and/or脚本中的不同分支被采用(基于[的值=16=] 环境变量).
在您的情况下,opmnctl
似乎未包含在非交互式终端的 PATH
中。
在 SSH 客户端中强制使用非交互式终端时,您应该会遇到同样的问题。
例如:
使用 OpenSSH 命令行 ssh
客户端,使用 -T
开关(禁用伪 tty 分配)。
ssh -T user@host opmnctl status -l
与 PLink 相同(来自 PuTTY 包)
plink.exe -T user@host opmnctl status -l
(无论如何在命令行上指定命令时,-T
应该是隐式的)
解决方案是:
- 修复您的启动脚本以包含
opmnctl
到 PATH
,即使在非交互式终端上也是如此(首选)
- 在命令中使用
opmnctl
的完整路径。
- 修改 SSH.NET 代码以在
.RunCommand
实现中发出 SendPseudoTerminalRequest
请求(我没有对此进行测试)。
我正在尝试通过 VB.NET 从命令中获取结果,它返回空字符串,如下面的代码所示:
Dim connInfo As New Renci.SshNet.PasswordConnectionInfo(serverip, user, pass)
Dim sshClient As New Renci.SshNet.SshClient(connInfo)
Dim cmd As Renci.SshNet.SshCommand
Using sshClient
sshClient.Connect()
cmd = sshClient.RunCommand("opmnctl status -l")
MsgBox(cmd.Result)
sshClient.Disconnect()
End Using
而当我尝试使用像 "ls -ltr"
这样的普通命令时,它 returns 结果成功。
是否有另一种获取结果字符串的方法?或者 Renci 不支持 OPMN Oracle 引擎的 opmnctl
命令?任何帮助将不胜感激。
如果 opmnctl
由于某种原因失败,它可能会在错误输出中生成一条消息。
所以还要检查 cmd.Error
和 cmd.ExitStatus
。
请注意,.RunCommand
方法使用非交互式终端,这可能会导致某些命令出现问题。
特别是可以设置不同的环境,当非交互式终端被用作执行一组不同的启动脚本时and/or脚本中的不同分支被采用(基于[的值=16=] 环境变量).
在您的情况下,opmnctl
似乎未包含在非交互式终端的 PATH
中。
在 SSH 客户端中强制使用非交互式终端时,您应该会遇到同样的问题。
例如:
使用 OpenSSH 命令行
ssh
客户端,使用-T
开关(禁用伪 tty 分配)。ssh -T user@host opmnctl status -l
与 PLink 相同(来自 PuTTY 包)
plink.exe -T user@host opmnctl status -l
(无论如何在命令行上指定命令时,-T
应该是隐式的)
解决方案是:
- 修复您的启动脚本以包含
opmnctl
到PATH
,即使在非交互式终端上也是如此(首选) - 在命令中使用
opmnctl
的完整路径。 - 修改 SSH.NET 代码以在
.RunCommand
实现中发出SendPseudoTerminalRequest
请求(我没有对此进行测试)。