{"id":224,"date":"2020-08-13T19:15:38","date_gmt":"2020-08-13T17:15:38","guid":{"rendered":"https:\/\/www.pythonparatodo.com\/?p=224"},"modified":"2020-08-13T20:16:19","modified_gmt":"2020-08-13T18:16:19","slug":"conexion-sftp-con-paramiko","status":"publish","type":"post","link":"https:\/\/www.pythonparatodo.com\/?p=224","title":{"rendered":"Conexi\u00f3n sftp con paramiko"},"content":{"rendered":"\n<p>Se puede descargar un fichero de un servidor Linux usando el paquete <strong>paramiko<\/strong> y el protocolo <strong>SSH File Transfer Protocol<\/strong> com\u00fanmente conocido como <strong>sftp<\/strong>.<\/p>\n\n\n\n<p>Para ello lo primero que se ha de hacer es importar la librer\u00eda <strong>paramiko<\/strong> y si a\u00fan no estuviera instalada en el sistema se hace uso de pip para instalarla.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"python\" class=\"language-python\"># pip install paramiko<\/code><\/pre>\n\n\n\n<p>Tras la importaci\u00f3n de la librer\u00eda lo siguiente es conectar con el servidor por ssh para poder posteriormente usar sftp y descargar el archivo.<\/p>\n\n\n\n<p>Pero vayamos por partes.<\/p>\n\n\n\n<p>Primero importamos paramiko y los paquetes que vayamos a usar que en este caso ser\u00e1 el paquete getpass el cual nos facilitar\u00e1 que podamos introducir un password por consola sin que nadie vea lo que estamos escribiendo, cosa que se hace en el m\u00e9todo conecta de la clase Ssh.<\/p>\n\n\n\n<p>La clase Ssh contiene los m\u00e9todos __init__ que define los atributos de nombre o ip del host, nombre de usuario y contrase\u00f1a con valores por defecto y el m\u00e9todo conecta que hace la conexi\u00f3n al servidor y descarga el archivo.<\/p>\n\n\n\n<p>Dentro del m\u00e9todo conecta creamos un handler de <strong>paramiko.SSHClient()<\/strong> para hacer la conexi\u00f3n el cual asignamos a la variable <strong>cliente<\/strong> y posteriormente asignamos a la variable <strong>sftp<\/strong> un handler de <strong>cliente.open_sftp() <\/strong>para gestionar la conexi\u00f3n sftp. Con el m\u00e9todo <strong>chdir<\/strong> cambiamos el directorio del servidor y con <strong>get<\/strong> descargamos el archivo.<\/p>\n\n\n\n<p>Para el ejemplo descargaremos el archivo <strong>hosts<\/strong> que se encuentra en la carpeta <strong>\/etc\/<\/strong> y guard\u00e1ndolo en nuestro equipo como <strong>mifichero_hosts<\/strong>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"python\" class=\"language-python\">class Ssh:\n    def __init__(self):\n        self.HOST = '192.168.0.100'\n        self.USERNAME = 'root'\n        self.PASSWORD = ''\n\n    def conecta(self):\n        try:\n            self.PASSWORD = getpass.getpass()\n        except:\n            print('Error al introducir el password')\n\n        # Conectamos por ssh\n        cliente = paramiko.SSHClient()\n        cliente.set_missing_host_key_policy(paramiko.AutoAddPolicy())\n        cliente.load_system_host_keys()\n        cliente.connect( hostname = self.HOST , username = self.USERNAME , password = self.PASSWORD )\n\n        sftp = cliente.open_sftp()\n        sftp.chdir('\/etc\/')\n        sftp.get('hosts','mifichero_hosts')\n        sftp.close()\n\n        cliente.close()<\/code><\/pre>\n\n\n\n<p>Incluimos el siguiente c\u00f3digo que detecta que estamos ejecutando el script manualmente, instancia la clase y realiza la conexi\u00f3n.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"python\" class=\"language-python\">if __name__ == '__main__':\n    ssh = Ssh()\n    ssh.conecta()<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Se puede descargar un fichero de un servidor Linux usando el paquete paramiko y el protocolo SSH File Transfer Protocol &hellip; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[21,4],"tags":[24,6,106],"class_list":["post-224","post","type-post","status-publish","format-standard","hentry","category-networking","category-python","tag-paramiko","tag-python3","tag-sftp"],"_links":{"self":[{"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=\/wp\/v2\/posts\/224","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=224"}],"version-history":[{"count":5,"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=\/wp\/v2\/posts\/224\/revisions"}],"predecessor-version":[{"id":229,"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=\/wp\/v2\/posts\/224\/revisions\/229"}],"wp:attachment":[{"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=224"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=224"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=224"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}