Автоматическая настройка SMTP сервера. Соединение с сервером по SSH.

Prena

Новичок
Регистрация
26.11.2017
Сообщения
29
Благодарностей
1
Баллы
3
почемуто при попытке установить соединение получаю ошибку

Код:
    21:34:57    Компиляция кода  Ошибка в действии "CS1002" "ожидалась ;". [Строка: -9; Cтолбец: 19]
для теста взят минимальный конфиг

Код:
SshClient sshClient = new SshClient("ip", 22, "root", "password");

sshClient.Connect();

return "ok";
вместо IP и пароля стоят соответсвующие значения

библиотека подключена

Подскажите пожалуйста, ну установил я соединение с сервером через этот метод, как дальше мне выполнять команды, в этом же кубике или в отдельном?
например залить файл на сервак...как эту команду выполнить в зено, если можно с примером, пожалуйста.
 
Регистрация
23.03.2015
Сообщения
1 113
Благодарностей
632
Баллы
113
Кто нибудь пробовал запускать файлы на ВинСервере по ssh?
Пытаюсь запустить блокнот и браузер, но увы...
Код выполняется успешно, но на сервере ничего не стартует:
C#:
SshClient sshClient = new SshClient("ip", 22, "Administrator", "2U3Zb");
sshClient.Connect();
        project.SendInfoToLog("Соединились с сервером", true);
            
var cmd = sshClient.CreateCommand("C%3A%5CUsers%5CAdministrator%5CAppData%5CLocal%5CYandex%5CYandexBrowser%5CApplication%5Cbrowser.exe");
        cmd.Execute();
Подключение происходит, а потом вечная тишина:
C#:
SshClient sshClient = new SshClient("ip", 22, "Administrator", "pass");
sshClient.Connect();
        project.SendInfoToLog("Соединились с сервером", true);
            
var cmd = sshClient.CreateCommand("Notepad.exe");
        cmd.Execute();
Может я команду посылаю не верно?
 
Регистрация
23.03.2015
Сообщения
1 113
Благодарностей
632
Баллы
113
Регистрация
23.03.2015
Сообщения
1 113
Благодарностей
632
Баллы
113

Ilshakin

Client
Регистрация
14.02.2017
Сообщения
630
Благодарностей
537
Баллы
93
Надо смотреть , что там за ошибка такая, так сходу не скажу
У тебя точно подключается с серверу? Можешь создать текстовый файл и прочитать его в переменную?
Есть подозрение, что и порт (22) совсем не дефолтный у тебя. А может и на виндус нужно ssh ключи генерить для удаленного подключения
 
  • Спасибо
Реакции: KolkaPetkinSyn
Регистрация
23.03.2015
Сообщения
1 113
Благодарностей
632
Баллы
113
Надо смотреть , что там за ошибка такая, так сходу не скажу
У тебя точно подключается с серверу? Можешь создать текстовый файл и прочитать его в переменную?
Есть подозрение, что и порт (22) совсем не дефолтный у тебя. А может и на виндус нужно ssh ключи генерить для удаленного подключения
Подскажи код, которым прочитать файл в переменную?
При помощи FileZilla Удаётся подключиться Порт 22
 
Последнее редактирование:

Ilshakin

Client
Регистрация
14.02.2017
Сообщения
630
Благодарностей
537
Баллы
93
Подскажи код, которым прочитать файл в переменную?
При помощи FileZilla Удаётся подключиться Порт 22
нет, под рукой этой библиотеки, нужно смотреть, какие финукции можно вызвать....
ну что то из разряда:

C#:
.......
string read_file = sshClient.CreateCommand("puth_to_file_needing_to_read").Execute();
project.Variables["file"].Value = read_file;
......
 

Zedx

Client
Регистрация
12.06.2018
Сообщения
1 157
Благодарностей
806
Баллы
113
Попробуй вместо
C#:
var cmd = sshClient.CreateCommand("Notepad.exe");
cmd.Execute();
выполнить
C#:
var cmd = sshClient.RunCommand("Notepad.exe");
 
  • Спасибо
Реакции: KolkaPetkinSyn
Регистрация
23.03.2015
Сообщения
1 113
Благодарностей
632
Баллы
113
нет, под рукой этой библиотеки, нужно смотреть, какие финукции можно вызвать....
ну что то из разряда:

