最近要使用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. CentOS 6 lnmp环境脚本

    实验环境:CentOS 6.3 32位 首先我们先去下载nginx的第三方yum源 mkdir /shell cd /shell wget http://www.atomicorp.com/insta ...

  2. Oozie和Azkaban的技术选型和对比

    1 两种调度工具功能对比图 下面的表格对上述2种hadoop工作流调度器的关键特性进行了比较,尽管这些工作流调度器能够解决的需求场景基本一致,但在设计理念,目标用户,应用场景等方面还是存在区别 特性 ...

  3. 安装elasticsearch

    安装elasticsearch   来自:http://www.cnblogs.com/huangfox/p/3541300.html 一)安装elasticsearch 1)下载elasticsea ...

  4. php5 date()获得的时间不是当前时间

    php自5.10起加入了时区的设置,在php中显示的时间都是格林威治标准时间,因此便与中国的用户会差八个小时. 修改php.ini中的 date.timezone 参数: [Date] ; Defin ...

  5. 发布阿里云OSS for phpcmsV9整合教程

    说明:这个算不上是插件,因为没有安装包,需要手工修改代码. 还有一点就是后台发布文章时上传的附件还是会保存在你的服务器上,基于以下原因: 1.个人的需求是前台页面需要使用thumb函数生成多个缩略图大 ...

  6. 基于.NET的WebService的实现和WCF的实现

    1.新建一个MVC web项目. 2.点击项目,[右键]→[添加]→[新建项] 3.点击[Web]→[Web服务] 4.恭喜,Web Service已经新建成功,里面的方法就可以参考着根据自己的需要进 ...

  7. [terry笔记]RMAN综合学习之恢复

    [terry笔记]RMAN综合学习之备份http://www.cnblogs.com/kkterry/p/3308405.html [terry笔记]RMAN综合学习之恢复 http://www.cn ...

  8. ios第三方分享到qq、微信、人人网、微博总结

    我们开发出来的APP通常要通过第三方分享到其他社交平台,如qq.微博微信 等.通过分享可以提高APP的传播效率,增加APP的曝光率,因此也算是APP功能 里的标配了吧.目前常用的第三方分享途径有qq. ...

  9. [笔记]--Sublime Text 2使用技巧

    Sublime个人喜好设置: 在打开个人设置页面Preferences >> Settings - User,加入以下内容: { , //TAB键,4个空格 "translate ...

  10. 简述afinal 框架的基本用法

    本文只是对afinal做简单的描述,基本和git上给的文档一样,大神绕道! FinalDB模块本文为涉及到 FinalActivity模块,FinalHttp模块,FinalBitmap模块  代码体 ...