求python pexpect ssh登陆的封装,要能处理ssh无密码等情形,代码简洁。

发布于 2021-11-19 01:51:04 字数 96 浏览 950 评论 2

求python pexpect ssh登陆的封装,要能处理ssh无密码等情形,代码简洁。

linux 

centos 6.5

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

坏尐絯 2021-11-20 04:27:15

为啥不用paramiko呢?

兮颜 2021-11-19 14:17:27
class Ssh(object):
    
    client = None

    @classmethod
    def connect(cls,ip,username="root",password="123456", prompt=']#',
        silent=False):

        # Ssh to remote server
        ssh_newkey = 'Are you sure you want to continue connecting'
        child = pexpect.spawn('ssh '+ username + '@'+ ip, maxread=5000)
        
        i = 1
        # Enter password
        while i != 0:
            i = child.expect([prompt, 'assword:*', ssh_newkey, pexpect.TIMEOUT, 
                'key.*? failed'])
            if not silent:
                print child.before,child.after,            
            if i == 0: # find prompt
                pass      
            elif i == 1: # Enter password
                child.send(password +"r")  
            if i == 2: # SSH does not have the public key. Just accept it.
                child.sendline ('yesr')               
            if i == 3: # Timeout
                raise Exception('ERROR TIMEOUT! SSH could not login. ')
            if i == 4: # new key
                print child.before,child.after,
                os.remove(os.path.expanduser('~')+'/.ssh/known_hosts')                     

        Ssh.client = child
        



    @classmethod
    def command(cls,cmd, prompt=']#', silent=False):
        Ssh.client.buffer = ''
        Ssh.client.send(cmd + "r")
        #Ssh.client.setwinsize(400,400)
        Ssh.client.expect(prompt)
        if not silent:        
            print Ssh.client.before, Ssh.client.after,
        return Ssh.client.before, Ssh.client.after
    
    
    def close(cls,):
        Ssh.client.close()

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文