首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Junos PyEZ从Python输入密码

Junos PyEZ从Python输入密码
EN

Stack Overflow用户
提问于 2015-09-11 16:30:53
回答 2查看 979关注 0票数 3

您好,我目前正在学习PyEZ在Python中配置JunOS设备。但是我被某个问题卡住了。我希望能够通过python创建新用户,但我不知道如何使用Python输入密码。我尝试了很多不同的方法,但似乎都不能让它起作用。任何建议都会得到重视。

代码语言:javascript
复制
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')

下面是错误

代码语言:javascript
复制
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)
EN

回答 2

Stack Overflow用户

发布于 2015-11-16 11:09:35

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

您看到的错误是因为您正在发送pass_New 'Read1234‘,而Junos正在等待特定的set命令。

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

要做到这一点,你需要一个散列模块--我使用passlib,因为OSX中的crypt()函数会输出与Junos不兼容的散列,尽管它们都是BSD的变体--想想看。

代码语言:javascript
复制
#!/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()
票数 7
EN

Stack Overflow用户

发布于 2016-08-30 13:45:28

还要补充为什么我们不能

代码语言:javascript
复制
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')

我注意到您正在尝试使用load键入/retupe password,这不是load函数的工作方式。PyEZ在netconf的后台工作中,它不是屏幕刮板。因此,我们不应该尝试模拟这一点。当我们调用load时,它会尝试通过load-configuration rpc加载配置。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32518979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档