使用 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,这可能会更短。
这是我的代码:
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,这可能会更短。