Lassen Sie ein Shell-Skript Befehle in Telnet oder Programmen ausführen

7

Ich möchte ein Shell-Skript erstellen, das Befehle auf einem Gerät ausführt, das ich mit oder in Programmen wie FTP oder OpenSSL telnete. Ich habe bereits eine Methode in FTP gefunden, die ungefähr so ​​aussehen würde:

#!/bin/sh
HOST='0.0.0.0'
USER='User'
PASSWD='Pass'
FILE='~/Desktop/file.txt'
RFILE='file.txt'

ftp -n $HOST <<END_SCRIPT
quote USER $USER
quote PASS $PASSWD
binary
passive
put $FILE $RFILE
quit
END_SCRIPT
exit 0

Wie kann ich etwas Ähnliches mit Geräten tun, mit denen ich telnet oder in verschiedenen Programmen?

TheBro21
quelle
Verwenden expectoder schreiben Sie ein Perl-Skript, das verwendet Expect.pm(oder eines der Perl- Net::*Module wie Net::Telnetoder Net:SSHusw.), oder ein Python-Skript, das verwendet pexpect.
Cas
@cas Ich möchte mich an das Shell-Skript halten, da es keine Installation benötigt und auf andere UNIX-ähnliche Systeme portierbar ist.
TheBro21
Dann ist es schade, dass sh (in einer seiner Variationen) der Aufgabe nicht wirklich gewachsen ist. Es gibt zu viele Dinge, die schief gehen können (oder einfach nur unerwartet sind), die ein einfaches Umleitungsskript nicht bewältigen kann. Es gibt einen Grund, warum Tools wie expectund die anderen, die ich erwähnt habe, existieren - und das liegt daran, dass Shell-Skripte nicht in der Lage sind, die Arbeit zuverlässig zu erledigen.
Cas
@cas Wenn es keinen Weg gibt, können Sie eine Antwort auf die Erstellung dieses Perl-Skripts geben
TheBro21
Sie haben nicht annähernd genug Details angegeben, um ein Skript zu schreiben. Es wird jedoch nicht benötigt - es gibt viele Beispiele für expectetc-Skripte auf dieser Site (und zum Stapelüberlauf und Serverfehler). Beginnen Sie mit einigen Links unter der Überschrift rechts. Durchsuchen Sie auch die SE-Sites nach Expect und / oder den von mir erwähnten Perl- und Python-Bibliotheken.
Cas

Antworten:

16

Vor einiger Zeit brauchte ich etwas Ähnliches. Sie können es mit so etwas versuchen:

#!/bin/sh

HOST='0.0.0.0'
USER='User'
PASSWD='Pass'
CMD=''

(
echo open "$HOST"
sleep 2
echo "$USER"
sleep 2
echo "$PASSWD"
sleep 2
echo "$CMD"
sleep 2
echo "exit"
) | telnet

PS1: Ich benutze "sleep 2", weil ich über Satellit zugreife. Wenn es LAN ist, brauchen Sie vielleicht überhaupt keinen "Schlaf".

PS2: Gib einfach das, was du brauchst, in die CMD-Variable ein

lester289
quelle
1
Ich danke dir sehr! Ich bin verrückt geworden, weil ich versucht habe, Erwartung und automatische Erwartung zum Funktionieren zu bringen, wenn ich das einfach hätte tun können! :)
NaturalBornCamper
Da expectdiese Lösung nicht zur Verfügung steht, erspart sie mir so viele Kopfschmerzen. Ich brauchte nur die sofortige Ausgabe von telnet localhost 25, um zu überprüfen, was gedruckt wird, und das Piping usleep 10000funktioniert hervorragend (lassen Sie es taumeln und schließen Sie dann die Verbindung). Vielen Dank.
Joshua Detwiler