Python网络编程:使用pexpect实现快速ssh连接

简介

本文介绍了使用pexpect模块实现快速ssh登录的功能

实现

下面的例子,在Python 2.6.5的开发环境和Ubuntu系统下,实现ssh的快速连接的代码实现:

#! /usr/bin/env python

import pexpect
import sys

ip = "ssh root@192.168." + sys.argv[1]

try:
        child = pexpect.spawn(ip)
        res = child.expect(['Are you sure you want to continue connecting (yes/no)?', 'password:'])
        if res == 0:
                child.sendline('yes')
                child.expect('password:')

        child.sendline('liuqi80')

        print child.before
        child.interact()

except pexpect.EOF, pexpect.TIMEOUT:
        print "ssh 192.168." + sys.argv[1] + " timeout"
注1: spawn是Pexpect模块主要的类,用以实现启动子程序,它有丰富的方法与子程序交互从而实现用户对子程序的控制。查看spawn的帮助手册

 |  __init__(self, command, args=[], timeout=30, maxread=2000, searchwindowsize=None, logfile=None, cwd=None, env=None)
 |      This is the constructor. The command parameter may be a string that
 |      includes a command and any arguments to the command. For example::
 |      
 |          child = pexpect.spawn ('/usr/bin/ftp')
 |          child = pexpect.spawn ('/usr/bin/ssh user@example.com')
 |          child = pexpect.spawn ('ls -latr /tmp')
 |      
 |      You may also construct it with a list of arguments like so::
 |      
 |          child = pexpect.spawn ('/usr/bin/ftp', [])
 |          child = pexpect.spawn ('/usr/bin/ssh', ['user@example.com'])
 |          child = pexpect.spawn ('ls', ['-latr', '/tmp'])
 |      After this the child application will be created and will be ready to
 |      talk to. For normal use, see expect() and send() and sendline().
注2: 为了控制子程序,等待子程序产生特定输出,做出特定的响应,可以使用 expect 为了控制子程序,等待子程序产生特定输出,做出特定的响应,可以使用 expect 方法。在参数中: pattern 可以是正则表达式, pexpect.EOF , pexpect.TIMEOUT ,或者由这些元素组成的列表。需要注意的是,当 pattern 的类型是一个列表时,且子程序输出结果中不止一个被匹配成功,则匹配返回的结果是缓冲区中最先出现的那个元素,或者是列表中最左边的元素。使用 timeout 可以指定等待结果的超时时间 ,该时间以秒为单位。当超过预订时间时, expect 匹配到pexpect.TIMEOUT。

 |  expect(self, pattern, timeout=-1, searchwindowsize=None)
 |      This seeks through the stream until a pattern is matched. The
 |      pattern is overloaded and may take several types. The pattern can be a
 |      StringType, EOF, a compiled re, or a list of any of those types.
 |      Strings will be compiled to re types. This returns the index into the
 |      pattern list. If the pattern was not a list this returns index 0 on a
 |      successful match. This may raise exceptions for EOF or TIMEOUT. To
 |      avoid the EOF or TIMEOUT exceptions add EOF or TIMEOUT to the pattern
 |      list. That will cause expect to match an EOF or TIMEOUT condition
 |      instead of raising an exception.
 |      
 |      If you pass a list of patterns and more than one matches, the first match
 |      in the stream is chosen. If more than one pattern matches at that point,
 |      the leftmost in the pattern list is chosen. For example::
 |      
 |          # the input is 'foobar'
 |          index = p.expect (['bar', 'foo', 'foobar'])
 |          # returns 1 ('foo') even though 'foobar' is a "better" match
注3: xpect还可以调用interact() 让出控制权,用户可以继续当前的会话控制子程序。用户可以敲入特定的退出字符跳出.



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值