C#:
.......
string read_file = sshClient.CreateCommand("puth_to_file_needing_to_read").Execute();
project.Variables["file"].Value = read_file;
......
Попробуй вместо
C#:
var cmd = sshClient.CreateCommand("Notepad.exe");
cmd.Execute();
выполнить
C#:
var cmd = sshClient.RunCommand("Notepad.exe");
В обоих случаях после подключения к серверу код зависает, приходится прерывать.
По порядку:
Если команда это адрес файла на сервере в обычном виде- вечная загрузка
Если команда это "Notepad.exe"- вечная загрузка
Если команда это переменна в которой адрес файла на сервере в обычном виде- вечная загрузка
Если команда это адрес файла на сервере в кодированном виде- код отрабатывает успешно, но ничего не происходит
 
Регистрация
23.03.2015
Сообщения
1 113
Благодарностей
632
Баллы
113
Пользуюсь для подключения к удалённому компьютеру ssh вышеописанным методом. Регулярно запускаю .exe файл. Столкнулся с такой проблемой: после 50-60 запросов удаленный компьютер перестает отвечать по ssh. Помогает только перезагрузка. Во время попыток найти причину, заметил кучу действующих ssh соединений. Получается, что данные метод создаёт подключение, но по завершению работы его не убивает. Подскажите, как сделать чтобы ssh соединение закрывалось после выполнения команды. Или команду для командной строки которая закрыла бы все действующие ssh соединения?
 

Zedx

Client
Регистрация
12.06.2018
Сообщения
1 157
Благодарностей
806
Баллы
113
Подскажите, как сделать чтобы ssh соединение закрывалось после выполнения команды. Или команду для командной строки которая закрыла бы все действующие ssh соединения?
C#:
using (var client = new SshClient(ip, port, user, password))
{
    try
    {
        client.Connect();
        
        var cmd = sshClient.RunCommand("Notepad.exe");

        client.Disconnect();
    }

    catch (Exception e)
    {
        return null;
    }
}
 
  • Спасибо
Реакции: KolkaPetkinSyn

zarufakis

Client
Регистрация
22.03.2019
Сообщения
1 501
Благодарностей
866
Баллы
113
Для информации (обжегся): В Google Cloud Platform забанены порты SMTP, поэтому отправить почту там не получится. Работает только получение.
 
Регистрация
23.03.2015
Сообщения
1 113
Благодарностей
632
Баллы
113
C#:
using (var client = new SshClient(ip, port, user, password))
{
    try
    {
        client.Connect();
       
        var cmd = sshClient.RunCommand("Notepad.exe");

        client.Disconnect();
    }

    catch (Exception e)
    {
        return null;
    }
}
А можешь помочь еще с таким вопросом:
Нужно выполнить команду с последующим введением логина и пароля. То есть, нужно ввести команду, дождаться пока попросят ввести логин, ввести логин подтвердить и подождать пока попросят пароль, затем ввести пароль и подтвердить
В Гугле не нашёл ни одного примера
 

Zedx

Client
Регистрация
12.06.2018
Сообщения
1 157
Благодарностей
806
Баллы
113
А можешь помочь еще с таким вопросом:
Нужно выполнить команду с последующим введением логина и пароля. То есть, нужно ввести команду, дождаться пока попросят ввести логин, ввести логин подтвердить и подождать пока попросят пароль, затем ввести пароль и подтвердить
В Гугле не нашёл ни одного примера
Ну в шелле это делается через read
Код:
read line
echo "$line"
Только ведь окно терминала не выводится
 
  • Спасибо
Реакции: KolkaPetkinSyn

Ivan_B_1

Client
Регистрация
12.07.2019
Сообщения
68
Благодарностей
12
Баллы
8
Помогите выйти из screen с помощью этой библиотеки
C#:
var cmd = sshClient.CreateCommand("screen -r");
        cmd.Execute();
        
        cmd = sshClient.CreateCommand("nginx");
        cmd.Execute();
        cmd = sshClient.CreateCommand("КАК ЭМУЛИРОВАТЬ ctrl+a+d?");
        cmd.Execute();

        sshClient.Disconnect();
 

