这是我的代码:
conn = SSH2()
conn.connect(host)
conn.authenticate(account)
print (conn.response)
conn.send('enable 8\n') <--------------first problem: execute("enable 8') does not work here. Can't understand why. I have to use send
conn.execute('somepassword')
print (conn.response)
conn.execute('term len 0') <--------------fore some reason the output for this command makes it to the outputs list that I am creating below
print (conn.response)
for command in commands:
print "Executing command", command
try:
conn.execute(command)
print (conn.response)
except:
e = sys.exc_info()[0]
output="Unsupported command or timeout"
outputs.append(output)
回顾:
- 上面没有提到但是我必须启动脚本,它会在我第一次运行(超时)时失败,然后第二次尝试成功
- 为什么授权不执行执行?
为什么我的命令的输出似乎被延迟了?我的理解是每次当我运行“执行('命令')时,exscript等待输出,然后继续执行下一个命令。
假设我有命令1,2,3,5
有时我看到命令2和3的输出存储在一起,看起来它们是由一个conn.response接收而前一个conn.response是空的
对此有任何帮助将不胜感激
答案 0 :(得分:0)
exscript mailing list讨论了这个问题。为了完整起见,我也会在这里回答。
第一个问题:
由于某种原因,os猜测器无法正确识别设备,因此使用了无效的通用驱动程序。
这可以通过filing a bug修复或手动设置驱动程序(在这种情况下为ios)。
第二个问题:
请不要执行密码(execute('somepassword')
)!这可能会导致一团糟。
请改用exscripts身份验证/授权机制。
以下内容应该有效:
from Exscript.util.interact import read_login
from Exscript.protocols import SSH2
account = read_login()
conn = SSH2()
# setting driver manually would be:
# conn = SSH2(manual_driver="ios")
conn.connect("host")
conn.authenticate(account)
conn.send('enable 8\n')
# if authorization password differs from login password
# you have to set it in account instance
account.set_authorization_password("<enable password>")
conn.app_authorize(account)
conn.autoinit()
outputs = []
for command in commands:
print "Executing command", command
try:
conn.execute(command)
output = conn.response
except:
e = sys.exc_info()[0]
output = "Unsupported command or timeout"
outputs.append(output)
如果使用exscripts高级API,这可能会更短。