#c# #ssh #ssh.net
#c# #.net #ssh #ssh.net
Вопрос:
Я подключаюсь по SSH к машине Linux и снова оттуда хочу подключиться по SSH к другой машине Linux для выполнения нескольких принудительных задач.
using (SshClient ssh = new SshClient("ip address","username", "pwd"))
{
ssh.Connect();
command = ssh.CreateCommand("ssh hostname");
result = command.Execute();
Console.WriteLine(result);
}
Где ssh hostname
это пароль меньше ssh. Как я могу управлять вторым сеансом SSH и передавать ему команды?
Даже исследовал CreateShell
функцию, но, похоже, она не рекомендуется для автоматизации.
Комментарии:
1. Что произойдет, если вы просто создадите новую команду и отправите ее (например,
touch test
) и посмотрите, на какой машине она выполняется (на ней есть файлtest
?)2. Я попробовал команду «ls -la», и она была выполнена в самом первом сеансе ssh.
3. Что это значит «ssh без пароля»? Как это настроено / разрешено?
4. Я настроил ssh без пароля из моего первого окна Linux во второе. tecmint.com /…
Ответ №1:
В общем, попытка автоматизировать ssh
команду — плохой дизайн.
Для реализации «перехода» лучше использовать переадресацию портов (он же SSH-туннель).
var firstClient =
new SshClient(firstHostName, firstUserName, firstPassword);
firstClient.Connect();
var port = new ForwardedPortLocal("127.0.0.1", secondHostName, 22);
firstClient.AddForwardedPort(port);
port.Start();
var secondClient =
new SshClient(port.BoundHost, (int)port.BoundPort, secondUserName, secondPassword);
secondClient.Connect();
var command = secondClient.CreateCommand("ls");
var result = command.Execute();
Console.WriteLine(result);
В некоторых случаях автоматизация ssh
приемлема (хотя все еще не идеальна). Например. потому что на первом хосте установлена аутентификация для второго хоста. Т.е. в .ssh
папке может быть закрытый ключ, и вам не разрешено передавать этот ключ на ваш клиентский компьютер.
Даже в этом случае попробуйте поговорить с системным администратором, чтобы найти лучшее решение. Закрытый ключ по-прежнему доступен с использованием учетных данных, содержащихся в вашем приложении, поэтому он не был бы защищен лучше, если бы сам закрытый ключ содержался непосредственно в приложении.
В любом случае, ssh
может принять команду в своей командной строке, например:
command = ssh.CreateCommand("ssh hostname command");
result = command.Execute();
Console.WriteLine(result);