Ivan_B_1

Client
Регистрация
12.07.2019
Сообщения
68
Благодарностей
12
Баллы
8
Помогите выйти из screen с помощью этой библиотеки
C#:
var cmd = sshClient.CreateCommand("screen -r");
        cmd.Execute();
       
        cmd = sshClient.CreateCommand("nginx");
        cmd.Execute();
        cmd = sshClient.CreateCommand("КАК ЭМУЛИРОВАТЬ ctrl+a+d?");
        cmd.Execute();

        sshClient.Disconnect();
Вроде помогло запускать screen -d -m nginx
 

AlexZI

Client
Регистрация
02.05.2014
Сообщения
37
Благодарностей
3
Баллы
8
Посмотреть вложение 46450

А вообще, работать с ssh через zennoposter - извращение.
Для автоматизации в linux существует множество других решений: bash, ansible, perl, python и тд.
А как Renci.SSH коннект будет выглядеть?

Интересует подключение через ключ авторизации, так как вырубаю подключение по паролю для безопасности.

C#:
string host = project.Variables["host"].Value;
string username = project.Variables["user"].Value;
string password = project.Variables["pass"].Value;

SshClient sshClient = new SshClient(host, 22, username, password);
 

TopFlow

Client
Регистрация
24.06.2020
Сообщения
59
Благодарностей
12
Баллы
8
Помогите понять что за трабл?(
Выполнение действия CSharp OwnCode. [Строка: 8; Cтолбец: 0] Не удалось загрузить файл или сборку "Renci.SshNet, Version=2014.4.6.0, Culture=neutral, PublicKeyToken=1cee9f8bde3db106" либо одну из их зависимостей. Найденное определение манифеста сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040)
 

Zedx

Client
Регистрация
12.06.2018
Сообщения
1 157
Благодарностей
806
Баллы
113
Помогите понять что за трабл?(
Выполнение действия CSharp OwnCode. [Строка: 8; Cтолбец: 0] Не удалось загрузить файл или сборку "Renci.SshNet, Version=2014.4.6.0, Culture=neutral, PublicKeyToken=1cee9f8bde3db106" либо одну из их зависимостей. Найденное определение манифеста сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040)
Необходимо добавить библиотеку Renci.SshNet.dll
 

Zedx

Client
Регистрация
12.06.2018
Сообщения
1 157
Благодарностей
806
Баллы
113

Вложения

  • Спасибо
Реакции: Scorpio2011 и TopFlow

TopFlow

Client
Регистрация
24.06.2020
Сообщения
59
Благодарностей
12
Баллы
8
Спасибо большое - сразу взлетела!
 

nicos77777

Client
Регистрация
04.04.2013
Сообщения
331
Благодарностей
15
Баллы
18
подскажите пожалуйста как сделать для команды "var cmd = sshClient.CreateCommand("rm -rf /var/www/www-root/");" таймаут? а то зависает команда порой
 
  • Спасибо
Реакции: TeslaCo

Zedx

Client
Регистрация
12.06.2018
Сообщения
1 157
Благодарностей
806
Баллы
113
подскажите пожалуйста как сделать для команды "var cmd = sshClient.CreateCommand("rm -rf /var/www/www-root/");" таймаут? а то зависает команда порой
C#:
sshClient.RunCommand("rm -rf /var/www/www-root/");
Дожидается завершения операции
 
  • Спасибо
Реакции: TeslaCo и nicos77777

Zedx

Client
Регистрация
12.06.2018
Сообщения
1 157
Благодарностей
806
Баллы
113
А можно как то С# самому поставить таймаут?
Чтобы после определённого времени команда прерывала выполнение?
Я использую у себя в шаблоне такое же удаление файлов, никогда ничего не зависало.
 

nicos77777

Client
Регистрация
04.04.2013
Сообщения
331
Благодарностей
15
Баллы
18
Чтобы после определённого времени команда прерывала выполнение?
Я использую у себя в шаблоне такое же удаление файлов, никогда ничего не зависало.
Иногда при удалении с серверов которые очень сильно загруженны очень большого количества файлов, бывает уходит в завис. Похоже придется делать сам c# отдельным шаблоном и делать таймаут шаблона
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)