使用 ssh 时 exscript 的多个问题:延迟输出、延迟启动连接、授权问题

Multiple problems with exscript when I use ssh: delayed outputs, delays in initiating the connection, authorization problems

这是我的代码:

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)

回顾一下:
- 这在上面没有提到,但我必须启动脚本,它会在我的第一个运行(超时)中失败,然后第二次尝试成功
-为什么授权不适用于执行?
- 为什么我的命令输出似乎有延迟?我的理解是,每次当我 运行 一个“执行('command')时,exscript 等待输出,然后才继续执行下一个命令。
假设我有命令 1,2,3,4
有时我看到命令 2 和 3 的输出存储在一起,它们看起来像是被一个 conn.response 接收,而前一个 conn.response 是空的

如有任何帮助,我们将不胜感激

该问题已在 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,这可能会更短。