page 1  (6 pages)
2to next section

FORSCHUNGSZENTRUM J ?ULICH GmbH
Zentralinstitut f?ur Angewandte Mathematik
52425 J ?ulich, Tel. (02461) 61?6402

Informationszentrum, Tel. (02461) 61?6658

Technische Kurzinformation

KFA-ZAM-TKI-0153
W.Anrath, J.Meissburger, R.Niederberger, F.J.Schoenebeck
25.07.91

KFAnet/INTERNET
Remote Execution, rexec und rexecd

1 Einf ?uhrung

Der KFAnet/INTERNET Dienst rexec stellt, basierend auf dem Client/Server-Konzept, eine M?oglichkeit dar, Anwendungen auf einem entfernten Zielrechner direkt von einer lokalen Workstation aus zu starten und zu steuern. Er ben?otigt hierf?ur kein vorangegangenes virtuelles Login auf dem Zielrechner, kann also ?transparent? f?ur den Anwender z.B. direkt aus einem auf der Workstation laufenden Programm heraus gestartet werden. Hierbei wird auf der lokalen Workstation die Client-Schnittstelle rexec als Subroutine oder Kommando benutzt; diese kommuniziert ?uber TCP/IP mit dem Server rexecd auf dem Zielrechner (Host). Wichtig ist hierbei, dass immer eine Benutzervalidierung (Name und Password) durchgef?uhrt wird und dass die erzeugten Prozesse auf dem Zielrechner voll mit den Rechten und der Umgebung des dortigen Benutzers ablaufen. Beispiele f?ur rexec-Anwendungen w?aren z.B. der Verbindungsaufbau f?ur einen X-Window-Server (synchron) oder die Ausf?uhrung einer Datenbankabfrage in einer entfernten Datenbank (asynchron).

2 REXEC unter VM/ESA

REXEC-Client unter VM/ESA

Das Remote Execution Protokoll unter VM/XA erm?oglicht dem VM/CMS Benutzer ein Kommando auf einem entfernten Rechner auszuf?uhren und sich das Resultat auf dem lokalen Terminal anzusehen. REXEC kann aus der CMS-Umgebung direkt aufgerufen werden.

Hierzu muss auf dem entfernten Rechner ein REXEC Daemon (Server) gestartet sein. Der REXEC-Client (das aufgerufene VM-Rexec-EXEC) ?ubertr?agt den Usernamen, Passwort und das angegebene Kommando zum REXEC-Daemon. Der Daemon f?uhrt ein automatisches LOGON mit Passwort- ?Uberpr?ufung durch und startet das auszuf?uhrende Kommando. Existiert der Benutzer nicht auf dem entfernten Rechner oder wurde ein falsches Passwort angegeben, so wird der REXEC-Client-Prozess mit einer Fehlermeldung beendet. Der Return-Code ist allerdings grunds?atzlich gleich null.

Das REXEC-Kommando hat die Form:

REXEC [[ -? ] [ -d ] [ -l userid ] [ -p password ] ] nodename command

Hierbei bedeutet:

Parameter Beschreibung
-? Gibt Help-Informationen
-d Aktiviert die DEBUG-Option
-l userid UserID auf dem entfernten Rechner
-p password Passwort des Accounts userid auf Rechnername
nodename Name oder Internet-Addresse des Rechners auf dem das Kommando gestartet werden soll.
command Das auf dem entfernten Rechner auszuf?uhrende Kommando.

REXECD-Server unter VM/ESA

Entsprechend dem REXEC-Client auf VM/ESA wird auch ein REXEC-Server (REXECD) angeboten. Dieser bietet die M?oglichkeit von einer entfernten Workstation aus, auf dem VM eine User-ID zu starten (XAUTOLOG) und unter dieser User-ID ein Kommando ablaufen zu lassen. Das abgesetze Kommando darf keine Eingabe verlangen, nach der gepromted wird, da sonst dieses Kommando abgebrochen wird. Interaktion mit der Kommandoausf?uhrung ist also nicht m?oglich. Es wird lediglich die Ausgabe auf die entfernte Workstation ?ubertragen.

3 REXEC f ?ur Workstations und PC's

