{"id":3982,"date":"2020-11-28T12:35:08","date_gmt":"2020-11-28T11:35:08","guid":{"rendered":"https:\/\/esferas.org\/msqlu\/?p=3982"},"modified":"2020-11-28T12:35:09","modified_gmt":"2020-11-28T11:35:09","slug":"un-tunel-ssh-provisional","status":"publish","type":"post","link":"https:\/\/esferas.org\/msqlu\/2020\/11\/28\/un-tunel-ssh-provisional\/","title":{"rendered":"Un t\u00fanel ssh provisional"},"content":{"rendered":"\n<p>Para tener acceso a una m\u00e1quina de backup instalada en una red extra\u00f1a. <\/p>\n\n\n\n<!--more-->\n\n\n\n<p>El caso es el t\u00edpico: tengo un peque\u00f1o ordenador (un QNAP TS-220) con una Debian 10 instalada y dos discos de 1 Tb en RAID 1. Dispone de todo el software que necesito para realizar copias de seguridad en una peque\u00f1a red y debo instalarlo en tierra extra\u00f1a: una vivienda con su fibra y su enrutador y su televisi\u00f3n y dem\u00e1s cosas, con m\u00e1quinas dispares y sin ninguna intenci\u00f3n de auxiliar a mi peque\u00f1o montaje. <\/p>\n\n\n\n<p>El servidor de copias se instala junto al r\u00fater de fibra y se le proporciona una conexi\u00f3n cableada al mismo y electricidad y all\u00ed te las apa\u00f1es. Como estoy en los previos de montar una VPN, pero necesito situar ya la m\u00e1quina all\u00ed, me decido por montar un t\u00fanel SSH inverso hac\u00eda el servidor principal en Internet que dispone de IP fija. <\/p>\n\n\n\n<p>As\u00ed que los pasos que sigo son los siguientes:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>En el servidor de copias tengo un usuario especial para administraci\u00f3n llamado <em>operador<\/em>. <\/li><li>Para ese usuario creo un clave RSA y la transfiero a la misma cuenta en el servidor p\u00fablico. <\/li><li>Creo el t\u00fanel SSH conect\u00e1ndome con el servidor p\u00fablico y le indico que una vez creada la conexi\u00f3n se quede a la escucha en el puerto 40022 y que haga de puente con el puerto 22 del servidor de copias.<\/li><li>En el servidor p\u00fablico altero el cortafuegos para que los accesos desde Internet al puerto 40022.<\/li><\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">$ ssh -nNT -p 372 -R 40022:localhost:22 -i ~operador\/.ssh\/id_rsa operador@servidor.publico<\/code><\/pre>\n\n\n\n<p>Luego intento conectar desde mi m\u00e1quina personal con ese sistema empleando al servidor p\u00fablico como puente.<\/p>\n\n\n\n<pre title=\"~operador\/.ssh\/config\" class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">Host        servidor\nHostname    servidor.publico\nPort        372\nUser        operador<\/code><\/pre>\n\n\n\n<p>Y ahora probamos a pedir la hora, por ejemplo, directamente en el servidor. <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">$ ssh -J servidor -p 40022 operador@localhost date \nSat Nov 28 12:24:20 CET 2020\n$<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">autossh<\/h3>\n\n\n\n<p>Lo anterior est\u00e1 bien pero necesitamos que el t\u00fanel sea creado autom\u00e1ticamente y mantenido en el tiempo. Empleamos para eso el programa <a href=\"https:\/\/www.harding.motd.ca\/autossh\/\" target=\"_blank\" rel=\"noreferrer noopener\">autossh<\/a> y lo llamamos de la siguiente manera:<\/p>\n\n\n\n<pre title=\"Invocando a autossh\" class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">$ autossh -f -o \"ServerAliveInterval 30\" -o \"ServerAliveCountMax 3\" -nNT -p 372 -R 40022:localhost:22 -i ~operador\/.ssh\/id_rsa operador@servidor.publico<\/code><\/pre>\n\n\n\n<p>El programa crea el t\u00fanel, se pasa a segundo plano y lo mantiene abierto enviando peque\u00f1os paquetes regularmente. <\/p>\n\n\n\n<p>Como el invento nos funciona vamos un paso m\u00e1s y lo incluimos entre los servicios del sistema. Con un archivo de servicio para systemd como el siguiente:<\/p>\n\n\n\n<pre title=\"\/etc\/systemd\/system\/autossh.service\" class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">[Unit]\nDescription=AutoSSH tunnel service to servidor.publico\nAfter=network.target\n\n[Service]\nUser=operador\nEnvironment=\"AUTOSSH_GATETIME=0\"\nExecStart=\/usr\/bin\/autossh -M 0 -o \"ServerAliveInterval 30\" -o \"ServerAliveCountMax 3\" -nNT -p 372 -R 40022:localhost:22 -i ~operador\/.ssh\/id_rsa operador@servidor.publico\n\n[Install]\nWantedBy=multi-user.target<\/code><\/pre>\n\n\n\n<p>El servicio est\u00e1 indicando que ejecute lo mismo que antes a mano, con el usuario operador para no tener l\u00edos con los archivos, y que lo haga tras tener la red activa. <\/p>\n\n\n\n<p>Una vez habilitado el servicio \u00e9ste se arranca autom\u00e1ticamente tras un reinicio de prueba de la m\u00e1quina. Est\u00e1 lista para llevarla a su nuevo hogar y desde mi casa tener acceso a la misma. Conf\u00edo incluso en poder a\u00f1adirla a la VPN en remoto. <\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Referencias<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/www.everythingcli.org\/ssh-tunnelling-for-fun-and-profit-autossh\/\" target=\"_blank\" rel=\"noreferrer noopener\">SSH tunnelling for fun and profit: Autossh<\/a><\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Para tener acceso a una m\u00e1quina de backup instalada en una red extra\u00f1a.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","webmentions_disabled_pings":false,"webmentions_disabled":false,"footnotes":""},"categories":[14],"tags":[1083,41,93,719,1082],"class_list":["post-3982","post","type-post","status-publish","format-standard","hentry","category-internet","tag-autossh","tag-debian","tag-ssh","tag-systemd","tag-tunel"],"_links":{"self":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts\/3982","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/comments?post=3982"}],"version-history":[{"count":4,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts\/3982\/revisions"}],"predecessor-version":[{"id":3986,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts\/3982\/revisions\/3986"}],"wp:attachment":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/media?parent=3982"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/categories?post=3982"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/tags?post=3982"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}