“command not found” s'attendre à des erreurs dans le script exécuté par le shell script

Je suis en train de mettre en œuvre "shell script appelant le script expect" de sorte qu'il n'invite pas l'utilisateur pour la saisie de mot de passe ssh à chaque fois. J'ai commencé avec À l'aide de la valeur d'une variable en tant que mot de passe pour scp, ssh etc. au lieu de les demander pour l'entrée de l'utilisateur à chaque fois et compris que je devrais avoir une .sh fichier et un .exp fichier. J'ai expect installé dans mon système (course expect -v montre expect version 5.43.0).

Dans mon upload-to-server.sh fichier j'ai

cd $SOURCE_PATH/shell
./password.exp $DESTINATION_PATH $SSH_CREDENTIALS $PROJECT_INSTALLATION_PATH $PASSWORD

Et dans mon password.exp fichier j'ai

#!/usr/bin/expect -f

set DESTINATION_PATH [lindex $argv 0];
set SSH_CREDENTIALS [lindex $argv 1];
set PROJECT_INSTALLATION_PATH [lindex $argv 2];
set PASSWORD [lindex $argv 3];

spawn scp $DESTINATION_PATH/exam.tar $SSH_CREDENTIALS':/'$PROJECT_INSTALLATION_PATH
expect "password:"
send $PASSWORD"\n";
interact

Sur l'exécution de l' upload-to-server.sh fichier j'obtiens l'erreur suivante -

./password.exp: line 9: spawn: command not found
couldn't read file "password:": no such file or directory
./password.exp: line 11: send: command not found
./password.exp: line 12: interact: command not found

Je suis arrivé au code ci-dessus (dans le fichier exp) à partir de plusieurs sources (sans la compréhension de beaucoup de notions de base). Dans une source le code, c'est comme cela

#!/usr/local/bin/expect
spawn  sftp  -b cmdFile user@yourserver.com
expect "password:"
send "shhh!\n";
interact

Alors que dans une autre source comme ce

#!/usr/local/bin/expect -f
set TESTCASE_HOME [lindex $argv 0];
set TESTCASE_LIST [lindex $argv 1];
set PASSWORD [lindex $argv 3];

set timeout 200
spawn $TESTCASE_HOME/dobrt -p $TESTCASE_HOME/$TESTCASE_LIST
expect "*?assword:*" {send -- "$PASSWORD\r";}
expect eof

Il y a quelques différences y -

  • il ya un supplément de -f dans le #!/usr/local/bin/expect ligne
  • s'attendre à "?assword:" {send -- "$MOT de passe\r";} est différent de expect "password:"
    send "shhh!\n";
  • interact remplacé par expect eof.

C'est ma première expect script donc ne pas avoir la moindre idée de ce code. Les pointeurs?

Merci,
Sandeepan

Serait la clé publique d'authentification être une option? Si elle l'est, il serait le mieux (et plus facile).
Notez que la transmission des mots de passe des arguments est d'insécurité. Pour une raison quelconque, votre script expect est interprété comme un script shell. Il n'est pas apparent à partir de ce que vous avez posté, pourquoi c'est.
est-ce à stocker les mots de passe dans certains journaux et peuvent être consultés par toute personne utilisant ps aux ou quelque chose comme ça?
MYYN - je ne pense pas que l'authentification par clé publique peut être une solution exacte ici. Veuillez vérifier que ma question précédente pour l'explication
question précédente stackoverflow.com/questions/4594698/...

OriginalL'auteur Sandeepan Nath | 2011-01-06