#coding=utf8 import paramiko import time import logging ''' if user root,can not login,must use user xx and then switch to root not root ,then run ''' def _conn_root(ip,port,username,passwd,cmd): s = paramiko.SSHClient() s.load_system_host_keys() s.set_missing_host_key_policy(paramiko.AutoAddPolicy()) try: #此处写入一个用于登录的用户 s.connect(hostname=ip, port=int(port), username='xx', password='xx') except: logging.info('err: can not conn %s ,pls check %s and password of xx',(ip,ip)) if username == 'root' or 'xx': ssh = s.invoke_shell() time.sleep(1) if username=='xx': ssh.send('su - xx\n') else: ssh.send('su -\n') buff = '' while not buff.endswith('Password: '): resp = ssh.recv(2048) buff += resp ssh.send(passwd) ssh.send('\n') buff = '' while not buff.endswith('# '): resp = ssh.recv(2048) buff += resp ssh.send(cmd) ssh.send('\n') buff = '' time.sleep(1) resp = ssh.recv(2048) resp = '' while not buff.endswith('# '): resp = ssh.recv(2048) print resp buff += resp s.close() result = buff else: stdin, stdout, stderr = s.exec_command(cmd) result = stdout.read() s.close() return result def _conn_nomal(ip,port,username,passwd,cmd): s = paramiko.SSHClient() s.load_system_host_keys() s.set_missing_host_key_policy(paramiko.AutoAddPolicy()) try: s.connect(hostname=host, port=int(port), username=username, password=password) except: logging.info('err: can not connect %s ,pls check %s and user && password',(ip,ip)) #'get result' stdin, stdout, stderr = s.exec_command(cmd) result = stdout.read() s.close() return result def Connect(ip,port=22,username='xx',passwd='xx',cmd='echo '): if username=='root' or 'xx': return _conn_root(ip,port,username,passwd,cmd) else: return _conn_nomal(ip,port,username,passwd,cmd)