Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2003.02.13;
Скачать: [xml.tar.bz2];

Вниз

Запуск команды на Linux-сервере из Delphi   Найти похожие ветки 

 
Alexo Kalinovski   (2002-12-13 16:16) [0]

Может быть этот вопрос не совсем по теме конфереции, но очень хотелось бы знать как из дельфовой программы, выполняющейся под
Win 2K, выполнить программу на компе, работающем под управлением Красной Шапочки. (Программа, разумеется, Линуксовая). Как превратить Win2K-ный компьютер в консоль Линуксовой машины мой коллега-сисадмин знает (при помощи клиентской части и какого-то SSH). Но как это сделать не ручками, а из программы ?
Извините, если не в тему


 
Anatoly Podgoretsky   (2002-12-13 16:20) [1]

Ищи в Сети XWindow for windows
и/или SSH для Дельфи, можно взять только спецификации и самому наваять, но это довольно сложно


 
Оливейра   (2002-12-13 23:16) [2]

По минимуму - искать компонент, релизующий протокол telnet, если нужно шифрование - компонент, реализующий ssh/ssh2 ( не встречал таких делфевых, рискни поискать фриварные COM-компоненты ) или использовать связку telnet + stunnel ( http://www.stunnel.org/ ).

Telnet реализуют более-менее прямо компоненты Indy ( кажется, начиная еще с WinShoes )


 
olega   (2002-12-14 00:03) [3]

Title: Remote Execute Function (Unix REXEC)
Author: Mike Heydon
Product: Delphi 5.x (or higher)
Post Date: 10/23/2002

Problem/Question/Abstract:

Remote Execute Function (Unix REXEC)

Answer:

This function will execute a command to a Unix box (or any TCP connection that supports REXEC - port 512) and return the display results in a file. I currently use it on HP and SUN systems.

The parameters to RExec() are

HostIP : string // eg. "196.11.121.160"
UserID : string // eg. "root"
Password : string // eg. "fraqu34"
Command : string // eg. "export TERM=vt100; dv"
ResultFilename : string // eg. "c:\temp\uxresult.txt"

The function returns true if sucessful, else false.

The command may contain multiple statements separated by semi-colons. REMEMBER : REXEC does not run the user .profile, so NO user environments are set. You can export any environment settings in this parameter.

eg. "export TERM=vt100; export APP=baan; run_mycommand"

An example of use is ....
(change to directory /var and return a dir listing and return results in file c:\temp\ux.txt)

procedure TForm1.Button1Click(Sender: TObject);
begin
RExec("196.11.121.162",
"root", "passwd342",
"cd /var; ls -1",
"c:\temp\ux.txt");

Memo1.Lines.LoadFromFile("c:\temp\ux.txt");
end;


uses ScktComp;

function RExec(const HostIP: string; const UserID: string;
const Password: string; const Command: string;
const ResultFilename: string): boolean;
var
TCP: TClientSocket;
i: integer;
TxOut: file;
Buffer, Cr, Lf: byte;
Failed: boolean;
begin
Failed := true; // Assume initial error state
Cr := 13; // Carriage Return Char
Lf := 10; // Line Feed Char
TCP := TClientSocket.Create(nil);

try
TCP.Address := HostIP;
TCP.ClientType := ctBlocking;
TCP.Port := 512; // REXEC port
TCP.Open;

// Give time to connect
for i := 1 to 500 do
if not TCP.Active then
Sleep(100)
else
break;

// If TCP opened OK then send the command to host
// and write results to specified file
if TCP.Active then
begin
AssignFile(TxOut, ResultFileName);
Rewrite(TxOut, 1);
TCP.Socket.SendText("0" + #0);
TCP.Socket.SendText(UserID + #0);
TCP.Socket.SendText(Password + #0);
TCP.Socket.SendText(Command + #0);
TCP.Socket.SendText(#13);
Sleep(20); // Give a gap to respond

// Wait for resonse from Host
// You may want to check for timeout here using
// a TTimer. My complete function does this, but
// have omitted for sake of clarity.
while (TCP.Socket.ReceiveBuf(Buffer, 1) <> 1) do
Application.ProcessMessages;

// Write host byte stream to file
while TCP.Socket.ReceiveBuf(Buffer, 1) = 1 do
begin
if (Buffer = 10) then
begin
BlockWrite(TxOut, Cr, 1);
BlockWrite(TxOut, Lf, 1);
end
else
BlockWrite(TxOut, Buffer, 1);
end;

TCP.Close;
CloseFile(TxOut);
Failed := false;
end;
finally
TCP.Free;
end;

Result := not Failed;
end;


 
Alexo Kalinovski   (2002-12-16 13:20) [4]

Огромное спасибо за ответы.
К сожалению, наш сисадмин не желает устанавливать на стороне сервера ни поддержку телнета, ни поддержку REXEC (видимо, из-за соображений безопасности). Сам он работает через небесплатную (!) примочку, использующую SSH.
Он предлагает написать серверную часть в виде CGI-скрипта и шифровать самим или использовать SSL.
Может быть кто-нибудь встречал готовое решение на эту тему ?
Может быть имеются весомые аргументы против такого подхода ?

(Много лет назад был како-то kermit. Он есть сейчас?)

Alexo Kalinovski


 
Netwanderer   (2002-12-21 17:45) [5]

можно вообще на одном компе запустить несколько ОС и с каждой из них работать. см. www.vmware.com



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2003.02.13;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.01 c
1-38220
IDKFA
2003-02-05 08:35
2003.02.13
Как найти имя динамически созданного компонента?


14-38446
Сатир
2003-01-29 12:51
2003.02.13
Семейный фотоальбом (не мой;)


3-38100
wdr
2003-01-28 06:18
2003.02.13
Delphi + Clarion


3-38058
Status_I
2003-01-26 00:09
2003.02.13
Диалог пользователя


3-38106
Evyshka
2003-01-27 09:48
2003.02.13
Поймать того кто неправильно выходит из программы :-))





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский