Exemplo n.º 1
0
def conexionSFTP(
    ssh_servidor='192.168.1.20',
    ssh_usuario='ubnt',
    ssh_clave='ubnt',
    fichero='',
    ruta='.',
    debug=False,
    ssh_puerto=22,
):
    """
    Funcion para enviar un fichero por SFTP, depende de la libreria de cosecha propia TestPing
    Los valores que tiene por defecto son: ssh_servidor='192.168.1.20', ssh_usuario='ubnt', ssh_clave='ubnt', fichero='', ruta='.', Debug='no', ssh_puerto=22
    
    :param str ssh_servidor: IP del servidor
    :param str ssh_usuario:  Usuario del servidor
    :param str ssh_clave:    Contrasena del usuario cel servidor
    :param str fichero:      fichero a enviar por scp
    :param str ruta:         ruta donde se guarda el fichero, por defecto directorio local
    :param str debug:        Establecer modo depuracion para que imprima errores y cree un log
    :param int ssh_puerto:   Puerto en el que escucha el servidor ssh
    
    :return str: con el resultado del comando
    :return bool: con un 1 en caso de que el server no este online
    """

    response = testPing(
        ssh_servidor
    )  #compruebo que el servidor esta online y en caso afirmativo me conecto
    if response == 0:
        if debug:
            paramiko.util.log_to_file('paramiko.log')
        client = paramiko.SSHClient()
        try:
            print('llego al primer try')
            client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
            client.connect(ssh_servidor, ssh_puerto, ssh_usuario, ssh_clave)
            print('antes sftp')
            sftp = client.open_sftp()
            print(sftp)
            #dirlist = sftp.listdir(ruta)
            #print dirlist
            try:
                print('llego al segundo try')
                #sftp.mkdir("demo")
                sftp.put(fichero, ruta)
            except IOError:
                print('IOError, the file already exists!')
            client.close()

        except Exception as e:
            print('¡¡¡¡ Exception %s !!!!' % str(e))
            try:
                client.close()
            except:
                pass
    else:
        if debug:
            print(ssh_servidor, 'is down!')
        return '-1'
Exemplo n.º 2
0
def conexionSCP(ssh_servidor='192.168.1.20', ssh_usuario='ubnt', ssh_clave='ubnt', fichero='', ruta='.', debug=False, ssh_puerto=22):
    """
    Funcion para enviar un fichero por SCP, depende de la libreria de cosecha propia TestPing y la libreria esterna scp
    Los valores que tiene por defecto son: ssh_servidor='192.168.1.20', ssh_usuario='ubnt', ssh_clave='ubnt', fichero='', ruta='.', Debug='no', ssh_puerto=22
    
    :param str ssh_servidor: IP del servidor
    :param str ssh_usuario:  Usuario del servidor
    :param str ssh_clave:    Contrasena del usuario cel servidor
    :param str fichero:      fichero a enviar por scp
    :param str ruta:         ruta donde se guarda el fichero, por defecto directorio local
    :param str debug:        Establecer modo depuracion para que imprima errores y cree un log
    :param int ssh_puerto:   Puerto en el que escucha el servidor ssh

    :return str 0:           Si se ejecuta con exito
    :return str IOError:     Si hay error al enviar el fichero
    :return str 1:           Si hay un fallo de autenticacion
    :return str -1:          El host esta ofline
    """
    
    response = testPing(ssh_servidor)   #compruebo que el servidor esta online y en caso afirmativo me conecto
    if response == 0:
        if debug:
            paramiko.util.log_to_file('paramiko.log')
        client = paramiko.SSHClient()
        try:
            client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
            client.connect(ssh_servidor, ssh_puerto, ssh_usuario, ssh_clave)
            scp = SCPClient(client.get_transport())
            try:
                #scp.mkdir("demo")
                scp.put(fichero, ruta)
                client.close()
                return '0'
            except IOError:
                print('IOError, the file already exists!')
                client.close()
                return 'IOError'


        except Exception as e:
            #print '¡¡¡¡ Exception: %s' % str(e)
            try:
                client.close()
            except:
                pass
            if str(e) == 'Authentication failed.':
                return '1'
    else:
        if debug:
            print(ssh_servidor, 'is down!')
        return '-1'
