Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# PowerShell,读取/写入SSH.NET流_C#_.net_Powershell_Ssh - Fatal编程技术网

C# PowerShell,读取/写入SSH.NET流

C# PowerShell,读取/写入SSH.NET流,c#,.net,powershell,ssh,C#,.net,Powershell,Ssh,我想使用PowerShell通过SSH连接到服务器,,然后更改为其他用户 为了通过SSH实现与PowerShell服务器的连接,我使用了和。这很好,给了我一些简单的命令,比如new-sshsession和invoke-sshcommand 接下来,我想向另一个用户发送su。当我试图通过commandlets执行此操作时,我得到了一个错误:中的标准必须是tty 我知道我可以编辑服务器上的安全设置,以便在不处于交互模式的情况下向用户发送su。但是,我无法在所有要连接的服务器上更改该设置 根据我在上找

我想使用PowerShell通过SSH连接到服务器,,然后更改为其他用户

为了通过SSH实现与PowerShell服务器的连接,我使用了和。这很好,给了我一些简单的命令,比如new-sshsession和invoke-sshcommand

接下来,我想向另一个用户发送su。当我试图通过commandlets执行此操作时,我得到了一个错误:中的标准必须是tty

我知道我可以编辑服务器上的安全设置,以便在不处于交互模式的情况下向用户发送su。但是,我无法在所有要连接的服务器上更改该设置

根据我在上找到的一个C#示例,我总结出:

$server = "server1"
$port = 22
$username = "user1"
$password = "password1"

$ssh = new-object Renci.SshNet.SshClient($server, $port, $username, $password)
$ssh.Connect()

$inputstream = new-object System.IO.MemoryStream
$streamwriter = new-object System.IO.StreamWriter($inputstream)
$outputstream = new-object System.IO.MemoryStream
$streamreader = new-object System.IO.StreamReader($outputstream)

$shell = $ssh.CreateShell($inputstream, $outputstream, $outputstream)
$shell.Start()
$streamwriter.WriteLine("echo hello > tempfile.txt")
$streamwriter.Flush()
$streamreader.ReadToEnd()

$shell.Stop()
运行时,我会得到如下输出:

Last login: Fri Nov  8 11:37:45 2013 from 10.XXX.XXX.XXX
[user1@server1 /users/user1]
然而,
/users/user1/tempfile.txt
从未被写入,我也没有得到任何进一步的输出

你知道我做错了什么吗?

使用中的一个示例,我能够用下面的代码解决我的问题。主要问题是我为输入/输出创建了两个不同的流,我只需要使用一个流

$server = "server1"
$port = 22
$username = "user1"
$password = "password1"

###############################################################

function ReadStream($reader)
{
    $line = $reader.ReadLine();
    while ($line -ne $null)
    {
        $line
        $line = $reader.ReadLine()
    }
}

function WriteStream($cmd, $writer, $stream)
{
    $writer.WriteLine($cmd)
    while ($stream.Length -eq 0)
    {
        start-sleep -milliseconds 500
    }
}

###############################################################

$ssh = new-object Renci.SshNet.SshClient($server, $port, $username, $password)
$ssh.Connect()

$stream = $ssh.CreateShellStream("dumb", 80, 24, 800, 600, 1024)

$reader = new-object System.IO.StreamReader($stream)
$writer = new-object System.IO.StreamWriter($stream)
$writer.AutoFlush = $true

while ($stream.Length -eq 0)
{
    start-sleep -milliseconds 500
}
ReadStream $reader

WriteStream "su - root" $writer $stream
ReadStream $reader

WriteStream "password" $writer $stream
ReadStream $reader

WriteStream "pwd" $writer $stream
ReadStream $reader

$stream.Dispose()
$ssh.Disconnect()
$ssh.Dispose()
+我有一个好主意。你的解决方案帮了我:)