Я хочу автоматизировать смену пароля, которая выполняется вручную, как таковая:
plink -ssh user@host changepass
user@host's password:
Access granted. Press Return to begin session.
Enter current password:
...
Насколько я понимаю, я не могу выполнить это с помощью RunCommand
, потому что он не интерактивен и не позволит мне дополнительно указать текущий пароль, нажать Enter, затем новый пароль и т. д. Насколько я понимаю, мне придется использовать CreateShellStream
для эмуляции как ад. Когда я пытаюсь сделать что-то вроде этого:
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. Если нет, то что было бы хорошим способом сделать это с С#?