[ TOC ]

0. 前言

自上一篇文章《用python怎么telnet到网络设备》,简单使用了telnetlib库给大家演示了下,但是,现实环境中仍不建议去使用telnet。

SSH(Secure Shell)协议也是属于TCP/IP协议族里的一种,端口号22,可以代替telnet来远程管理的一种方法。

SSH提供了双向认证、数据加密等方法保证数据的安全性,推荐使用SSHv2版本

1. 测试环境及关键代码解释

1.1 简单测试环境

使用python3环境

使用第三方Netmiko模块(基于Paramiko库进行改版)

简单的实验环境

1.2 关键代码

import xx:导入模块

class xx:定义类

def xx: 定义函数

try-except :处理可能引发的异常

ssh.enable():进入enable模式

ssh.find_prompt():返回当前提示符

ssh.send_command():发送查询命令并返回结果

ssh.send_config_set():发送配置命令到目标设备

ssh.disconnect():关闭连接

Tips: import ConnectHandler和import Netmiko是一样的效果的哈。

2. 完整代码

'''

欢迎关注微信公众号:'diandijishu'

此平台是网路工程师个人日常技术、项目案例经验分享,

为巩固及提升技术能力乃至共享所学所知技术,

也欢迎各位工程师一起分享、一起成长。

'''

#!/usr/bin/env python

#coding:utf-8

from netmiko import ConnectHandler

from netmiko.ssh_exception import NetMikoTimeoutException

from netmiko.ssh_exception import NetMikoAuthenticationException

from datetime import datetime

import time

import logging

from my_devices import device_list as devices

'定义类'

class SSH_Client():

'定义login_host函数,用于登陆设备'

def login_host(self , a_device):

try:

self.ssh = ConnectHandler(**a_device)

self.ssh.enable()

reply = self.ssh.find_prompt()

print('>' * 10 + '成功登陆结果如下:' + '>' * 10 + '\n' + reply)

return True

except ValueError:

logging.warning(a_device['host'] + ' Secret 密码错误')

except NetMikoTimeoutException:

logging.warning(a_device['host'] + ' 连接不上设备,请检查网络是否正常通信')

except NetMikoAuthenticationException:

logging.warning(a_device['host'] + ' 登陆失败,用户名或密码错误')

'定义do_cmd函数,用于执行命令'

def do_cmd(self,cmds):

'读取文件,for语句循环执行命令'

with open(cmds) as cmd_obj:

for cmd in cmd_obj:

reply = self.ssh.send_command(cmd)

time.sleep(2)

logging.warning('>' * 10 + cmd.rstrip() + ' 命令执行结果如下:' + '>' * 10 + '\n' + reply)

'定义logout_host函数,关闭程序'

def logout_host(self):

self.ssh.disconnect()

if __name__ == '__main__':

cmds = 'cmd.txt' # 存放执行命令文件,相对路径

ssh_client = SSH_Client()

start_time = datetime.now()

for a_device in devices:

'如果登录结果为True,则执行命令,然后退出'

if ssh_client.login_host(a_device):

ssh_client.do_cmd(cmds)

ssh_client.logout_host()

time.sleep(2)

stop_time = datetime.now()

print('总花费时长:{0}\n'.format(stop_time - start_time))

3. 运行效果

4. 报错效果

4.1 远程连接不上

4.2 用户名和密码错误

5. 碎碎语

结合两篇文章,想必大家都知道如何用python使用自带库或第三方库去telnet或ssh网络设备,然而大家可能就会问,如果设备包含多厂商、网络设备telnet和ssh混杂、众多网络设备,那代码又如何去优化呢?的确,要解决一系列问题,咱们得一个一个来哈,也顺便给入门的小伙伴慢慢熟悉下,后面的文章我给大家讲解如何使用多进程和多线程进行优化、完整版网络巡检。

本人代码功夫不深,如有缺陷望指教,多谢。

如果喜欢的我的文章,欢迎关注我的公众号:点滴技术,扫码关注,不定期分享

如果喜欢的我的文章,欢迎关注我的公众号:点滴技术,扫码关注,不定期分享

