private void ClearMotionHostPC_Executed(object sender, ExecutedRoutedEventArgs e) { if (Bindings.isipselected) { IP curSelIP = SelectedIP; SSHCommandThread(curSelIP, $"Чистка Motion по хосту {curSelIP.NBNameOrIP()}", Properties.Resources.sshCommand_ClearMotion, SelectedCredentials.Login, SelectedCredentials.Password); } }
private void ZabbixAgentUpdate_Executed(object sender, ExecutedRoutedEventArgs e) { if (Bindings.isipselected) { IP curSelIP = SelectedIP; SSHCommandThread(curSelIP, $"Обновление Zabbix Agent по хосту {curSelIP.NBNameOrIP()}", Properties.Resources.sshCommand_ZabbixAgentUpdate, SelectedCredentials.Login, SelectedCredentials.Password); } }
private void DeleteProfileChromium_Executed(object sender, ExecutedRoutedEventArgs e) { if (Bindings.isipselected) { IP curSelIP = SelectedIP; SSHCommandThread(curSelIP, $"Удаление профиля Chromium на хосте {curSelIP.NBNameOrIP()}", "rm -f '/home/user/.config/chromium/SingletonLock'", SelectedCredentials.Login, SelectedCredentials.Password); } }
private void UnLockScript_Executed(object sender, ExecutedRoutedEventArgs e) { if (Bindings.isipselected) { IP curSelIP = SelectedIP; StringBuilder commandUnlock = new StringBuilder(); commandUnlock.AppendLine("echo $TempPass|sudo -S iptables -F && echo $TempPass|sudo -S iptables -X && echo $TempPass|sudo -S iptables -L"); SSHCommandThread(curSelIP, $"Разблокировать интернет на хосте {curSelIP.NBNameOrIP()}", commandUnlock.ToString(), SelectedCredentials.Login, SelectedCredentials.Password); } }
private void AddAliasInBash_Executed(object sender, ExecutedRoutedEventArgs e) { if (Bindings.isipselected) { IP curSelIP = SelectedIP; StringBuilder commandSmartCtl = new StringBuilder(); //commandSmartCtl.AppendLine("echo $TempPass|sudo -S smartctl -a /dev/sda"); SSHCommandThread(curSelIP, $"Добавить Alias в /etc/bash.bashrc {curSelIP.NBNameOrIP()}", Properties.Resources.sshCommand_AddAlias1C_reinstall, SelectedCredentials.Login, SelectedCredentials.Password); } }
private string SSHCommandThreadGetResult(IP selectedIP, string command, string commandinresult, string login, string password) { try { this.Log(string.Format($"Выполнение {command} на {selectedIP.NBNameOrIP()}..."), false, false, string.Empty, true); string nbNameOrIP = selectedIP.NBNameOrIP(); string ipaddress = selectedIP.IPAddress; using (SshClient client = new SshClient(ipaddress, login, password)) { client.Connect(); StringBuilder commandBuild = new StringBuilder(); commandBuild.AppendLine(@"#!/bin/bash"); commandBuild.AppendLine($"TempPass={password}"); commandBuild.AppendLine(commandinresult); string commandExec = commandBuild.ToString().Replace("\r\n", "\n"); var runCommand = client.CreateCommand(commandExec); string result = runCommand.Execute(); client.Disconnect(); return(result); } } catch (ArgumentException exception) { Log("Необходимо выбрать логин и пароль", true, true, exception.StackTrace, false); return("Ошибка Необходимо выбрать логин и пароль"); } catch (Exception exception) { this.Log(exception.Message, true, true, exception.StackTrace, false); return("Ошибка"); } //}); }
private void ZimbraComplectScript_Executed(object sender, ExecutedRoutedEventArgs e) { if (Bindings.isipselected) { IP curSelIP = SelectedIP; StringBuilder commandZimbraInstall = new StringBuilder(); commandZimbraInstall.AppendLine("tar xzvf /home/user/zimbra_desktop_update.tar.gz"); commandZimbraInstall.AppendLine("cd zimbra_desktop"); commandZimbraInstall.AppendLine("echo $TempPass|sudo -S perl install.pl"); commandZimbraInstall.AppendLine("perl /opt/zimbra/zdesktop/linux/user-install.pl"); SSHCommandThread(curSelIP, $"Установка Zimbra 7.2.8 на хосте {curSelIP.NBNameOrIP()}", commandZimbraInstall.ToString(), SelectedCredentials.Login, SelectedCredentials.Password); } }
private void mac_info_thread(IP selectedIP) { string mac = GetMac(selectedIP.IPAddress); Dispatcher.BeginInvoke(DispatcherPriority.Normal, (Action)(() => CopyToClipboard(mac, true, ""))); string mac_msg = null; for (int i = 0; i < this.macvendors.Length; i += 2) { if (mac.StartsWith(this.macvendors[i])) { mac_msg = "MAC адрес: " + mac + "\nПроизводитель: " + this.macvendors[i + 1]; break; } } if (mac_msg != null) { base.Dispatcher.Invoke(DispatcherPriority.Normal, (Action)(() => { TaskDialogOptions options = new TaskDialogOptions { Owner = this, Title = "DSList", MainInstruction = selectedIP.NBNameOrIP(), Content = mac_msg, MainIcon = VistaTaskDialogIcon.Information }; options.CustomButtons = new string[] { "ОК" }; options.AllowDialogCancellation = true; TaskDialog.Show(options); })); } else { Log($"Не удалось определить mac адрес для {selectedIP.NBNameOrIP()}", false, false); } }
private void SmartCtl_Executed(object sender, ExecutedRoutedEventArgs e) { if (Bindings.isipselected) { IP curSelIP = SelectedIP; StringBuilder commandSmartCtl = new StringBuilder(); //commandSmartCtl.AppendLine("echo $TempPass|sudo -S su"); commandSmartCtl.AppendLine("echo $TempPass|sudo -S apt-get -y install smartmontools"); commandSmartCtl.AppendLine("echo $TempPass|sudo -S fdisk -l"); commandSmartCtl.AppendLine("echo $TempPass|sudo -S smartctl --smart=on /dev/sda"); commandSmartCtl.AppendLine("echo $TempPass|sudo -S smartctl -a /dev/sda"); SSHCommandThread(curSelIP, $"S.M.A.R.T по хосту {curSelIP.NBNameOrIP()}", commandSmartCtl.ToString(), SelectedCredentials.Login, SelectedCredentials.Password); } }
private void DS_Benchmark_Executed(object sender, ExecutedRoutedEventArgs e) { if (Bindings.isipselected) { IP curSelIP = SelectedIP; #region Скопировать DS_Benchmark.tar.gz на хост string pathTofileDS_Bencmark = System.IO.Path.Combine(System.Windows.Forms.Application.StartupPath, @"SupportTools\LinuxScripts"); SftpCopy("DS_Benchmark.tar.gz", pathTofileDS_Bencmark, @"/home/user/", curSelIP.IPAddress, SelectedCredentials.Login, SelectedCredentials.Password); string pathTofilebench = System.IO.Path.Combine(System.Windows.Forms.Application.StartupPath, @"SupportTools\LinuxScripts"); SftpCopy("bench.sh", pathTofilebench, @"/home/user/", curSelIP.IPAddress, SelectedCredentials.Login, SelectedCredentials.Password); #endregion #region Выполнение скрипта тестирования DS_Benchmark SSHCommandThread(curSelIP, $"Тестирование производительности хоста {curSelIP.NBNameOrIP()} с помощью DS_Benchmark", @"echo $TempPass|sudo -S sh /home/user/bench.sh", SelectedCredentials.Login, SelectedCredentials.Password); #endregion } }
private void Ink1CWine_Executed(object sender, ExecutedRoutedEventArgs e) { if (Bindings.isipselected) { IP curSelIP = SelectedIP; PasswordConnectionInfo connectionInfo = new PasswordConnectionInfo(curSelIP.IPAddress, 22, SelectedCredentials.Login, SelectedCredentials.Password); connectionInfo.Timeout = TimeSpan.FromSeconds(30); #region Скопировать ibases.v8i и скрипт на хост using (var sftp = new SftpClient(connectionInfo)) { try { sftp.Connect(); string fileDS_Bencmark = System.IO.Path.Combine(System.Windows.Forms.Application.StartupPath, @"SupportTools\LinuxScripts\ibases.v8i"); using (FileStream stream = new FileStream(fileDS_Bencmark, FileMode.Open, FileAccess.Read)) { sftp.UploadFile(stream, @"/home/user/ibases.v8i", true); stream.Close(); stream.Dispose(); } string filebench = System.IO.Path.Combine(System.Windows.Forms.Application.StartupPath, @"SupportTools\LinuxScripts\copyInk.sh"); using (FileStream stream = new FileStream(filebench, FileMode.Open, FileAccess.Read)) { sftp.UploadFile(stream, @"/home/user/copyInk.sh", true); stream.Close(); stream.Dispose(); } } catch (Exception ex) { Log(ex.Message, true, false, ex.StackTrace); } finally { sftp.Disconnect(); sftp.Dispose(); } } #endregion #region Выполнение скрипта тестирования DS_Benchmark SSHCommandThread(curSelIP, $"Копирование ярлыка со списком БД на хост {curSelIP.NBNameOrIP()}", @"echo $TempPass|sudo -S sh /home/user/copyInk.sh", SelectedCredentials.Login, SelectedCredentials.Password); #endregion } }
private void SSHCommandThread(IP selectedIP, string command, string commandinresult, string login, string password, bool showWindow = true, bool addToListBoxTask = true) { Thread runThread = new Thread(new ThreadStart(() => { ItemListBoxTask curItemLBT = new ItemListBoxTask() { IPOrName = selectedIP.NBNameOrIP(), Description = $"Выполняется {command}", CVZNumber = $"ЦВЗ№{SelectedTT.NumberCVZ.ToString()}", IsIndeterminate = true }; //Dispatcher.Invoke(() => //{ if (addToListBoxTask) { Dispatcher.Invoke(() => { Bindings.listBoxTaskItemsSource.Add(curItemLBT); }); } try { this.Log(string.Format($"Выполнение {command} на {selectedIP.NBNameOrIP()}..."), false, false, string.Empty, true); string nbNameOrIP = selectedIP.NBNameOrIP(); string ipaddress = selectedIP.IPAddress; using (SshClient client = new SshClient(ipaddress, login, password)) { client.Connect(); StringBuilder commandBuild = new StringBuilder(); commandBuild.AppendLine(@"#!/bin/bash"); commandBuild.AppendLine($"TempPass={password}"); commandBuild.AppendLine(commandinresult); string commandExec = commandBuild.ToString().Replace("\r\n", "\n"); bool uploadFileStoped = false; var runCommand = client.CreateCommand(commandExec); var runClient = runCommand.BeginExecute((x) => { var temp = curItemLBT.StopProcess; if (curItemLBT.StopProcess) { if (!uploadFileStoped) { try { uploadFileStoped = true; showWindow = false; client.Disconnect(); //return $"Прервано выполнение {command}"; } catch (Exception) { } } } }); string result = runCommand.EndExecute(runClient); client.Disconnect(); if (showWindow) { base.Dispatcher.BeginInvoke((Action)(() => { SSHReportWindow window = new SSHReportWindow(this) { Owner = this, Title = string.Format($"Команда SSH {command} на {nbNameOrIP}"), Text = { Text = result }, SSHStatusBarText = { Text = string.Format($"Команда SSH {command} на {nbNameOrIP} выполнена.") } }; this.Log(window.SSHStatusBarText.Text, false, false, "", false); window.Show(); })); } } } catch (ArgumentException exception) { Log("Необходимо выбрать логин и пароль", true, true, exception.StackTrace, false); } catch (Exception exception) { this.Log(exception.Message, true, true, exception.StackTrace, false); } //}); })); runThread.Start(); //while (!curItemLBT.StopProcess || (runThread.ThreadState != System.Threading.ThreadState.Stopped) || (runThread.ThreadState != System.Threading.ThreadState.Aborted)) //{ // if (!(runThread.ThreadState == System.Threading.ThreadState.Stopped)) // { // runThread.Abort(); // } //} }
private void RefreshProfileZimbra_Executed(object sender, ExecutedRoutedEventArgs e) { if (Bindings.isipselected) { IP curSelIP = SelectedIP; SSHCommandThread(curSelIP, $"Обновление профиля пользователя Zimbra Desktop на хосте {curSelIP.NBNameOrIP()}", "pkill -9 zdclient ; perl /opt/zimbra/zdesktop/linux/user-install.pl", SelectedCredentials.Login, SelectedCredentials.Password); } }
private void KillChromeFirefoxProcess_Executed(object sender, ExecutedRoutedEventArgs e) { if (Bindings.isipselected) { IP curSelIP = SelectedIP; SSHCommandThread(curSelIP, $"Аварийное завершение работы браузеров Chrome и Firefox на хосте {curSelIP.NBNameOrIP()}", "pkill -9 chrom ; pkill -9 firefox", SelectedCredentials.Login, SelectedCredentials.Password); } }
private void KillZimbraProcess_Executed(object sender, ExecutedRoutedEventArgs e) { if (Bindings.isipselected) { IP curSelIP = SelectedIP; SSHCommandThread(curSelIP, $"Аварийное завершение работы Zimbra Desktop на хосте {curSelIP.NBNameOrIP()}", "pkill -9 zdclient", SelectedCredentials.Login, SelectedCredentials.Password); } }
private void Kill1CWine_Executed(object sender, ExecutedRoutedEventArgs e) { if (Bindings.isipselected) { IP curSelIP = SelectedIP; SSHCommandThread(curSelIP, $"Аварийное завершение работы клиента 1C на хосте {curSelIP.NBNameOrIP()}", "pkill -9 wine; pkill -9 1c", SelectedCredentials.Login, SelectedCredentials.Password); } }