Maison Opération et maintenance exploitation et maintenance Linux Exemples pour expliquer la commande expect pour implémenter l'interaction automatisée Shell

Exemples pour expliquer la commande expect pour implémenter l'interaction automatisée Shell

Dec 22, 2017 am 09:19 AM
命令 实现

Dans cet article, nous utiliserons un exemple pour expliquer la commande expect afin de réaliser une interaction automatisée Shell. Nous pouvons implémenter des fonctions de flux de contrôle simples via Shell, telles que le bouclage, le jugement, etc. L'article suivant vous présente principalement les informations pertinentes sur l'utilisation de la commande expect pour réaliser une interaction automatisée du shell. L'article le présente en détail à travers un exemple de code. Les amis dans le besoin peuvent s'y référer.

Contexte

Il existe de nombreux scénarios dans les scripts Linux pour les opérations à distance, tels que la connexion à distance SSH, la copie à distance SCP, le transfert de fichiers SFTP, etc. Ces commandes impliqueront la saisie d'un mot de passe de sécurité. L'utilisation normale de la commande nécessite la saisie manuelle du mot de passe et l'acceptation de la vérification de sécurité. Afin de réaliser des opérations à distance automatisées, nous pouvons emprunter la fonctionnalité d'expect.

expect est un langage d'outil de programmation gratuit utilisé pour réaliser des tâches de communication automatiques et interactives sans intervention humaine. Expect évolue constamment. Au fil du temps, ses fonctions deviennent de plus en plus puissantes et il est devenu un puissant assistant pour les administrateurs système. Expect nécessite la prise en charge du langage de programmation Tcl. Pour exécuter Expect sur le système, Tcl doit d'abord être installé.

L'installation de Expect

expect est créée sur la base de Tcl, nous devons donc d'abord installer Tcl avant d'installer Expect.

(1) Installation Tcl

Page d'accueil : http://www.tcl.tk

Adresse de téléchargement : http://www. tcl .tk/software/tcltk/downloadnow84.tml

1. Téléchargez le package de code source

wget http://nchc.dl.sourceforge.net/sourceforge/tcl/tcl8.4.11-src.tar.gz
Copier après la connexion

2. Décompressez le package de code source

tar xfvz tcl8.4.11-src.tar.gz
Copier après la connexion

3. Configuration de l'installation

cd tcl8.4.11/unix 
./configure --prefix=/usr/tcl --enable-shared 
make 
make install
Copier après la connexion

Remarque :

1 Une fois l'installation terminée, entrez le répertoire racine du code source tcl et copiez tclUnixPort.h sous le. sous-répertoire unix vers le sous-répertoire générique middle.

2. Ne supprimez pas encore le code source tcl, car il est toujours nécessaire pour le processus d'installation prévu.

(2) installation attendue (nécessite la bibliothèque Tcl)

Page d'accueil : http://expect.nist.gov/

1. Package source

wget http://sourceforge.net/projects/expect/files/Expect/5.45/expect5.45.tar.gz/download
Copier après la connexion

2. Décompressez le package source

tar xzvf expect5.45.tar.gz
Copier après la connexion

3. Configuration d'installation

cd expect5.45 
./configure --prefix=/usr/expect --with-tcl=/usr/tcl/lib --with-tclinclude=../tcl8.4.11/generic 
make 
make install 
ln -s /usr/tcl/bin/expect /usr/expect/bin/expect
Copier après la connexion

attendez

attendez-vous Le noyau est le spawn, l'attente, l'envoi et la définition.

spawn appelle la commande à exécuter

  • attendez-vous à ce que les informations d'invite de commande apparaissent, c'est-à-dire pour capturer l'invite de saisie de l'utilisateur :

  • send envoie des valeurs qui nécessitent une interaction, remplaçant la saisie manuelle de l'utilisateur

  • set définit les valeurs des variables

  • interagir une fois l'exécution terminée Maintenir l'état interactif et donner le contrôle à la console À ce stade, vous pouvez opérer manuellement. S'il n'y a pas de phrase de ce type, il se fermera une fois la connexion terminée, au lieu de rester sur le terminal distant.

  • expect eof Ceci doit être ajouté et correspond à spawn pour indiquer la fin des informations de sortie du terminal de capture, similaire à if....endif

expect Le script doit se terminer par Interactive ou Expect eof. Attendez-vous à ce que eof soit généralement suffisant pour effectuer des tâches automatisées.

