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'
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'
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'
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