Junos PyEZ从Python输入密码

Osc*_*sen 3 python passwords automation pyez

您好我正在学习PyEZ从Python配置JunOS设备.但我遇到了一个问题.我希望能够通过Python创建新用户,但我无法弄清楚如何使用python输入密码.我尝试了许多不同的东西,但似乎无法使其发挥作用.任何建议都会得到满足

from jnpr.junos import Device
from jnpr.junos.utils.config import Config  

dev = Device(host='192.168.56.2', user='root', password='Juniper1')
dev.open()
cu=Config(dev)

new_User='set system login user Read class read-only authentication plain-text-password'
pass_New='Read1234'
pass_Repeat='Read1234'

cu.load(new_User, format='set')
cu.load(pass_New,format='set')
cu.load(pass_Repeat,format='set')
Run Code Online (Sandbox Code Playgroud)

这是错误

Traceback (most recent call last):
  File "/home/oscar/PycharmProjects/Junos/HelloWorld.py", line 18, in <module>
    cu.load(pass_New,format='set')
  File "/usr/local/lib/python2.7/dist-packages/jnpr/junos/utils/config.py", line 377, in load
    return try_load(rpc_contents, rpc_xattrs)
  File "/usr/local/lib/python2.7/dist-packages/jnpr/junos/utils/config.py", line 343, in try_load
    raise ConfigLoadError(cmd=err.cmd, rsp=err.rsp, errs=err.errs)
jnpr.junos.exception.ConfigLoadError: ConfigLoadError(severity: error, bad_element: Read1234, message: unknown command)
Run Code Online (Sandbox Code Playgroud)

Ben*_*ale 5

当您使用PyEZ应用配置时,模块期待原子配置blob; 它不仅仅是交互式CLI shell的替代品.

您看到的错误是因为当Junos期待特定的set命令时,您正在发送pass_New'Read1234' .

为了实现您的目标,您必须在代码中提供密码的散列版本,并将其作为new_User命令的一部分发送.

要做到这一点,你需要一个散列模块 - 我使用passlib,因为OSX中的crypt()函数吐出与Junos不兼容的散列,即使它们都是BSD变体 - 如图所示.

#!/usr/bin/python
from passlib.hash import md5_crypt
from jnpr.junos import Device
from jnpr.junos.utils.config import Config

username = 'Read'
plaintext = 'toomanysecrets'

dev = Device(host='192.168.56.2', user='root',passwd='Juniper1')
dev.open()
cu=Config(dev)
hashedpassword = md5_crypt.encrypt(plaintext)
set_command = 'set system login user '+username+' class read-only authentication encrypted-password '+hashedpassword
cu.load(set_command, format='set')
dev.commit()
dev.close()
Run Code Online (Sandbox Code Playgroud)