Renci SSH.没有返回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"时,它成功返回结果。

是否有另一种获取结果字符串的方法?或者是opmnctl命令OPMN Oracle引擎不支持Renci?

如果opmnctl由于某种原因失败,它可能在错误输出上产生了一条消息。

所以也检查cmd.Errorcmd.ExitStatus


注意.RunCommand方法使用非交互式终端,这可能会导致某些命令出现问题。

特别是当非交互式终端被用作执行不同的启动脚本集和/或脚本中的不同分支(基于TERM环境变量的值)时,可以设置不同的环境。

在您的情况下,在非交互式终端上,opmnctl似乎不包括在PATH中。

当您在SSH客户端强制使用非交互式终端时,您应该会得到相同的问题。

例如:

  • 使用OpenSSH命令行ssh客户端,使用-T开关(Disable pseudo-tty allocation)

    ssh -T user@host opmnctl status -l
    
  • 与PLink相同(来自PuTTY包)

    plink.exe -T user@host opmnctl status -l
    

(无论如何,在命令行上指定command时,-T应该是隐式的)


解决方案是:

  • 修复你的启动脚本,包括opmnctlPATH,即使在非交互式终端(首选)
  • 在命令中使用opmnctl的完整路径
  • 修改SSH。. NET代码在.RunCommand实现中发出SendPseudoTerminalRequest请求(我没有测试这个)。

相关内容

  • 没有找到相关文章

最新更新