Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.05.2016, 06:27   #1
Brain_SHVV
Пользователь
 
Регистрация: 26.05.2016
Сообщений: 11
По умолчанию C Delphi управлять Linux-сервером

Здравствуйте.

Может кто подскажет с такой ситуацией. Я пишу на Delphi, что-то вроде биллинговой системы и мне нужно с моей программы посылать команды на сервер Linux Ubuntu.
Не могу найти нормальных примеров, как подключится-авторизоваться с Delphi на сервере Linux и отправить нужную команду. Типа как через SSH-клиент.

Например: Чтобы нажать на кнопку в программе и перезагрузить сервер Linux (командой "reboot" или каких либо других).
Brain_SHVV вне форума Ответить с цитированием
Старый 26.05.2016, 08:44   #2
kutani
Форумчанин
 
Регистрация: 23.01.2016
Сообщений: 608
По умолчанию

http://help.ubuntu.ru/wiki/руководст...openssh_server
+
Synnapse или TCryptSession (из DelphiCryptlib):
Код:
function TForm1.SSH_Client(Server, Userid, Pass: string): TCryptSession;
begin
 result := TCryptSession.Create(CRYPT_SESSION_SSH);
 with result do begin
   ServerName := Server;  { set hostname or IP address }
   UserName := Userid;    { set user identification }
   Password := Pass;      { set password }
 end;
 try
   result.Activate;       { establish SSH connection to server }
 except
   on E: ECryptError do
   begin
     FreeAndNil(result);
   end;
 end;
end;
 
procedure TForm1.sButton4Click(Sender: TObject);
var
 SSH: TCryptSession;
//  Data: PAnsiChar;
 Data: array [0..255] of AnsiChar;
 LenData: Integer;
 BytePushed: Integer;
 BytePoped: Integer;
begin
 cryptInit;
SSH := SSH_Client('ip сервера', 'root', 'пароль');
 if SSH = nil then
   Exit;
 showmessage('зер гуд'); //это у меня логи так выводятся
 SSH.FlushData;
 
 LenData := 255;
 BytePoped := SSH.PopData(addr(Data), LenData);
 showmessage(Data);// получаем приветствие от сервера
 showmessage(IntToStr(BytePoped)); 
 
 Data := 'free'#13; // в качестве теста, получаем информацию о использовании памяти на сервере
 LenData := 5;
 SSH.PushData(addr(Data), LenData, BytePushed);
 
 SSH.FlushData;
 
 LenData := 255;
 BytePoped := SSH.PopData(addr(Data), LenData);
 showmessage(Data); //выводим то, что вернул сервер.
 
 FreeAndNil(SSH);          // закругляемся
 cryptEnd;
end;
И под Lazarus http://wiki.lazarus.freepascal.org/S...sample_program
kutani вне форума Ответить с цитированием
Старый 26.05.2016, 11:13   #3
Brain_SHVV
Пользователь
 
Регистрация: 26.05.2016
Сообщений: 11
По умолчанию

Спасибо большое за оперативный ответ. Буду пробовать.
Brain_SHVV вне форума Ответить с цитированием
Старый 05.06.2016, 17:13   #4
Brain_SHVV
Пользователь
 
Регистрация: 26.05.2016
Сообщений: 11
По умолчанию

Добрался до данного кода, хотел просто проверить и создал форму с кнопкой, но что-то видимо не хватает, ругается на файл ssl_cryptlib.pas. Можно попросить поподробнее пояснить или может есть возможность кинуть исходник простенький для примера, чтобы понять как и что взаимодействует, возможно пустяк какой-то но не могу сообразить или, что-то не до понял.
Brain_SHVV вне форума Ответить с цитированием
Старый 05.06.2016, 17:53   #5
kutani
Форумчанин
 
Регистрация: 23.01.2016
Сообщений: 608
По умолчанию

http://synapse.ararat.cz/doc/help/ssl_cryptlib.html
kutani вне форума Ответить с цитированием
Старый 09.06.2016, 04:12   #6
Brain_SHVV
Пользователь
 
Регистрация: 26.05.2016
Сообщений: 11
По умолчанию

Извиняюсь, но что-то не могу догнать. В uses, что нужно дописать кроме стандартного:
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs;
И если я правильно понял, нужно установить по моему плагин в составе которого входит cl32.dll, а как его установить не могу разобраться.
Synnapse - установил, но это не достаточно.
Возможно не все правильно еще понимаю, но очень хочется разобраться, спросить не у кого, а в Интернет только отрывки кодов, но как их связать с обычной программой нет нигде, так скажем как для совсем новичков, чтобы разобраться в этой теме. Или хотя бы пошагово 1. Так то, 2. так...
Brain_SHVV вне форума Ответить с цитированием
Старый 09.06.2016, 06:25   #7
kutani
Форумчанин
 
Регистрация: 23.01.2016
Сообщений: 608
По умолчанию

Ее, DLL, не надо ставить, просто положить в системную директорию при ее отсутствии или рядом со своей программой. В uses добавить ssl_cryptlib, раз ее используете.
kutani вне форума Ответить с цитированием
Старый 09.06.2016, 06:58   #8
Brain_SHVV
Пользователь
 
Регистрация: 26.05.2016
Сообщений: 11
По умолчанию

