Providing input/subcommands to a command (cli) executed with SSH.NET SshClient.RunCommand

前端 未结 1 1619
谎友^
谎友^ 2020-11-28 16:16

I created a program using Renci SSH.NET library. Its sending all the commands and reading the result normally. However, when I send the command below:

client         


        
相关标签:
1条回答
  • 2020-11-28 16:43

    AFAIK, cli is a kind of a shell/interactive program. So I assume you have tried to do something like:

    client.RunCommand("cli");
    client.RunCommand("some cli subcommand");
    

    That's wrong. cli will keep waiting for subcommands and never exit, until you explicitly close it with a respective command (like exit). And after it exits, the server will try to execute the cli subcommand as a separate top-level command, failing too.


    You have to feed the "cli subcommand" to the input of the cli command. But SSH.NET unfortunately does not support providing an input with the SshClient.RunCommand/SshClient.CreateCommand interface.


    There are two solutions:

    • Use the appropriate syntax of the server's shell to generate the input on the server, like:

        client.RunCommand("echo \"cli subcommand\" | cli");
      
    • Or use a shell session (what is otherwise a not recommended approach for automating a command execution).

      Use SshClient.CreateShellStream or SshClient.CreateShell and send the commands to its input:

        "cli\n" + "cli subcommand\n"
      

      For a sample code see Providing subcommands to a command (sudo/su) executed with SSH.NET SshClient.CreateShellStream or C# send Ctrl+Y over SSH.NET.

    0 讨论(0)
提交回复
热议问题