You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中通过SSH.NET库运行设备端Shell脚本并传递参数?

关于SSH.NET运行远程Shell脚本及传参的解决方案

1. 完全可以用SSH.NET运行远程Shell脚本

你的现有代码已经实现了核心功能,不过可以优化写法,直接指定脚本绝对路径更可靠,同时建议捕获脚本输出方便调试:

using (var sshclient = new SshClient(ConnNfo))
{
    sshclient.Connect();
    // 直接用绝对路径调用脚本,省去cd的额外步骤
    using (var cmd = sshclient.CreateCommand("/data/scripts/funk1.sh"))
    {
        cmd.Execute();
        Console.WriteLine("执行命令: " + cmd.CommandText);
        Console.WriteLine("退出状态码: {0}", cmd.ExitStatus);
        // 捕获脚本标准输出和错误输出,方便排查问题
        Console.WriteLine("脚本输出: " + cmd.Result);
        Console.WriteLine("错误输出: " + cmd.Error);
    }
    sshclient.Disconnect();
}

2. 向脚本传入变量的三种常用方式

方式一:命令行参数直接传递

这是Shell脚本最标准的传参方式,脚本内用$1、$2依次接收参数:

// 示例:传递两个参数,注意特殊字符用双引号包裹
string param1 = "带有空格的参数";
string param2 = "/tmp/test/path";
using (var cmd = sshclient.CreateCommand($"/data/scripts/funk1.sh \"{param1}\" {param2}"))
{
    cmd.Execute();
    // 后续处理逻辑
}

对应funk1.sh的使用示例:

#!/bin/bash
echo "第一个参数: $1"
echo "第二个参数: $2"

方式二:设置环境变量

如果脚本依赖环境变量,可在执行脚本前导出变量:

string envVarValue = "prod_env";
// 先导出环境变量,再执行脚本
using (var cmd = sshclient.CreateCommand($"export RUN_ENV={envVarValue} && /data/scripts/funk1.sh"))
{
    cmd.Execute();
}

脚本内直接调用环境变量:

#!/bin/bash
echo "运行环境: $RUN_ENV"

方式三:标准输入传递(适合交互型脚本)

如果脚本需要交互式输入(比如用read命令获取内容),可以用ShellStream替代CreateCommand实现交互:

using (var sshclient = new SshClient(ConnNfo))
{
    sshclient.Connect();
    // 创建Shell流模拟终端交互
    using (var shellStream = sshclient.CreateShellStream("xterm", 80, 24, 800, 600, 1024))
    {
        // 发送执行脚本的命令
        shellStream.WriteLine("/data/scripts/funk1.sh");
        // 简单等待脚本请求输入(实际可监听输出判断时机)
        Thread.Sleep(500);
        // 发送需要输入的变量值
        shellStream.WriteLine("交互式输入内容");
        // 读取脚本输出
        string output = shellStream.Read();
        Console.WriteLine(output);
    }
    sshclient.Disconnect();
}

注意事项

  • 传递含空格、引号的参数时,必须用双引号包裹,避免Shell解析出错。
  • 确保远程脚本有可执行权限,可提前执行chmod +x /data/scripts/funk1.sh设置。
  • 优先使用命令行参数或环境变量传递变量,交互式方式仅用于必须手动输入的场景。

内容的提问来源于stack exchange,提问作者3izmanique

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 05:15:33