Écrivez un expect
script.
Voici un exemple :
#!/usr/bin/expect
#If it all goes pear shaped the script will timeout after 20 seconds.
set timeout 20
#First argument is assigned to the variable name
set name [lindex $argv 0]
#Second argument is assigned to the variable user
set user [lindex $argv 1]
#Third argument is assigned to the variable password
set password [lindex $argv 2]
#This spawns the telnet program and connects it to the variable name
spawn telnet $name
#The script expects login
expect "login:"
#The script sends the user variable
send "$user "
#The script expects Password
expect "Password:"
#The script sends the password variable
send "$password "
#This hands control of the keyboard over to you (Nice expect feature!)
interact
Pour exécuter :
./myscript.expect name user password
Alors que je suggérerais d'utiliser expect
, aussi, pour une utilisation non interactive, les commandes shell normales peuvent suffire. telnet
accepte sa commande sur stdin, il vous suffit donc de diriger ou d'écrire les commandes dedans via heredoc :
telnet 10.1.1.1 <<EOF
remotecommand 1
remotecommand 2
EOF
(Edit :à en juger par les commentaires, la commande à distance a besoin d'un certain temps pour traiter les entrées ou le premier SIGHUP n'est pas pris gracieusement par telnet
. Dans ces cas, vous pouvez essayer un court sommeil sur l'entrée :)
{ echo "remotecommand 1"; echo "remotecommand 2"; sleep 1; } | telnet 10.1.1.1
Dans tous les cas, si cela devient interactif ou quoi que ce soit, utilisez expect
.
Telnet est souvent utilisé lorsque vous apprenez le protocole HTTP. J'avais l'habitude d'utiliser ce script dans le cadre de mon web-scraper :
echo "open www.example.com 80"
sleep 2
echo "GET /index.html HTTP/1.1"
echo "Host: www.example.com"
echo
echo
sleep 2
disons que le nom du script est get-page.sh alors :
get-page.sh | telnet
vous donnera un document html.
J'espère que cela sera utile à quelqu'un;)