“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é parexpect eof
.
C'est ma première expect script
donc ne pas avoir la moindre idée de ce code. Les pointeurs?
Merci,
Sandeepan
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
Vous devez vous connecter pour publier un commentaire.
Ne rien faire de tout cela! Vous devez utiliser l'authentification par clé publique comme le commentaire ci-dessus suggère. La façon dont vous allez laisse les mots de passe en clair et est fragile.
L'authentification par clé publique est beaucoup plus facile de l'installation, par exemple: instructions d'installation
OriginalL'auteur sjr
Êtes-vous sûr que vous êtes en train de faire
Et pas
?? Ce dernier aurait la coque en essayant d'interpréter le fait de s'attendre d'un programme.
Entièrement d'accord que les clés ssh sont la bonne solution.
./password.exp $DESTINATION_PATH $SSH_CREDENTIALS $PROJECT_INSTALLATION_PATH $PASSWORD
. Mais à l'aide de clés ssh, comment puis-je restreindre l'accès à l'aide de mot de passe SSH uniquement alors? N'importe qui peut exécuter le script, si le système a les bonnes touches (en tant que de besoin par l'authentification par clé publique - ne pas aller en profondeur encore). Veuillez vérifier ma question stackoverflow.com/questions/4594698/... Comment faire cela? Ai-je raté quelque chose?OriginalL'auteur glenn jackman