python ssh登录设备_使用python来玩转ensp~系列2-ssh方式登录管理设备

目录回归:

Telnet传输过程采用TCP进行明文传输,存在很大的安全隐患,如无特殊需求,一般也会建议禁用telnet,而采用ssh协议。

今天小Q学习记录主要分成两个目标,分别是:

1、根据上次学习的telnet远程登录设备,修改下脚本,使其功能实现:自动开启ssh功能

2、使用ssh来登录设备,并执行简单命令,获取设备基础信息

下面开始咯:

关于设备的开启ssh,小Q参考了zWX67834大牛的文章。

命令记录如下:

[R1]stelnet server enable

[R1-aaa]local-user ssh001 privilege level 3 password cipher ssh001

Info: Add a new user.

[R1-aaa]local-user ssh001 service-type ssh

[R1-aaa]q

[R1]user-interface vty 0 4

[R1-ui-vty0-4]authentication-mode aaa

[R1-ui-vty0-4]protocol inbound ssh

小脚本的代码修改自上个帖子,如果执行用户模式命令就使用UsermodeRunCommand函数,如果执行sys模式命令就使用SysmodeRunCommand函数

代码如下:

#!/usr/bin/python

#coding=utf-8

# 通过telnet 开启ssh协议 并关闭telnet协议

import telnetlib

import os

import time

import sys

reload(sys)

sys.setdefaultencoding("utf-8")

### 配置登录信息

_Username = 'huawei'

_Password = 'huawei123'

_Host = '192.168.1.110'

# 命令结束提示符

# 正常模式如 来提示用户输入命令,所以取>为作为标志符

_UsermodTag = '>'

# system-view模式如[R1] 来提示用户输入命令,所以取]为作为标志符

_SysrmodTag = ']'

# 封装到一个登录函数里面

def ConnHwTelnet(_Host,_Username,_Password,_UsermodTag='>',_SysrmodTag=']'):

# 实例化telnet对象,建立一个主机连接

telnetsession = telnetlib.Telnet(_Host)

# 开启调试,按需开启,方便判断

#telnetsession.set_debuglevel(2)

# read_until()来判断缓冲区中的数据是否有想要的内容,如果没有就等待

# 当然也可以使用expect方法,与read_until差不多,但是它可以支持正则表达式,功能要强大得多

# 区配字符,当出现'Username'时,输入用户名

login_prompt = 'Username'

response = telnetsession.read_until(login_prompt)

if login_prompt in response:

#print response

print '[*] Username: ',_Username

telnetsession.write(_Username + "\n")

time.sleep(2)

# 区配字符,当出现'Password'时,输入密码

password_prompt = 'Password'

response = telnetsession.read_until(password_prompt)

if password_prompt in response:

#print response

print '[*] Password: ',_Password

time.sleep(2)

telnetsession.write(_Password+ "\n")

# 如果登录成功,则出现类似,使用_UsermodTag来进行捕获

response = telnetsession.read_until(_UsermodTag)

if _UsermodTag in response:

print response

time.sleep(2)

# 成功后,返回一个成功链接实例

return telnetsession

# 执行用户模式命令

def UsermodeRunCommand(telnetsession,command,_UsermodTag='>'):

command = "%s\n" % command

telnetsession.write(command)

response = telnetsession.read_until(_UsermodTag)

if _UsermodTag in response:

print response

# 执行system模式命令

def SysmodeRunCommand(telnetsession,command,_SysrmodTag=']'):

command = "%s\n" % command

telnetsession.write(command)

response = telnetsession.read_until(_SysrmodTag)

if _SysrmodTag in response:

print response

if __name__ == '__main__':

telnetsession = ConnHwTelnet(_Host,_Username,_Password,_UsermodTag,_SysrmodTag)

# 如果执行用户模式命令就使用UsermodeRunCommand函数,如果执行sys模式命令就使用SysmodeRunCommand函数

# 开启 ssh

# 1 切换到system-view

SysmodeRunCommand(telnetsession,"system-view")

# 2 开启SSH服务并创建账号,帐号可以自行设置

SysmodeRunCommand(telnetsession,"stelnet server enable")

SysmodeRunCommand(telnetsession,"aaa")

SysmodeRunCommand(telnetsession,"local-user hw001 privilege level 3 password cipher hw001")

SysmodeRunCommand(telnetsession,"local-user hw001 service-type ssh")

SysmodeRunCommand(telnetsession,"q")

# 3 配置VTY上允许SSH协议

SysmodeRunCommand(telnetsession,"user-interface vty 0 4")

SysmodeRunCommand(telnetsession,"authentication-mode aaa")

SysmodeRunCommand(telnetsession,"protocol inbound ssh")

# 测试完毕后,关闭连接

telnetsession.close()

print '[*] Session Close.'

运行后,将会开启ssh服务,并添加一个账号,结果如下,

此时设备已经开启了ssh,使用putty进行检测一下:

好的,现在我们的设备已经支持了ssh登录,接下来我们将编写脚本来使用ssh登录设备。

此次小Q将使用Exscript这个模块来编写脚本,安装此脚本和简单的使用的详细教程请看此链接

登录成功后将进行基本的检查操作 'display

version','display startup','display clock',代码如下,

#!/usr/bin/python

#coding=utf-8

# 通过ssh协议 登录设备,并执行命令

from Exscript.util.interact import read_login

from Exscript.protocols import SSH2

from Exscript import Account

import os

import time

import sys

reload(sys)

sys.setdefaultencoding("utf-8")

### 配置登录信息

_Username = 'hw001'

_Password = 'hw001'

_Host = '192.168.1.110'

def LoginSSH(_Host,_Username,_Password) :

print "[+] Loging Host : %s " % _Host

account = Account(_Username,_Password)

ssh = SSH2()

try :

print "[+] Trying to Login in with username: %s password: %s " % (_Username,_Password)

ssh.connect(_Host)

ssh.login(account)

except Exception,e:

print "[-] Failed! ...",e

return 'LoginError',ssh

print "[+] Success ... username: %s and passoword %s is VALID! " % (_Username, _Password)

return 'LoginSuccess',ssh

def StartExecuteCommand(sshConnection,command):

sshConnection.execute(command)

print sshConnection.response

if __name__ == '__main__':

LoginResult,sshConnection = LoginSSH(_Host,_Username,_Password)

# 登录成功后即可执行命令,基本检查信息

Commandlist = ['display version','display startup','display clock']

if LoginResult == 'LoginSuccess':

for command in Commandlist:

StartExecuteCommand(sshConnection,command)

# 关闭连接

sshConnection.close()

print '[*] Session Close.'

看,自动管理设备设备就是这么简单,只要简单改脚本,就可以支持批量管理设备了,同时也可以把输出信息写到一个文件中,这样就可以随时查看了。

接下来小Q将学习编写一个自动备份配置的小东东。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值