Die Subroutine rexec stellt Applikationen, beispielsweise C Programmen, eine auf Stream Sockets basierende Verbindung zu einer Remote Shell zur Verf?ugung. Standard-Eingabe und Standard-Ausgabe der Remote Shell k?onnen von der lokalen Applikation aus gesteuert werden; je nach Implementierung der auf rexec aufsetzenden Applikation erfolgt die Ausf?uhrung der Remote Shell entweder synchron oder asynchron. Neben dem Kommando oder Shell Script, welches im Kontext der Remote Shell ablaufen soll, m?ussen Benutzername und Passwort eines auf dem Zielsystem bekannten Accounts in der Parameterliste der Subroutine angegeben werden; fehlen Benutzer und Passwort (Null Pointer in der Parameterliste), so werden diese von rexec interaktiv erfragt. Auf dem Zielsystem nimmt der erzeugte Shell Prozess die Identit?at dieses Benutzers an.

Auf dem Zielsystem wird nach Eingang einer Dienstanforderung, welche durch eine bestimmte Port-Nummer aus /etc/services identifiziert wird, vom Internet-Daemon der Server rexecd gestartet; rexecd ist der Server zu rexec. Die Datei /etc/inetd.conf auf dem Zielsystem muss folgenden Eintrag enthalten:

exec streamtcp nowait root /etc/rexecd rexecd

Aufgaben dieses Servers liegen in der Benutzer-Authentifizierung und dem Starten der Shell.

Die Programmierschnittstelle hat folgendes Aussehen:

rem = rexec( ahost, inport, user, passwd, cmd, fd2p );
ahost Zeigerliste auf Namen bzw. Aliasnamen des Zielrechners, Eingabeparameter,
Deklaration: char *ahost[];
inport rexecd Port-Nummer, kann durch
getservbyname(?exec?,?tcp?) bestimmt werden,
Eingabeparameter,
Deklaration: u?short inport;
user Username auf dem Zielsystem oder Null Pointer, Eingabeparameter,
Deklaration: char *user;
passwd Password auf dem Zielsystem,
Eingabeparameter,
Deklaration: char *passwd;
cmd Kommando oder Shell Script,
Eingabeparameter,
Deklaration: char *cmd;
fd2p Descriptor f?ur Standard-Error,
Eingabe- und Ausgabeparameter,
fd2p = =? Standard Error = Standard Output,
Deklaration: int *fd2p;
rem Stream Socket Descriptor,
R?uckgabewert, rem=-1 im Fehlerfall,
Deklaration: int rem;

Die Zeigerliste ahost ist nach dem Aufruf von rexec unbrauchbar.

Kommandoaufruf auf dem IBM-PC:

Als Kommando steht beispielsweise auf dem IBM-PC (PC/TCP-Software der Fa. FTP)

rexec ahost [ -l user ] ?command?

zur Verf?ugung.

4 Beispiele

Das folgende Programmbeispiel zeigt als einfachste M?oglichkeit die direkte Ausf?uhrung eines Shell-Kommandos (ps -x) mit Ausgabe der Uhrzeit (date) auf dem entfernten Rechner zam999 unter der User-ID Mueller:

#include ?stdio.h?
#include ?errno.h?
#include ?netdb.h?
char *destho[]=??zam999??;
char *destus=?Mueller?;
char *dpassw=?password?;
char *dcommand=?date ; ps -x ; date?;
main()
? int ch;
struct servent *servent;
FILE *fp;
int sd;
servent=getservbyname(?exec?,?tcp?);
if (servent==0) ?
perror(?no rexecd?);
exit(errno);
?sd=rexec( destho, servent-?s?port, destus, dpassw,
dcommand, (int *) 0);
if (sd ?= ) ?
perror(?no connection?);
exit(errno);
?fp=fdopen(sd,?r?);
while ( (ch=getc(fp))!=EOF ) putchar(ch);
?

Auf dem IBM-PC wird der Kommandoaufruf rexec benutzt:

rexec zam999 -l Mueller ?date ; ps -x ; date?

5 Verf ?ugbarkeit

Die Subroutine bzw. das Kommando rexec und der Server rexecd stehen auf folgenden Systemen verf?ugbar:

IBM VM/ESA Kommando
DEC-ULTRIX (VAX und RISC) Subroutine
HP-UX Subroutine
SUN-OS Subroutine
CRAY-UNICOS Subroutine
AIX Kommando, Subroutine
MS-DOS (nur rexec) Kommando