我有一套思科防火墙,我必须擦除其中的所有数据。我想通过在命令行上使用 Python(在 Windows 计算机上)和 PuTTY Link (Plink) 来自动执行此操作。
我不断遇到的问题是当我尝试使用用户名和密码登录防火墙控制台时。当我直接从计算机访问控制台并输入用户名和密码时,没有问题并且可以访问。然而,当我尝试使用我的 Python 脚本时,它不起作用。
我正在使用 Python 的
pexpect
模块,特别是在 Windows 上运行的 PopenSpawn
类。这是我的代码部分,它捕获用户名和密码提示并应该发送相应的输入:
def login(shell, username, password):
...
shell.expect("Username: ")
sleep(1) # Inserted to keep input from going faster than the console
shell.sendline(username)
shell.expect("Password: ")
sleep(1) # ^^
shell.sendline(password)
两个
shell.expect
函数调用从防火墙控制台读取输出,直到遇到它们正在寻找的特定模式,分别是 "Username: "
和 "Password: "
。这些工作得很好。
两个
shell.sendline
函数调用应该发送一个字符串作为防火墙控制台的输入,然后发送一个换行符。
中间有一个对
sleep
的调用来帮助缓冲输入。
我设置了
shell
进程,以便在执行时将防火墙的输出打印到屏幕上。当我运行它时我看到的是这样的:
[ a bunch of booting stuff... ]
Username: <username>
<password>
<username>
Password: <password>
其中
<username>
和 <password>
是我的实际凭据。我不知道他们为什么会这样,但现在的情况是行不通的。