Сейчас у меня код:
Код:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, cryptlib, DelphiCryptlib;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function TForm1.SSH_Client(Server, Userid, Pass: string): TCryptSession;
begin
 result := TCryptSession.Create(CRYPT_SESSION_SSH);
 with result do begin
   ServerName := Server;  { set hostname or IP address }
   UserName := Userid;    { set user identification }
   Password := Pass;      { set password }
 end;
 try
   result.Activate;       { establish SSH connection to server }
 except
   on E: ECryptError do
   begin
     FreeAndNil(result);
   end;
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 SSH: TCryptSession;
//  Data: PAnsiChar;
 Data: array [0..255] of AnsiChar;
 LenData: Integer;
 BytePushed: Integer;
 BytePoped: Integer;
begin
 cryptInit;
SSH := SSH_Client('ip сервера', 'root', 'пароль');
 if SSH = nil then
   Exit;
 showmessage('зер гуд'); //это у меня логи так выводятся
 SSH.FlushData;

 LenData := 255;
 BytePoped := SSH.PopData(addr(Data), LenData);
 showmessage(Data);// получаем приветствие от сервера
 showmessage(IntToStr(BytePoped));

 Data := 'free'#13; // в качестве теста, получаем информацию о использовании памяти на сервере
 LenData := 5;
 SSH.PushData(addr(Data), LenData, BytePushed);

 SSH.FlushData;

 LenData := 255;
 BytePoped := SSH.PopData(addr(Data), LenData);
 showmessage(Data); //выводим то, что вернул сервер.

 FreeAndNil(SSH);          // закругляемся
 cryptEnd;
end;

end.
SSH_Client подчеркнуто красным и при компиляции перекидывает на вкладку
DelphiCryptlib и ругается на ShortDateFormat, а так вроде никаких ошибок больше.
Brain_SHVV вне форума Ответить с цитированием
Старый 09.06.2016, 07:03   #9
Brain_SHVV
Пользователь
 
Регистрация: 26.05.2016
Сообщений: 11
По умолчанию

В коде нашел косяк, не прописал в private функцию, а на вкладку все равно перекидывает на DelphiCryptlib и ругается на ShortDateFormat
Код:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, cryptlib, DelphiCryptlib;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    function SSH_Client(Server, Userid, Pass: string): TCryptSession;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function TForm1.SSH_Client(Server, Userid, Pass: string): TCryptSession;
begin
 result := TCryptSession.Create(CRYPT_SESSION_SSH);
 with result do begin
   ServerName := Server;  { set hostname or IP address }
   UserName := Userid;    { set user identification }
   Password := Pass;      { set password }
 end;
 try
   result.Activate;       { establish SSH connection to server }
 except
   on E: ECryptError do
   begin
     FreeAndNil(result);
   end;
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 SSH: TCryptSession;
//  Data: PAnsiChar;
 Data: array [0..255] of AnsiChar;
 LenData: Integer;
 BytePushed: Integer;
 BytePoped: Integer;
begin
 cryptInit;
SSH := SSH_Client('ip сервера', 'root', 'пароль');
 if SSH = nil then
   Exit;
 showmessage('зер гуд'); //это у меня логи так выводятся
 SSH.FlushData;

 LenData := 255;
 BytePoped := SSH.PopData(addr(Data), LenData);
 showmessage(Data);// получаем приветствие от сервера
 showmessage(IntToStr(BytePoped));

 Data := 'free'#13; // в качестве теста, получаем информацию о использовании памяти на сервере
 LenData := 5;
 SSH.PushData(addr(Data), LenData, BytePushed);

 SSH.FlushData;

 LenData := 255;
 BytePoped := SSH.PopData(addr(Data), LenData);
 showmessage(Data); //выводим то, что вернул сервер.

 FreeAndNil(SSH);          // закругляемся
 cryptEnd;
end;

end.
Brain_SHVV вне форума Ответить с цитированием
Старый 09.06.2016, 07:10   #10
Brain_SHVV
Пользователь
 
Регистрация: 26.05.2016
Сообщений: 11
По умолчанию

Что это может быть?
Код:
function UnixDateToStr(UDate: Int64): string;
begin
  DateTimeToString(result, ShortDateFormat + ' hh:nn:ss',
    UnixStartDate + UDate / SecsPerDay - UTCDiff);
end;
Подчеркнуто ShortDateFormat
В Messages три ошибки
[dcc32 Error] DelphiCryptlib.pas(578): E2003 Undeclared identifier: 'ShortDateFormat'
[dcc32 Error] DelphiCryptlib.pas(579): E2250 There is no overloaded version of 'DateTimeToString' that can be called with these arguments
[dcc32 Fatal Error] Unit1.pas(7): F2063 Could not compile used unit 'DelphiCryptlib.pas'
Brain_SHVV вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Девушки хотят управлять своими парнями мужьями, потому что управлять больше некем Alar Свободное общение 73 22.06.2016 16:29
Как из Delphi управлять мобильником через USB. AT функции. vovken1997 Общие вопросы Delphi 78 31.03.2012 13:16
не получается управлять telnet-ом с delphi criator Помощь студентам 2 01.04.2011 15:16
Знание протокола TCP под Linux, передача данных между клиентом и FTP сервером komis Помощь студентам 0 19.04.2010 17:20
Как управлять в Delphi диспетчером процессов? docbrain Общие вопросы Delphi 6 10.02.2010 08:00