Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.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# 在z/OS上使用SSH.NET通过SSH更改密码命令_C#_Ssh_Zos_Ssh.net - Fatal编程技术网

C# 在z/OS上使用SSH.NET通过SSH更改密码命令

C# 在z/OS上使用SSH.NET通过SSH更改密码命令,c#,ssh,zos,ssh.net,C#,Ssh,Zos,Ssh.net,我希望自动更改手动完成的密码,例如: plink-sshuser@host换乘 user@host的密码: 允许访问。按Return开始会话。 输入当前密码: ... 我的理解是,我无法使用RunCommand来完成这一点,因为它不是交互式的,不允许我进一步指定当前密码、按enter键,然后是新密码等。据我所知,我必须使用CreateShellStream来模拟shell。当我尝试这样做时: using (var client = new SshClient(host, username, p

我希望自动更改手动完成的密码,例如:

plink-sshuser@host换乘
user@host的密码:
允许访问。按Return开始会话。
输入当前密码:
...
我的理解是,我无法使用
RunCommand
来完成这一点,因为它不是交互式的,不允许我进一步指定当前密码、按enter键,然后是新密码等。据我所知,我必须使用
CreateShellStream
来模拟shell。当我尝试这样做时:

using (var client = new SshClient(host, username, password))
{
    client.Connect();

    ShellStream shellStream = client.CreateShellStream(string.Empty, 0, 0, 0, 0, 0);
    Console.Write(SendCommand("changepass", shellStream));
    
    client.Disconnect();
}
结果是执行的命令无效……,这与我尝试使用plink而不内联指定命令时得到的结果相同:

plink-ssh-tuser@host
使用用户名“user”。
--来自服务器的预验证横幅消息:----------------------------
user@host的密码:
允许访问。按Return开始会话。
执行的命令无效。。。。。

我想知道我的方法是否无效,以及这是否可以通过SSH.NET实现。如果不是的话,从C#开始做这件事的好方法是什么?

您的服务器似乎不支持“shell”通道,只支持“exec”通道

实际上,SSH.NET不支持为使用“exec”通道执行的命令提供输入。看

如果是*nix服务器,您可以尝试使用输入重定向提供输入

client.RunCommand(“echo输入|命令”);
尽管1)这不是密码的安全方法2)我不知道z/OS的正确语法(或者如果可能的话)


要允许正确提供输入,您必须获取SSH.NET代码并修改
SshCommand
类以公开
IChannelSession.Write
的方式



或者,您将不得不使用不同的库(尽管我不知道除了SSH.NET之外还有其他免费的好库)。或者运行像这样的外部工具(我不喜欢这样,但这可能是最简单的方法)。请参阅。

您的服务器似乎不支持“shell”频道,只支持“exec”频道

实际上,SSH.NET不支持为使用“exec”通道执行的命令提供输入。看

如果是*nix服务器,您可以尝试使用输入重定向提供输入

client.RunCommand(“echo输入|命令”);
尽管1)这不是密码的安全方法2)我不知道z/OS的正确语法(或者如果可能的话)


要允许正确提供输入,您必须获取SSH.NET代码并修改
SshCommand
类以公开
IChannelSession.Write
的方式


或者,您将不得不使用不同的库(尽管我不知道除了SSH.NET之外还有其他免费的好库)。或者运行像这样的外部工具(我不喜欢这样,但这可能是最简单的方法)。看