English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Hintergrund
In Linux-Skripten gibt es viele Szenarien, die Remoteoperationen durchführen, wie z.B. Remote-Login mit ssh, Remote-Kopieren mit scp, Dateiübertragung mit sftp und so weiter. Diese Befehle beinhalten alle die Eingabe von Sicherheitspasswörtern, und bei der normalen Verwendung der Befehle ist es erforderlich, dass der Benutzer manuell das Passwort eingibt und eine Sicherheitsvalidierung akzeptiert. Um automatisierte Remoteoperationen zu erreichen, können wir die Funktionen von expect nutzen.
expect ist eine kostenlose Programmiersprache, die zum Kommunikationsaustausch zwischen automatisierten und interaktiven Aufgaben verwendet wird, ohne menschliche Intervention. expect entwickelt sich weiter und wird mit der Zeit immer leistungsfähiger und hat sich zu einem mächtigen Assistenten für Systemadministratoren entwickelt. expect benötigt die Unterstützung der Programmiersprache Tcl, um auf dem System ausgeführt zu werden, und Tcl muss zuerst installiert werden, um expect auszuführen.
expect Installation
expect wurde auf der Basis von Tcl erstellt, daher sollten wir Tcl zuerst installieren, bevor wir expect installieren.
(一)Tcl Installation
Startseite: http://www.tcl.tk
Download-Adresse: http://www.tcl.tk/Software/tcltk/downloadnow84.tml
1.Herunterladen des Quellcodepakets
wget http://nchc.dl.sourceforge.net/sourceforge/tcl/tcl8.4.11-src.tar.gz
2.Entpacken Sie das Quellcodepaket
tar xfvz tcl8.4.11-src.tar.gz
3.Installation und Konfiguration
cd tcl8.4.11/unix ./configure --prefix=/usr/tcl --aktivieren-shared make make install
Hinweis:
1、Nach Abschluss der Installation wechseln Sie in das Wurzelverzeichnis der Tcl-Quellcodes und kopieren Sie die Datei tclUnixPort.h aus dem Unterverzeichnis unix in das Unterverzeichnis generic.
2、Entfernen Sie vorläufig die Tcl-Quellcodes, da der Installationsprozess von expect sie noch benötigt.
(二)expect Installation (benötigt Tcl-Bibliothek)
Startseite: http://expect.nist.gov/
1.Herunterladen des Quellcodepakets
wget http://sourceforge.net/Projekte/expect/Dateien/Expect/5.45/expect5.45.tar.gz/download
2.Entpacken Sie das Quellcodepaket
tar xzvf expect5.45.tar.gz
3.Installation und Konfiguration
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
expect
Das Kernstück von expect sind spawn, expect, send, set.
spawn Rufen Sie den auszuführenden Befehl auf
Ein expect-Skript muss mit interact oder expect eof enden, um automatische Aufgaben auszuführen, reicht in der Regel expect eof aus.
Andere Einstellungen
expect-Schreibsyntax
expect verwendet die Tcl-Syntax
Beispiel
login.exp ist speziell für Remote-Login vorgesehen, schnelle Verwendungsmethode: login.exp "exclude" "${remote_ip}" "${remote_user}" "${remote_passwd}" "${remote_command}"
#!/usr/bin/expect -f ########################################################## # SSH anmelden und Befehl ausführen # Parameter:1.Use_Type [check/execute] # 2.SSHServerIp # 3.SSHUser # 4.SSHPassword # 5.CommandList [Befehle werden durch Semikolon getrennt] # Rückgabewert: # 0 Erfolg # 1 Anzahl der Parameter ist falsch # 2 SSH-Server-Dienst ist nicht geöffnet # 3 SSH-Benutzername und Passwort sind falsch # 4 Verbindung zum SSH-Server ist abgelaufen ########################################################## proc usage {} { regsub ".*/" $::argv0 "" name send_user "Verwendung:\n" send_user " $name Use_Type SSHServerIp SSHUser SSHPassword CommandList\n" exit 1 } ## Parameteranzahl überprüfen if {[llength $argv] != 5} usage } # Variablenwerte setzen 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% Paketverlust" { # send_error "Ping ${SSHServerIp} ist nicht erreichbar, Bitte überprüfen Sie die IP-Adresse.\n" # exit 1 # } #} set timeout 360 set resssh 0 # Definieren Sie eine Variable, um zu markieren, ob bei der SSH-Verbindung "ja" bestätigt werden muss set inputYes 0 set ok_string ANMELDEERFOLG if {$Use_Type=="check"} { # Aktivieren Sie die SSH-Verbindung, wenn Sie bestätigen müssen, dass Sie "ja" eingeben, geben Sie "ja" ein und stellen Sie inputYes ein auf1,sonst geben Sie das SSH-Passwort ein spawn ssh ${SSHUser}@${SSHServerIp} "echo $ok_string" } else { spawn ssh ${SSHUser}@${SSHServerIp} "$CommandList" } expect { -nocase -re "ja/nein" { send -- "ja\n" set inputYes 1 } -nocase -re "assword: " { send -- "${SSHPassword}\n" set resssh 1 } #-nocase -re "Letzter Login: " { # send -- "${CommandList}\n" #} $ok_string {} -nocase -re "Verbindung abgelehnt" { send_error "SSH-Dienste auf ${SSHServerIp} sind nicht aktiv.\n" exit 2 } timeout {}}} send_error "连接到SSH服务器${SSHUser}@${SSHServerIp}超时(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用户:${SSHUser} 密码错误.\n" exit 3 } -nocase -re "assword:" { send_error "SSH用户:${SSHUser} 密码错误.\n" exit 3 } eof {} } } send_error -- "$expect_out(buffer)" #-nocase -re "No such user" { # send_error "No such user.\n" # exit 5 # } #exit
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或工作具有一定的参考价值。如有疑问,大家可以留言交流,感谢大家对呐喊教程的支持。
声明:本文内容来自网络,版权属于原作者。内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未进行人工编辑处理,也不承担相关法律责任。如果您发现涉嫌版权的内容,欢迎发送邮件至:notice#oldtoolbag.com(在发送邮件时,请将#替换为@进行举报,并提供相关证据。一经查实,本站将立即删除涉嫌侵权内容。)