Exemplo n.º 3
0
def conexionSFTP(ssh_servidor='192.168.1.20', ssh_usuario='ubnt', ssh_clave='ubnt', fichero='', ruta='.', debug=False , ssh_puerto=22,):
    """
    Funcion para enviar un fichero por SFTP, depende de la libreria de cosecha propia TestPing
    Los valores que tiene por defecto son: ssh_servidor='192.168.1.20', ssh_usuario='ubnt', ssh_clave='ubnt', fichero='', ruta='.', Debug='no', ssh_puerto=22
    
    :param str ssh_servidor: IP del servidor
    :param str ssh_usuario:  Usuario del servidor
    :param str ssh_clave:    Contrasena del usuario cel servidor
    :param str fichero:      fichero a enviar por scp
    :param str ruta:         ruta donde se guarda el fichero, por defecto directorio local
    :param str debug:        Establecer modo depuracion para que imprima errores y cree un log
    :param int ssh_puerto:   Puerto en el que escucha el servidor ssh
    
    :return str: con el resultado del comando
    :return bool: con un 1 en caso de que el server no este online
    """
    
    response = testPing(ssh_servidor)   #compruebo que el servidor esta online y en caso afirmativo me conecto
    if response == 0:
        if debug:
            paramiko.util.log_to_file('paramiko.log')
        client = paramiko.SSHClient()
        try:
            print('llego al primer try')
            client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
            client.connect(ssh_servidor, ssh_puerto, ssh_usuario, ssh_clave)
            print('antes sftp')
            sftp = client.open_sftp()
            print(sftp)
            #dirlist = sftp.listdir(ruta)
            #print dirlist
            try:
                print('llego al segundo try')
                #sftp.mkdir("demo")
                sftp.put(fichero, ruta)
            except IOError:
                print('IOError, the file already exists!')
            client.close()


        except Exception as e:
            print('¡¡¡¡ Exception %s !!!!' % str(e))
            try:
                client.close()
            except:
                pass
    else:
        if debug:
            print(ssh_servidor, 'is down!')
        return '-1'
Exemplo n.º 4
0
def conexionSSH(ssh_servidor='192.168.1.20', ssh_usuario='ubnt',
                ssh_clave='ubnt', comando='pwd', debug=False, ssh_puerto=22,
                sudo='no'):
    """
    Funcion para establecer una conexion ssh, son necesarios los 4 primeros
    argumentos, depende de la libreria de cosecha propia TestPing
    Los valores que tiene por defecto son: ssh_servidor='192.168.1.20',
    ssh_usuario='ubnt', ssh_clave='ubnt', comando='pwd', Debug='no',
    ssh_puerto=22, sudo='no'

    :param str ssh_servidor: IP del servidor
    :param str ssh_usuario:  Usuario del servidor
    :param str ssh_clave:    Contrasena del usuario cel servidor
    :param str comando:      Comando a ejecutar en el servidor
    :param str debug:        Establecer modo depuracion para que imprima errores y cree un log
    :param int ssh_puerto:   Puerto en el que escucha el servidor ssh
    :param str sudo:         Para ejecutar comando como sudo

    :return str, int: retorna un int con el codigo y un string con el resultado
        0 : ejecucion de comando correcta
        -1: server offline
        -2: fallo autenticacion
        -3: Comando invalido
        -4: Error desconocido
    """

    # compruebo que el servidor esta online y en caso afirmativo me conecto
    response = testPing(ssh_servidor)
    if response == 0:
        try:
            comando = 'plink.exe -stricthostcheck save -ssh %s -l %s -pw %s "%s"' % (
                ssh_servidor, ssh_usuario, ssh_clave, comando).falla
            if debug:
                print(comando)
            return str(os.popen(comando).read()), 0

        except:
            sys.path.append('./')
            if debug:
                paramiko.util.log_to_file('paramiko.log')

            client = paramiko.SSHClient()
            client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

            try:
                client.connect(ssh_servidor, ssh_puerto, ssh_usuario, ssh_clave,
                               allow_agent=False, look_for_keys=False, timeout=None)
            except paramiko.AuthenticationException:
                client.close()
                return 'Authentication failed', -2
            except:
                client.close()
                return 'Error desconocido', -4

            if sudo != 'no':
                stdin, stdout, stderr = client.exec_command(
                    'echo %s | sudo -S %s' % (ssh_clave, comando))
            else:
                stdin, stdout, stderr = client.exec_command(comando)

            textoOut = stdout.read()[:]
            textoErr = stderr.read()[:]
            client.close()

            if re.search('bash: .*: command not found', str(textoErr)):
                return 'Comando invalido', -3
            # hago una copia explicita del valor ya que sino cuando cierro
            # la conexion ssh pierdo el valor
            else:
                return textoOut, 0

    else:
        if debug:
            print(ssh_servidor, 'is down!')
        return '{} id down'.format(ssh_servidor), -1