zoukankan      html  css  js  c++  java
  • python-pexpect_02ssh

    #!/usr/bin/env python
    
    """
    This runs a command on a remote host using SSH. At the prompts enter hostname,
    user, password and the command.
    """
    
    import pexpect
    import getpass, os
    
    #user: ssh 主机的用户名
    #host:ssh 主机的域名
    #password:ssh 主机的密码
    #command:即将在远端 ssh 主机上运行的命令
    def ssh_command (user, host, password, command):
        """
        This runs a command on the remote host. This could also be done with the
        pxssh class, but this demonstrates what that class does at a simpler level.
        This returns a pexpect.spawn object. This handles the case when you try to
        connect to a new host and ssh asks you if you want to accept the public key
        fingerprint and continue connecting.
        """
        ssh_newkey = 'Are you sure you want to continue connecting'
        # 为 ssh 命令生成一个 spawn 类的子程序对象.
        child = pexpect.spawn('ssh -l %s %s %s'%(user, host, command))
        i = child.expect([pexpect.TIMEOUT, ssh_newkey, 'password: '])
        # 如果登录超时,打印出错信息,并退出.
        if i == 0: # Timeout
            print 'ERROR!'
            print 'SSH could not login. Here is what SSH said:'
            print child.before, child.after
            return None
        # 如果 ssh 没有 public key,接受它.
        if i == 1: # SSH does not have the public key. Just accept it.
            child.sendline ('yes')
            child.expect ('password: ')
            i = child.expect([pexpect.TIMEOUT, 'password: '])
            if i == 0: # Timeout
                print 'ERROR!'
                print 'SSH could not login. Here is what SSH said:'
                print child.before, child.after
            return None
        # 输入密码.
        child.sendline(password)
        return child
    
    def main ():
        # 获得用户指定 ssh 主机域名.
        host = raw_input('Hostname: ')
        # 获得用户指定 ssh 主机用户名.
        user = raw_input('User: ')
        # 获得用户指定 ssh 主机密码.
        password = getpass.getpass()
        # 获得用户指定 ssh 主机上即将运行的命令.
        command = raw_input('Enter the command: ')
        child = ssh_command (user, host, password, command)
        # 匹配 pexpect.EOF
        child.expect(pexpect.EOF)
        # 输出命令结果.
        print child.before
    
    if __name__ == '__main__':
        try:
            main()
        except Exception, e:
            print str(e)
            traceback.print_exc()
            os._exit(1)
  • 相关阅读:
    C++11 override和final
    C++11 类型推导auto
    C++11 强枚举类型
    C++11 explicit的使用
    《数据结构与算法之美》——冒泡排序、插入排序、选择排序
    《数据结构与算法之美》- 栈
    Spring Boot系列——AOP配自定义注解的最佳实践
    Spring Boot系列——死信队列
    Spring Boot系列——7步集成RabbitMQ
    让我头疼一下午的Excel合并单元格
  • 原文地址:https://www.cnblogs.com/EWWE/p/7401259.html
Copyright © 2011-2022 走看看