我一直试图写一个脚本来简化我的工作。我用shell命令尝试过,但代码看起来太直截了当,老实说太业余了。我正在尝试学习python的脚本编写,在您的帮助下,我希望我的这个问题可以变成一个解释性的实践。
下面是我编写的shell代码:

#!/usr/bin/expect

spawn telnet IPaddress
sleep 0.1
expect "Enter username and password"
send "username password \n"
sleep 0.1
send "debug; \n"
sleep 0.1
send "def t1 suspend_loader \n"
expect "enter subcommands"
send "traceback \n \n;"
sleep 1
send "act t1 \n"
sleep 0.1
send "quit \n"
sleep 0.1
send "stor2tst;audit_modules \n"
expect "PS Checksum audit completed"
send "quit \n"
sleep 0.1
send "debug"
sleep 0.1
send "print t1 \n"
sleep 0.5
send "quit \n"
sleep 0.1
send "logutil;open MOD;back all;quit \n"
sleep 0.1
send "debug \n"
sleep 0.1
send "di modules:pr.514 d 1 (&0) char n=68 \n"
send "quit \n"
sleep 1
send "quit \n"
send "logout \n"



interact

正如您可能已经猜到的,这段代码是为特定的交换机接口设计的。用户名和密码提示在一行中出现。为了执行几个命令,我需要特定的shell级别(如调试级别)。我在这里也使用了expect模块,但我认为它只是传递而没有检查expect部分中的字符串。
我想做什么?
我需要远程登录到已知IP地址列表(20台服务器)。
所有服务器都有相同的用户名和密码。
我需要在每台服务器上执行这些命令集,并返回用于在指定目录(例如/tmp/dir)下分隔日志文件的任何输出。
此外,有几个命令需要“双击”才能执行!这就是为什么我在traceback命令之后使用\n\n。
如有任何帮助,我们将不胜感激。
提前谢谢你,

最佳答案

我已经为自己编写了以下代码,我希望这可以帮助人们寻找类似的解决方案:

#!/usr/bin/expect

set timeout 150

array set hosts {0 <IPaddr> 1 <IPaddr> 2 <IPaddr> 3 <IPaddr> 4 <IPaddr> 5 <IPaddr> 6 <IPaddr> 7 <IPaddr> 8 <IPaddr> 9 <IPaddr> 10 <IPaddr> 11 <IPaddr>}

for {set i 0} {$i < 12 } { incr i } {

spawn telnet $hosts($i)
expect "Enter username and password"
send "root toor \n"
sleep 2
expect ">" {send "print '****************$hosts($i)****************' \n"}
expect ">" {send "command \n"}
expect ">" {send "command \n"}
expect ">" {send "command \n"}
expect "enter subcommands"
expect ">" {send "command \n\n"}
expect ">" {send "command \n"}
expect ">" {send "command \n"}
expect ">" {send "print '****************$hosts($i)****************' \n"}
interact
}

正如我在对问题的描述中提到的,此代码是专门设计用于Nortel DMS类型交换机的,因此请执行我的代码的可能的低级设计。重要的是它能工作并满足我们的需求。:)
干杯!

关于python - 使用python脚本通过telnet在远程主机上执行命令,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32228534/

10-17 02:30