【问题标题】:Error "MyVar environment variable is not set" when executing shell command using SSH.NET使用 SSH.NET 执行 shell 命令时出现“未设置 MyVar 环境变量”错误
【发布时间】:2015-10-20 14:35:35
【问题描述】:

我收到一个错误:

MyVar 环境变量未设置

使用 SSH.NET、C# 执行 shell 命令时。我可以从 PuTTY 执行相同的命令,一切正常。

我的代码是

var client = new SshClient("myhost.mydomain", "user", "password");
client.Connect();
var cmd = "/path1/script.sh MyArgument";
var sshCommand = client.RunCommand(cmd);
var output = sshCommand.Result;
Console.WriteLine(output);
client.Disconnect();

【问题讨论】:

    标签: c# shell ssh ssh.net


    【解决方案1】:

    当您启动非交互式会话(使用RunCommand)时,会运行一组不同的启动脚本和/或采用脚本中的不同路径(基于TTY 变量)。

    所以您的环境可能(很可能确实)不同。特别是MyVar没有设置。


    解决方案是:

    • 修复您的启动脚本以在非交互式终端上设置 MyVar(首选)
    • 修改 SSH.NET 代码以在 .RunCommand 实现中发出 SendPseudoTerminalRequest 请求(我没有对此进行测试)。有关示例,请参阅 Shell.Start()

    【讨论】:

    • Martin,我没有对 shell 脚本的写入权限。我尝试使用 client.CreateShell 创建 shell,但我无法读取 outstream 内容。代码如下。 ` var shell = client.CreateShell(inStream, outStream, xOutStream); shell.Start(); if (shell.IsStarted) { outString = new StreamReader(outStream).ReadToEnd();外壳.停止(); }`
    • 这是问答网站,不是论坛。我相信我已经回答了你的问题。如果对您有帮助,请考虑 accepting and/or upvoting it。并针对您的新问题发布一个新问题。
    • 马丁,这个问题还没有解决。我正在尝试 CreateShell 选项以查看它是否有效,但我不能,因为外流文本是空的。所以需要检查如何解决这个问题。也在尝试替代方案,因为要求是使用 c# 执行 shell 命令并获取输出文本。
    • 但是您的(原始)代码没有问题。是服务器环境坏了。您是否至少具有对启动脚本的读取权限,以了解为什么未在非交互式会话中设置 MyVar?或者您知道变量应该具有什么值以便您可以尝试手动设置它?
    • 我能够解决 - 使用 PLink 命令行 exe 作为plink -batch,后跟凭据和命令/path1/script.sh MyArgument。它运行良好。如果没有其他工作,我将继续采用这种方法。但我仍然更喜欢 CreateShell 选项。您是否有任何示例代码可以帮助我创建 shell 并运行命令并将输出流作为文本读取?
    猜你喜欢
    • 1970-01-01
    • 2014-06-01
    • 1970-01-01
    • 2019-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-23
    • 1970-01-01
    相关资源
    最近更新 更多