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

时间:2015-02-19 20:13:03

标签: ssh paramiko

这是我的代码:

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是空的

对此有任何帮助将不胜感激

1 个答案:

答案 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,这可能会更短。