Startpagina > Omgeving & hulpmiddelen > expect

expect: Automatisering van interactieve programma's

`expect` is een krachtige Tcl-extensie die wordt gebruikt om interacties met interactieve programma's te automatiseren. Hiermee kunt u commando's die gebruikersinvoer vereisen scripten en automatisch uitvoeren. Het wordt voornamelijk gebruikt bij het besturen van commando's zoals `ssh`, `ftp` en `passwd` binnen scripts.

Overzicht

`expect` automatiseert interactieve sessies door te wachten op vooraf gedefinieerde patronen (bijv. prompt-strings) en vervolgens specifieke strings (bijv. gebruikersinvoer) te verzenden. Hierdoor kunnen complexe taken worden uitgevoerd zonder handmatige tussenkomst.

Belangrijkste kenmerken

  • Tcl-gebaseerde scriptingtaalextensie
  • Automatisering van interacties met interactieve programma's (bijv. ssh, ftp, telnet)
  • Functies voor het matchen van promptpatronen en het verzenden van antwoorden
  • Nuttig voor het automatiseren van repetitieve en handmatige taken

Belangrijkste opties

Dit zijn opties die de uitvoeringsmethode van het `expect`-commando zelf regelen. Ze verschillen van de `expect`- en `send`-commando's die binnen scripts worden gebruikt.

Uitvoeringscontrole en debugging

Gegenereerde opdracht:

Probeer de opdrachtcombinaties.

Uitleg:

`expect` Voer het commando uit.

Combineer deze opties en voer de opdracht virtueel uit met de AI.

Installatie

`expect` is niet standaard inbegrepen in de meeste Linux-distributies en moet daarom worden geïnstalleerd via een pakketbeheerder.

Debian/Ubuntu

sudo apt update && sudo apt install expect

Installeer `expect` met de APT-pakketbeheerder.

RHEL/CentOS/Fedora

sudo dnf install expect

Installeer `expect` met de DNF (of Yum) pakketbeheerder.

Gebruiksvoorbeelden

`expect`-scripts hebben meestal de extensie `.exp` en beginnen met `#!/usr/bin/expect` om te worden uitgevoerd door de `expect`-interpreter.

Automatisch antwoorden op een eenvoudige prompt

#!/usr/bin/expect
set timeout 10
spawn sh -c "echo -n 'Proceed? (y/n) '
read response"
expect "Proceed? (y/n) "
send "y\r"
expect eof

Een script dat automatisch 'y' invoert op een vraag zoals `Proceed? (y/n)`. (Gebruikt `sh` voor het voorbeeld)

SSH-login automatisering (veiligheidswaarschuwing)

#!/usr/bin/expect
set timeout 20
set username "your_user"
set hostname "your_host"
set password "your_password"

spawn ssh $username@$hostname
expect "password:"
send "$password\r"
expect "$"
send "ls -l\r"
expect "$"
send "exit\r"
expect eof

Een voorbeeld van het automatisch inloggen op een externe server via SSH en het uitvoeren van commando's. **Het direct opnemen van wachtwoorden in scripts is zeer onveilig en wordt in productieomgevingen niet aanbevolen.**

Automatiseren van het passwd-commando (veiligheidswaarschuwing)

#!/usr/bin/expect
set timeout 10
set old_pass "old_password"
set new_pass "new_password"

spawn passwd
expect "Current password:"
send "$old_pass\r"
expect "New password:"
send "$new_pass\r"
expect "Retype new password:"
send "$new_pass\r"
expect eof

Een voorbeeld van het automatisch wijzigen van een wachtwoord met het `passwd`-commando. **Het hardcoderen van wachtwoorden in scripts is zeer onveilig.**

Tips & Aandachtspunten

`expect`-scripts zijn krachtig, maar er zijn enkele aandachtspunten om rekening mee te houden voor beveiliging en stabiliteit.

Belangrijkste tips

  • **Wachtwoordbeveiliging**: Het direct hardcoderen van wachtwoorden in scripts is zeer gevaarlijk. Overweeg omgevingsvariabelen, veilige configuratiebestanden of andere beveiligingsmechanismen zoals `ssh-agent` te gebruiken.
  • **Time-out instellen**: Gebruik het commando `set timeout` om de maximale tijd in te stellen die `expect` wacht op een specifiek patroon. De standaardwaarde is 10 seconden, en u kunt `set timeout -1` instellen voor oneindig wachten.
  • **Nauwkeurige patroonmatching**: `expect` ondersteunt reguliere expressies. Omdat prompts mogelijk niet exact overeenkomen, kunt u flexibele patronen gebruiken of de `*` wildcard benutten.
  • **Debugging**: Door `expect -d your_script.exp` uit te voeren in debugmodus, kunt u gedetailleerd zien op welke patronen `expect` wacht en welke strings het verzendt.
  • **Gebruik van `interact`**: U kunt het commando `interact` gebruiken wanneer u de controle aan de gebruiker wilt overdragen tijdens de uitvoering van het script.

Hétzelfde categoriecommando