c# - Solaris 不使用 Renci.SshNet 通过远程 session 返回某些命令的输出

标签 c# linux ssh solaris

我正在使用 .NET 库 Renci.SshNet 连接到远程 Solaris 机器(它是 ESXi 上的 VM)。它连接良好。

我使用以下方法执行命令并获取标准输出。这在任何 Linux 机器和几乎所有 Solaris 上的命令上都能正常工作(除了少数 - 这是问题所在)

outstring = sshClient.RunCommand(command).Execute();

例如当 command = "cat/etc/release | grep Solaris" - 它工作正常。 但是,当 command = "smbios -t SMB_TYPE_SYSTEM" - 它不返回任何内容。我尝试将它重定向到一个文件。文件已创建 - 但上面没有任何内容。

我使用 PuTTY 连接到系统并运行命令 - 它运行完美并提供了所需的输出。

我对这种行为感到困惑。我正在使用具有 root privilloginto 登录权限的用户名。因此排除了特权(无论如何,同一用户在 PuTTY 中获得输出)。

我想知道 Solaris(我运行的是 11.3 版)是否有任何设置或限制不允许 smbios 命令通过远程连接像这样运行?或者是别的东西?任何指导都将非常有帮助。如果需要任何进一步的信息,请告诉我。

最佳答案

嗯,原来是Path设置的问题。当您通过 Putty 登录时,将设置定义的 $PATH。因此 smbios 从 Putty 运行。

但是在 SSH session 中,不会应用 $PATH 环境变量。所以它无法找到要运行的 smbios。如果您提供 smbios 的完整路径 - 例如/usr/sbin/smbios,它可以在 Renci.SshNet 上正常执行。

关于c# - Solaris 不使用 Renci.SshNet 通过远程 session 返回某些命令的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39697624/

相关文章:

c# - 如何在不将其写入 C# 中的字符串文字的情况下引用标识符?

c# - 是否有可能找出字符串列表中的公共(public)部分

c# - ElasticSearch查询不起作用

linux - 有没有办法告诉 sed 忽略符号链接(symbolic link)?

linux - 为什么我会优先使用 "service sshd reload"而不是 "service sshd restart"?

linux - 为什么 Linux 不使用纤程而不是抢占式多任务处理?

linux - SSH、 screen 和 XDISPLAY

java - Ganymed SSH2,创建文件并将文件写入特定目录

mysql - laravel mysql 连接数据库失败

c# - 没有无参数构造函数的类型的 Activator.CreateInstance(Type)