python ssh登录设备_用Python怎么SSH到网络设备相关推荐

  1. python编写登录接口_使用python编写一个登录接口

    需求: 编写登录接口 输入用户名密码 认证成功后 显示欢迎信息 输入三次后锁定 用户信息文件 黑名单的文件 黑名单里检查,不让登录 用户名密码判定 流程图: 代码:#!/usr/bin/env pyt ...

  2. python获取登录按钮_用Python实现一个最新QQ办公版(TIM)的登录界面

    最近,QQ的办公版本--TIM进行了一次更新升级.本次更新升级大幅修改了界面的样式,看起来更加的清爽.简洁和高效了. 这种界面州的先生还是比较喜欢的,没有QQ那么花里胡哨,也比微信那些残缺的功能更加丰 ...

  3. python调用usb设备_用Python与USB设备通信

    假设您使用Linux和libusb-1.0作为PyUSB的后端库.// Detach a kernel driver from an interface. // If successful, you ...

  4. python 自动登录网站_用Python实现自动点击和登录网站帐户

    用Python实现起来,很简单,二十行代码以内就可以实现. 比方说,我想自动打开京东会员的网站,输入用户名和密码,点登录,然后点签到. 代码可以这么写: JDSignup.py import time ...

  5. python调用扫描仪设备_在Python中使用串行端口从扫描仪读取输入

    这个问题似乎措辞不当.您可以使用Python的raw_input函数从标准输入中读取数据以提问,如果您知道设备通信的波特率,您可以从串行端口读取字节(否则您将收到垃圾邮件).从这个示例中,我不确定您到 ...

  6. python模拟登录网站_用python实现模拟登录人人网

    我决定从头说起.懂的人可以快速略过前面理论看最后几张图. web基础知识 从OSI参考模型(从低到高:物理层,数据链路层,网络层,传输层,会话层,表示层,应用层)来说,我们的互联网属于应用层.从TCP ...

  7. python urlretrieve登录下载_使用python urlretrieve下载文件

    urlretrieve()方法直接将远程数据下载到本地.urlretrieve()是python urllib下的一个函数,python3已经将urlretrieve()移到urllib.reques ...

  8. python用户登录程序_「Python」每日一练:函数的应用之注册登录程序

    编程题 函数的应用之注册登录程序 任务内容:要求模拟系统注册及登录的情境,注册密码要求:密码是6位或以上,必须包涵大写字母.小写字母.数字.程序若未退出前,则一直循环运行. 程序编写要求:按要求完善各 ...

  9. python调用usb设备_在Python中查询连接的USB设备信息的简单方法?

    我能想到像这样的快速代码. 由于所有USB端口都可以通过/ dev / bus / usb / / 对于生成的ID,即使您拔下设备并重新连接它[可能是其他端口].它会是一样的. import re i ...

最新文章

  1. 作为一枚第二天上班的小小.net程序员(技术宅的那种)很迷茫哦,第一个随笔
  2. 我的第一个Scrapy 程序 - 爬取当当网信息
  3. 文巾解题 181. 超过经理收入的员工
  4. php 接收curl json数据格式,curl发送 JSON格式POST数据的接收,以及在yii2框架中的实现原理【精细剖析】...
  5. 二十三、Python队列实现多线程(下篇)
  6. Duplicate Elimination in Scrapy(转)
  7. CRM的使用是讲究技巧的
  8. 如果你也会C#,那不妨了解下F#(6):面向对象编程之“类”
  9. Typora中使用Gitee图床
  10. Matlab imcrop函数功能小结(20190123)
  11. JSP中退出登录销毁Session
  12. 齿轮标准模数c语言编程,标准齿轮模数齿数计算公式汇总.pdf
  13. 低密度奇偶校验码(LDPC)GMSK调制解调器 毕业设计
  14. MySQL创建S,P,J,SPJ表,以及SQL语句
  15. UE4 InputMode无法锁定编辑器视口鼠标解决方案
  16. input range: vue自定义进度条
  17. HI618E音频解码芯片
  18. 【重磅推荐】哥大开源“FinRL”: 一个用于量化金融自动交易的深度强化学习库
  19. python二级题库 第四套
  20. Android 集成百度身份证识别

热门文章

  1. HTML5 服务器推送事件(Server-sent Events)实战开发
  2. 在建工程的管理是怎样在总帐中实现
  3. ABAP--SAP是如何回写CL_GUI_ALV_GRID_BASE的MT_MODIFIED_CELLS的
  4. BAPI_ACC_GL_POSTING_POST生成财务预制凭证
  5. SAP SD 定价过程的16个字段的作用说明
  6. 腾讯阿里字节扎堆做公益,互联网技术也要“内卷”?
  7. 无性别服饰是趋势,但不该只停留在“中性”
  8. 波司登的高端之路,难走!
  9. 宁波python学习_python学习第十五天
  10. 配置oracle驱动_Myeclipse中添加Oracle