Autres paramètres

  • Définir l'attente pour ne jamais expirer, définir le délai d'attente -1

  • Définir l'attente 300 Deuxième délai d'attente, si aucun contenu attendu n'apparaît après plus de 300, quittez le délai d'attente 300

attendez-vous à la syntaxe d'écriture

attendez-vous à utiliser la syntaxe tcl

  • Une commande Tcl se compose de mots séparés par des espaces. Parmi eux, le premier mot est le nom de la commande et les autres sont des paramètres de commande
    cmd arg arg arg

  • .
  • $ représente la valeur d'une variable. Dans cet exemple, le nom de la variable est foo.

    $foo

  • Les crochets exécutent une commande imbriquée. . Par exemple, si vous souhaitez transmettre le résultat d'une commande comme argument à une autre commande, alors vous utilisez la notation

    [cmd arg]

  • guillemets doubles pour marquer le. phrase comme argument de la commande. Le symbole "$" et les crochets sont toujours interprétés entre guillemets doubles

    "quelques trucs"

  • Les accolades marquent également une phrase comme argument de la commande. une commande. Cependant, d'autres symboles sont utilisés dans Les accolades ne sont pas interprétées

    {quelques trucs>

  • Le symbole barre oblique inverse est utilisé pour citer des symboles spéciaux. Par exemple : n représente une nouvelle ligne. . Le symbole barre oblique inverse est également utilisé. Fermez la signification particulière du symbole "$", des guillemets, des crochets et des accolades

  • Exemple

login.exp est dédié à la connexion à distance, utilisation rapide : login.exp "exclude" "${remote_ip}" "${remote_user}" "${remote_passwd}" "${remote_command}"

L'avez-vous appris ? J'espère qu'après avoir lu cet article, vous aurez une compréhension plus approfondie de l'interaction de l'automatisation du shell.

#!/usr/bin/expect -f
##########################################################
# 通过SSH登陆和执行命令
#参数:1.Use_Type [check/execute]
#  2.SSHServerIp
#  3.SSHUser
#  4.SSHPassword
#  5.CommandList [多个命令间以;间隔]
#返回值:
#  0 成功
#  1 参数个数不正确
#  2 SSH 服务器服务没有打开
#  3 SSH 用户密码不正确
#  4 连接SSH服务器超时
##########################################################
proc usage {} {
 regsub ".*/" $::argv0 "" name
 send_user "Usage:\n"
 send_user " $name Use_Type SSHServerIp SSHUser SSHPassword CommandList\n"
 exit 1
} 
## 判断参数个数
if {[llength $argv] != 5} {
 usage
}
#设置变量值
set Use_Type [lindex $argv 0]
set SSHServerIp [lindex $argv 1]
set SSHUser [lindex $argv 2]
set SSHPassword [lindex $argv 3]
set CommandList [lindex $argv 4]
#spawn ping ${SSHServerIp} -w 5
#expect {
# -nocase -re "100% packet loss" {
#  send_error "Ping ${SSHServerIp} is unreachable, Please check the IP address.\n"
#  exit 1
# }
#}
set timeout 360
set resssh 0
#定义变量标记ssh连接时是否输入yes确认
set inputYes 0
set ok_string LOGIN_SUCCESS
if {$Use_Type=="check"} {
 #激活ssh连接,如果要需要输入yes确认,输入yes,设置inputYes为1,否则输入ssh密码
 spawn ssh ${SSHUser}@${SSHServerIp} "echo $ok_string"
} else {   
 spawn ssh ${SSHUser}@${SSHServerIp} "$CommandList"
}
expect {
 -nocase -re "yes/no" {
  send -- "yes\n"
  set inputYes 1
 }
 -nocase -re "assword: " {
  send -- "${SSHPassword}\n"
  set resssh 1
 }
 #-nocase -re "Last login: " { 
 #  send -- "${CommandList}\n"
 #}
 $ok_string {}
 -nocase -re "Connection refused" {
  send_error "SSH services at ${SSHServerIp} is not active.\n"
  exit 2
 }
 timeout {
  send_error "Connect to SSH server ${SSHUser}@${SSHServerIp} timeout(10s).\n"
  exit 4
 }
}
#如果输入了yes确认,输入ssh密码
if {$inputYes==1} {
 expect {
  -nocase -re "assword: " {
   send -- "${SSHPassword}\n"
   set resssh 1
  }
 }
}
#如果出现try again或者password:提示,说明输入的用户密码错误,直接退出。
if {$resssh==1} {
 expect {
  -nocase -re "try again" {
   send_error "SSH user:${SSHUser} passwd error.\n"
   exit 3
  }
  -nocase -re "assword:" {
   send_error "SSH user:${SSHUser} passwd error.\n"
   exit 3
  }
  eof {}
 }
}
send_error -- "$expect_out(buffer)"
#-nocase -re "No such user" {
#  send_error "No such user.\n"
#  exit 5
# }
#exit
Copier après la connexion
Recommandations associées :

Script de fonction d'enregistrement et de lecture de production Linux Shell

Python réalise la fonction simple de remplacement du shell sed

Méthode FTP du shell Linux pour télécharger des fichiers en fonction de la date

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment exécuter les commandes SUDO sous Windows 11/10 Comment exécuter les commandes SUDO sous Windows 11/10 Mar 09, 2024 am 09:50 AM

La commande sudo permet aux utilisateurs d'exécuter des commandes en mode privilèges élevés sans passer en mode superutilisateur. Cet article explique comment simuler des fonctions similaires aux commandes sudo dans les systèmes Windows. Qu'est-ce que la commande Shudao ? Sudo (abréviation de « superuser do ») est un outil de ligne de commande qui permet aux utilisateurs de systèmes d'exploitation Unix tels que Linux et MacOS d'exécuter des commandes avec des privilèges élevés généralement détenus par les administrateurs. Exécution de commandes SUDO sous Windows 11/10 Cependant, avec le lancement de la dernière version préliminaire de Windows 11 Insider, les utilisateurs de Windows peuvent désormais profiter de cette fonctionnalité. Cette nouvelle fonctionnalité permet aux utilisateurs de

Comment mettre en œuvre la double connexion WeChat sur les téléphones mobiles Huawei ? Comment mettre en œuvre la double connexion WeChat sur les téléphones mobiles Huawei ? Mar 24, 2024 am 11:27 AM

Comment mettre en œuvre la double connexion WeChat sur les téléphones mobiles Huawei ? Avec l’essor des réseaux sociaux, WeChat est devenu l’un des outils de communication indispensables dans la vie quotidienne des gens. Cependant, de nombreuses personnes peuvent rencontrer un problème : se connecter à plusieurs comptes WeChat en même temps sur le même téléphone mobile. Pour les utilisateurs de téléphones mobiles Huawei, il n'est pas difficile d'obtenir une double connexion WeChat. Cet article explique comment obtenir une double connexion WeChat sur les téléphones mobiles Huawei. Tout d'abord, le système EMUI fourni avec les téléphones mobiles Huawei offre une fonction très pratique : l'ouverture d'une double application. Grâce à la fonction de double ouverture de l'application, les utilisateurs peuvent simultanément

Comment vérifier l'adresse MAC de la carte réseau sous Win11 ? Comment utiliser la commande pour obtenir l'adresse MAC de la carte réseau sous Win11 ? Comment vérifier l'adresse MAC de la carte réseau sous Win11 ? Comment utiliser la commande pour obtenir l'adresse MAC de la carte réseau sous Win11 ? Feb 29, 2024 pm 04:34 PM

Cet article expliquera aux lecteurs comment utiliser l'invite de commande (CommandPrompt) pour trouver l'adresse physique (adresse MAC) de la carte réseau dans le système Win11. Une adresse MAC est un identifiant unique pour une carte d'interface réseau (NIC), qui joue un rôle important dans les communications réseau. Grâce à l'invite de commande, les utilisateurs peuvent facilement obtenir les informations d'adresse MAC de toutes les cartes réseau de l'ordinateur actuel, ce qui est très utile pour le dépannage du réseau, la configuration des paramètres réseau et d'autres tâches. Méthode 1 : utilisez « Invite de commandes » 1. Appuyez sur la combinaison de touches [Win+X], ou [cliquez avec le bouton droit], cliquez sur le [logo Windows] dans la barre des tâches, et dans l'élément de menu qui s'ouvre, sélectionnez [Exécuter] ; . Exécutez la fenêtre, entrez la commande [cmd], puis.

Où se trouve le mode de session amélioré Hyperv ? Conseils pour activer ou désactiver le mode de session amélioré Hyper-V à l'aide des commandes dans Win11. Où se trouve le mode de session amélioré Hyperv ? Conseils pour activer ou désactiver le mode de session amélioré Hyper-V à l'aide des commandes dans Win11. Feb 29, 2024 pm 05:52 PM

Dans le système Win11, vous pouvez activer ou désactiver le mode de session amélioré Hyper-V via des commandes. Cet article expliquera comment utiliser les commandes pour fonctionner et aidera les utilisateurs à mieux gérer et contrôler les fonctions Hyper-V dans le système. Hyper-V est une technologie de virtualisation fournie par Microsoft. Elle est intégrée à Windows Server et Windows 10 et 11 (sauf Home Edition), permettant aux utilisateurs d'exécuter des systèmes d'exploitation virtuels sur les systèmes Windows. Bien que les machines virtuelles soient isolées du système d'exploitation hôte, elles peuvent toujours utiliser les ressources de l'hôte, telles que les cartes son et les périphériques de stockage, via les paramètres. L'un des paramètres clés consiste à activer le mode de session améliorée. Le mode de session amélioré est Hyper

Hyper pratique ! Commandes Sar qui feront de vous un maître Linux Hyper pratique ! Commandes Sar qui feront de vous un maître Linux Mar 01, 2024 am 08:01 AM

1. Présentation La commande sar affiche les rapports d'utilisation du système grâce aux données collectées à partir des activités du système. Ces rapports sont composés de différentes sections, chacune contenant le type de données et la date à laquelle les données ont été collectées. Le mode par défaut de la commande sar affiche l'utilisation du processeur à différents incréments de temps pour diverses ressources accédant au processeur (telles que les utilisateurs, les systèmes, les planificateurs d'E/S, etc.). De plus, il affiche le pourcentage de CPU inactif pour une période de temps donnée. La valeur moyenne de chaque point de données est répertoriée au bas du rapport. sar rapporte des données collectées toutes les 10 minutes par défaut, mais vous pouvez utiliser diverses options pour filtrer et ajuster ces rapports. Semblable à la commande uptime, la commande sar peut également vous aider à surveiller la charge du processeur. Grâce à sar, vous pouvez comprendre l'apparition d'une charge excessive

Guide de programmation PHP : méthodes pour implémenter la séquence de Fibonacci Guide de programmation PHP : méthodes pour implémenter la séquence de Fibonacci Mar 20, 2024 pm 04:54 PM

Le langage de programmation PHP est un outil puissant pour le développement Web, capable de prendre en charge une variété de logiques et d'algorithmes de programmation différents. Parmi eux, l’implémentation de la séquence de Fibonacci est un problème de programmation courant et classique. Dans cet article, nous présenterons comment utiliser le langage de programmation PHP pour implémenter la séquence de Fibonacci et joindrons des exemples de code spécifiques. La suite de Fibonacci est une suite mathématique définie comme suit : le premier et le deuxième élément de la suite valent 1, et à partir du troisième élément, la valeur de chaque élément est égale à la somme des deux éléments précédents. Les premiers éléments de la séquence

Comment implémenter la fonction de clonage WeChat sur les téléphones mobiles Huawei Comment implémenter la fonction de clonage WeChat sur les téléphones mobiles Huawei Mar 24, 2024 pm 06:03 PM

Comment mettre en œuvre la fonction de clonage WeChat sur les téléphones mobiles Huawei Avec la popularité des logiciels sociaux et l'importance croissante accordée à la confidentialité et à la sécurité, la fonction de clonage WeChat est progressivement devenue le centre d'attention. La fonction de clonage WeChat peut aider les utilisateurs à se connecter simultanément à plusieurs comptes WeChat sur le même téléphone mobile, ce qui facilite la gestion et l'utilisation. Il n'est pas difficile de mettre en œuvre la fonction de clonage WeChat sur les téléphones mobiles Huawei. Il vous suffit de suivre les étapes suivantes. Étape 1 : Assurez-vous que la version du système de téléphonie mobile et la version de WeChat répondent aux exigences. Tout d'abord, assurez-vous que la version de votre système de téléphonie mobile Huawei a été mise à jour vers la dernière version, ainsi que l'application WeChat.

Quelle est la bonne façon de redémarrer un service sous Linux ? Quelle est la bonne façon de redémarrer un service sous Linux ? Mar 15, 2024 am 09:09 AM

Quelle est la bonne façon de redémarrer un service sous Linux ? Lors de l'utilisation d'un système Linux, nous rencontrons souvent des situations dans lesquelles nous devons redémarrer un certain service, mais nous pouvons parfois rencontrer des problèmes lors du redémarrage du service, comme le fait que le service ne s'arrête ou ne démarre pas réellement. Par conséquent, il est très important de maîtriser la bonne manière de redémarrer les services. Sous Linux, vous pouvez généralement utiliser la commande systemctl pour gérer les services système. La commande systemctl fait partie du gestionnaire système systemd

See all articles