{"id":50,"date":"2020-05-30T08:07:59","date_gmt":"2020-05-30T08:07:59","guid":{"rendered":"https:\/\/www.pythonparatodo.com\/?p=50"},"modified":"2020-05-30T09:47:20","modified_gmt":"2020-05-30T09:47:20","slug":"paramiko","status":"publish","type":"post","link":"https:\/\/www.pythonparatodo.com\/?p=50","title":{"rendered":"Paramiko"},"content":{"rendered":"\n<p>Existen paquetes que facilitan las conexiones de red, <strong>paramiko<\/strong> es uno que, entre otras cosas, nos permite realizar conexiones ssh a un servidor, mostrando en tiempo real el resultado de los comandos que se ejecuten en el mismo. Tanto el paquete como la documentaci\u00f3n se puede encontrar en su p\u00e1gina web <a href=\"https:\/\/www.paramiko.org\">https:\/\/www.paramiko.org<\/a>, si bien la instalaci\u00f3n en nuestro entorno se realiza ejecutando el comando:<\/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>Como con el resto de paquetes externos, para usar los m\u00e9todos del mismo, primero se debe importar con el comando.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"python\" class=\"language-python\">import paramiko<\/code><\/pre>\n\n\n\n<p>En el siguiente ejemplo se realizar\u00e1 una conexi\u00f3n a un servidor Linux por ssh y se podr\u00e1 ver en tiempo real el resultado de ejecutar el comando <strong>uname -a<\/strong> que muestra la versi\u00f3n del sistema operativo.<\/p>\n\n\n\n<p>Para realizar la conexi\u00f3n <strong>ssh<\/strong> se necesitar\u00e1 el nombre del host, el usuario con acceso a ese servidor y la contrase\u00f1a. Posteriormente se podr\u00e1 reemplazar el primer argumento del m\u00e9todo exec_command por el comando Linux que se necesite ejecutar en el servidor. Por ejemplo, si fuera una distribuci\u00f3n basada en <strong>Redhat<\/strong> se podr\u00eda escribir <strong>yum -y update<\/strong> para actualizarla, <strong>yum -y install vim<\/strong> para instalar el editor Vim, <strong>cat \/etc\/fstab<\/strong>, etc.<\/p>\n\n\n\n<p>Para teclear la contrase\u00f1a, es interesante importar <strong>getpass<\/strong> que posibilitar\u00e1 hacer un input de la misma, pero sin salida por la consola para que nadie vea lo escrito. Para conseguir esto se usa getpass.getpass().<\/p>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<div class=\"wp-block-group is-layout-flow wp-block-group-is-layout-flow\"><div class=\"wp-block-group__inner-container\"><\/div><\/div>\n<\/div><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"python\" class=\"language-python\">import getpass\n\nimport paramiko\n\nimport sys\n\nclass Ssh:\n\n    def __init__(self):\n\n        self.HOST = ''\n\n        self.USERNAME = ''\n\n        self.PASSWORD = ''\n\n        self.CLIENT = None\n\n    def conecta(self):\n\n        try:\n\n            self.HOST = input('Nombre o ip del host: ')\n\n            self.USERNAME = input('Usuario: ')\n\n            self.PASSWORD = getpass.getpass()\n\n        except:\n\n            print('Error al introducir alguno de los datos')\n\n            sys.exit(1)\n\n        try:\n\n            # Conectamos por ssh\n\n            self.CLIENT = paramiko.SSHClient()\n\n            self.CLIENT.set_missing_host_key_policy(paramiko.AutoAddPolicy())\n\n            self.CLIENT.load_system_host_keys()\n\n            self.CLIENT.connect( hostname = self.HOST , username = self.USERNAME , password = self.PASSWORD )\n\n        except:\n\n            print('Error en la conexi\u00f3n')\n\n            sys.exit(1)\n\n        # Invocamos el shell para ejecutar comandos remotos\n\n        try:\n\n            shell = self.CLIENT.invoke_shell()\n\n            try:\n\n                # Ejecutamos el comando remoto\n\n                stdin, stdout, stderr = self.CLIENT.exec_command( 'uname -a' , bufsize = -1 , timeout = None , get_pty = True , environment = None)\n\n                # Mostramos la salida estandar l\u00ednea por l\u00ednea\n\n                for line in iter(stdout.readline, \"\"):\n\n                    print(line, end=\"\")\n\n            except:\n\n                print('Error: al ejecutar el comando')\n\n                sys.exit(1)\n\n        except:\n\n            print('Error en la conexi\u00f3n por ssh')\n\n            sys.exit(1)\n\n        # Cerramos el shell\n\n        shell.close()\n\n        # ------------------------------------------------------------------\n\n        self.CLIENT.close()\n\nif __name__ == '__main__':\n\n    ssh = Ssh()\n\n    ssh.conecta()<\/code><\/pre>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Existen paquetes que facilitan las conexiones de red, paramiko es uno que, entre otras cosas, nos permite realizar conexiones ssh &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":[25,22,24,2,6,23,26],"class_list":["post-50","post","type-post","status-publish","format-standard","hentry","category-networking","category-python","tag-getpass","tag-networking","tag-paramiko","tag-python","tag-python3","tag-ssh","tag-sys"],"_links":{"self":[{"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=\/wp\/v2\/posts\/50","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=50"}],"version-history":[{"count":3,"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=\/wp\/v2\/posts\/50\/revisions"}],"predecessor-version":[{"id":55,"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=\/wp\/v2\/posts\/50\/revisions\/55"}],"wp:attachment":[{"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=50"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=50"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=50"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}