在 z/OS 上使用 SSH.NET 通过 SSH 更改密码命令
Password change command via SSH using SSH.NET on z/OS
我希望自动执行手动完成的密码更改:
plink -ssh user@host changepass
user@host's password:
Access granted. Press Return to begin session.
Enter current password:
...
我的理解是,我无法使用 RunCommand
完成此操作,因为它不是交互式的,并且不允许我进一步指定当前密码,按回车键,然后输入新密码等。据我所知明白我必须使用 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();
}
结果是 The command executed is invalid.....
,这与我在未指定内联命令的情况下尝试使用 plink 得到的结果相同:
plink -ssh -t user@host
Using username "user".
-- Pre-authentication banner message from server: ----------------------------
user@host's password:
Access granted. Press Return to begin session.
The command executed is invalid.....
我想知道我的方法是否无效,是否可以用 SSH.NET 来完成。如果不是,从 C# 执行此操作的好方法是什么?
您的服务器似乎不支持“shell”频道,只支持“exec”频道。
确实SSH.NET不支持为使用“exec”通道执行的命令提供输入。参见
如果它是 *nix 服务器,您可以尝试使用输入重定向来提供输入。
client.RunCommand("echo input | command");
虽然 1) 这不是一种安全的密码方式 2) 我不知道 z/OS 的正确语法(或者甚至可能)。
为了正确提供输入,您必须获取 SSH.NET 代码并修改 SshCommand
class 以 IChannelSession.Write
公开 ShellStream.Write
的方式确实。
或者您将不得不使用不同的库(不过我不知道除了 SSH.NET 还有其他免费的好库)。或者 运行 像 PuTTY Plink (I do not like that, but it's probably easiest way to go). See Sending input during command output with SSH.NET.
这样的外部工具
我希望自动执行手动完成的密码更改:
plink -ssh user@host changepass
user@host's password:
Access granted. Press Return to begin session.
Enter current password:
...
我的理解是,我无法使用 RunCommand
完成此操作,因为它不是交互式的,并且不允许我进一步指定当前密码,按回车键,然后输入新密码等。据我所知明白我必须使用 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();
}
结果是 The command executed is invalid.....
,这与我在未指定内联命令的情况下尝试使用 plink 得到的结果相同:
plink -ssh -t user@host
Using username "user".
-- Pre-authentication banner message from server: ----------------------------
user@host's password:
Access granted. Press Return to begin session.
The command executed is invalid.....
我想知道我的方法是否无效,是否可以用 SSH.NET 来完成。如果不是,从 C# 执行此操作的好方法是什么?
您的服务器似乎不支持“shell”频道,只支持“exec”频道。
确实SSH.NET不支持为使用“exec”通道执行的命令提供输入。参见
如果它是 *nix 服务器,您可以尝试使用输入重定向来提供输入。
client.RunCommand("echo input | command");
虽然 1) 这不是一种安全的密码方式 2) 我不知道 z/OS 的正确语法(或者甚至可能)。
为了正确提供输入,您必须获取 SSH.NET 代码并修改 SshCommand
class 以 IChannelSession.Write
公开 ShellStream.Write
的方式确实。
或者您将不得不使用不同的库(不过我不知道除了 SSH.NET 还有其他免费的好库)。或者 运行 像 PuTTY Plink (I do not like that, but it's probably easiest way to go). See Sending input during command output with SSH.NET.
这样的外部工具