最近要使用python做一个在web上管理交换机的程序,需要远程登录,就查了点资料,由于还没有搞到交换机,就先用自己的机器测试一下。

首先python的标准库中包含telnet,用起来也很方便,查看一下文档写了个小程序:

  1. #!/usr/bin/env python
  2. #coding=utf-8
  3. import telnetlib
  4. host = "127.0.0.1"
  5. userName = 'root'
  6. password = '123456'
  7. enter = '\n'
  8. t = telnetlib.Telnet(host)
  9. t.read_until("login: ",1)
  10. t.write(userName + enter)
  11. t.read_until("Password: ",1)
  12. t.write(password + enter)
  13. t.write("ls"+enter)
  14. t.write("exit"+enter)
  15. print t.read_all()

输出结果:

  1. Last login: Wed Nov  2 14:51:36 on console
  2. shi-kefumatoiMac:~ root# .CFUserTextEncoding    .subversion     Library
  3. .forward        .viminfo        nat.sh
  4. .sh_history     .vimrc          noc
  5. shi-kefumatoiMac:~ root# logout

程序很简单,登录自己的机器,执行ls命令,然后输出结果。

telnet很好用,但是总是有人喜欢更强大更好用的程序,于是就有了pexpect,pexpect 是 Don Libes 的 Expect 语言的一个 Python 实现,是一个用来启动子程序,并使用正则表达式对程序输出做出特定响应,以此实现与其自动交互的 Python 模块。 Pexpect 的使用范围很广,可以用来实现与 ssh、ftp 、telnet 等程序的自动交互;可以用来自动复制软件安装包并在不同机器自动安装;还可以用来实现软件测试中与命令行交互的自动化。

看了写资料,也用pexpect写了一个小程序,实现刚才同样的功能:

  1. #!/usr/bin/env python
  2. #coding=utf-8
  3. import pexpect
  4. address = '127.0.0.1'
  5. userName = 'root'
  6. password = '123456'
  7. cmd = 'telnet ' + address
  8. prompt = '[$#>]'
  9. child = pexpect.spawn(cmd)
  10. index = child.expect(['login',pexpect.EOF,pexpect.TIMEOUT],timeout=1)
  11. if index == 0:
  12. child.sendline(userName)
  13. index = child.expect('Password',timeout=1)
  14. child.sendline(password)
  15. child.expect(prompt,timeout=1)
  16. child.sendline('ls')
  17. child.expect('ls',timeout=1)
  18. child.expect(prompt,timeout=1)
  19. print child.before
  20. else:
  21. print 'expect "login",but get EOF or TIMEOUT'
  22. child.close()

输出结果:

  1. .CFUserTextEncoding .subversion     Library
  2. .forward        .viminfo        nat.sh
  3. .sh_history     .vimrc          noc
  4. shi-kefumatoiMac:~ root

当然,这个程序只是pexpect的一个实例程序,简单介绍的它的简单用法,还不足以说明它t的强大。

参考资料:

python文档:http://docs.python.org/library/telnetlib.html

IBM developerWorks: http://www.ibm.com/developerworks/cn/linux/l-cn-pexpect1/

http://www.ibm.com/developerworks/cn/linux/l-cn-pexpect2/

使用python远程登录的更多相关文章

  1. python远程登录服务器(paramiko模块安装和使用)

    转自:http://www.jb51.net/article/46285.htm 一:简介 由paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器 ...

  2. python远程登录Paramiko模块的安装

    最近做云平台的项目,需要使用python来管理所有的主机,我选择了paramiko.它跨平台的,linux和window都可以使用,pssh只支持linux. 1:安装gcc和python-devel ...

  3. python实现ssh远程登录

    python实现ssh远程登录 # 测试过程中,比较常用的操作就是将DUT(待测物)接入网络中,然后远程操控对DUT, # 使用SSH远程登陆到主机,然后执行相应的command即可 # python ...

  4. [Python Fabric] [SSH] Mac OS X 10.9 + Vagrant虚拟环境使用Python Fabric进行SSH远程登录的简单实验

    1. ssh客户端生成key $ Generating public/private rsa key pair. Enter file in which to save the key (/Users ...

  5. 使用paramiko模块远程登录并上传或下载文件

    1.paramiko安装 1)安装PyCrypto2.6 for Python 2.7 64bit.地址:http://www.voidspace.org.uk/python/modules.shtm ...

  6. [转]python3之paramiko模块(基于ssh连接进行远程登录服务器执行命令和上传下载文件的功能)

    转自:https://www.cnblogs.com/zhangxinqi/p/8372774.html 阅读目录 1.paramiko模块介绍 2.paramiko的使用方法 回到顶部 1.para ...

  7. Python远程连接模块-Telnet

    Python远程连接模块-Telnet 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 虽然现在主流的python版本还是2.7,相信2020年python程序员都会偏向Python ...

  8. 服务器jupyter配置与ssh远程登录

    jupyter 配置 首先安装jupyter,在anaconda套装中已包含,如果安装的是精简版的miniconda则通过conda install jupyter安装. 生成配置文件 jupyter ...

  9. Python远程linux执行命令

    1.远程登录到linux上,使用到的模块paramiko #远程登陆操作系统 def ssh(sys_ip,username,password,cmds): try #创建ssh客户端 client ...

随机推荐

  1. JS数组(Array)处理函数总结

    1.concat() 连接两个或更多的数组该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本.例如: <script type="text/javascript"&g ...

  2. Command

    #include <iostream> using namespace std; #define DESTROY_POINTER(ptr) if (ptr) { delete ptr; p ...

  3. Observer

    #include <iostream> #include <list> using namespace std; #define DESTROY_POINTER(ptr) if ...

  4. Html5元素及基本语法

    HTML标签开始标签(opening tag):开放标签结束标签(closing tag):闭合标签 元素定义:HTML元素指的是从开始标签到结束标签的代码(元素以开始标签为起始以借宿标签终止)元素的 ...

  5. css3干货

    CSS3是CSS2的升级版本,3只是版本号,它在CSS2.1的基础上增加了很多强大的新功能. 目前主流浏览器chrome.safari.firefox.opera.甚至360都已经支持了CSS3大部分 ...

  6. mariadb主从复制架构学习笔记

    复制功用: 数据分布 负载均衡:读操作,适用于读密集型的应用 备份 高可用和故障切换 MySQL升级测试 在从服务器上有两个线程: I/O线程:从master请求二进制日志信息,并保存至中继日志 SQ ...

  7. Centos 7.1+CDH5.7.2全部署流程

    前期准备: JDK环境 版本:jdk-8u101-linux-x64.rpm 下载地址:oracle官网 mysql rpm包:http://dev.mysql.com/get/Downloads/M ...

  8. 小课堂week15 年终小结

    年终小结 一年的最后,想和大家回顾一下今年讲过的技术和书,用一些问答,一起来提炼一下精华. Spark 为什么需要分布式计算? 计算的增长速度超过了硬件的增长,单一服务器无法负荷.多服务器带来的是复杂 ...

  9. c语言内存分配-malloc

    malloc 原型:(原来返回类型是char) extern void *malloc(unsigned int num_bytes); 头文件: #include <stdlib.h> ...

  10. ruby on rails 实战(二)

    1,修改routes文件,让所有的action都可以使用get或者post方式访问 match "/:controller/:action" => "control ...