archives/2008/09 StyXman's glob http://grulicueva.homelinux.net/~mdione/glob//archives/2008/09/ StyXman's glob ikiwiki 2009-01-22T04:24:04Z dnsmasq http://grulicueva.homelinux.net/~mdione/glob//posts/dnsmasq/ 2009-01-22T04:24:04Z 2008-09-29T19:25:40Z <p>Esto capaz es una boludez, pero buéh...</p> <p>En uno de mis laburos (ahora tengo 3) tenemos un server que da DHCP y DNS a una red interna, un Debian Etch con <code>dnsmasq</code>. El punto es que <code>dnsmasq</code> concentra muy bien estos dos servicios, haciendo muy simple el poder resolver nombres de máquinas que tomaron su IP dinámicamente por DHCP. Esto se logra haciendo que el cliente mande un nombre de máquina, y según el ip que le asigna agrega una entrada de DNS. Para el entorno donde estoy trabajando esto viene de pelos.</p> <p>También toma DNS del <code>/etc/hosts</code>. El problema es que si en la entrada del <code>127.0.0.1</code>, además del típico <code>localhost</code> y/o <code>localhost.localdomain</code> (puaj) hay otro nombre de máquina, y está primero, antes que ninguna otra máquina, esa entrada queda en el DNS. Así, si desde dentro de la red preguntás por el nombre del servidor, el DNS responde que <code>127.0.0.1</code>. Parrafraseando a un famoso personaje de una serie televisiva: “D-oh!”.</p> <p><a href="http://grulicueva.homelinux.net/~mdione/glob//archives/2008/09/../../../tags/sysadmin/">sysadmin</a> <a href="http://grulicueva.homelinux.net/~mdione/glob//archives/2008/09/../../../tags/dnsmasq/">dnsmasq</a></p> utils http://grulicueva.homelinux.net/~mdione/glob//tags/utils/ 2009-01-22T04:24:04Z 2008-09-20T01:24:36Z <div class="inlinepage"> <div class="inlineheader"> <p><span class="header"><a href="http://grulicueva.homelinux.net/~mdione/glob//archives/2008/09/../../../posts/charla-ssh-scp-screen/">charla-ssh-scp-screen</a></span></p> </div> <div class="inlinecontent"> <p>El otro día dí una charlita un poquito larga de ssh/scp y screen en el <a href="http://iate.oac.uncor.edu/">IATE</a>, el lugar donde laburo. En la misma hablo de <code>ssh/scp</code> básico, mas cómo poner claves públicas/privadas y cómo usar el <code>ssh-agent</code> para administrarlas (algo de lo que <a href= "http://grulicueva.homelinux.net/~mdione/glob/posts/ssh-agent/">ya hablé en este glob</a>), mas otros temas como el X11 forwarding y el agent-forwarding. Además hablé de <code>screen</code>, una herramineta que se complementa muy bien con <code>ssh</code>. Dejo las filminas <a href= "http://grulicueva.homelinux.net/~mdione/charlas/ssh-screen-2.odp">acá</a>.</p> <p><a href="http://grulicueva.homelinux.net/~mdione/glob//archives/2008/09/../../../tags/security/">security</a> <a href="http://grulicueva.homelinux.net/~mdione/glob//archives/2008/09/../../../tags/utils/">utils</a></p> </div> <div class="inlinefooter"> <p><span class="pagedate">Posted <span class="date">Sat 18 Apr 2009 11:49:35 PM CEST</span></span></p> <p><span class="tags">Tags:</span></p> <p><span class="tags"><a href="http://grulicueva.homelinux.net/~mdione/glob//archives/2008/09/../../../tags/security/" rel= "tag">security</a></span></p> <p><span class="tags"><a href="http://grulicueva.homelinux.net/~mdione/glob//archives/2008/09/../../../tags/utils/" rel= "tag">utils</a></span></p> </div> </div> <div class="inlinepage"> <div class="inlineheader"> <p><span class="header"><a href="http://grulicueva.homelinux.net/~mdione/glob//archives/2008/09/../../../posts/ssh-agent/">ssh-agent</a></span></p> </div> <div class="inlinecontent"> <p>En este post veremos cómo crear pares de claves pública/privada con passphrases, y cómo usar <code>ssh-agent</code> para no tener que andar tipeándolas a cada rato.</p> <p>Lo primero es generar el par. Hay dos tipos de pares de claves, RSA y DSA. Los pares se guardan en nuestro <code>.ssh/</code>, así que antes de generar un par nos fijamos qué hay allí:</p> <pre> <code>mdione@cobra:~$ ls -l .ssh/ total 28 -rw-r--r-- 1 mdione mdione 190 2008-02-26 15:29 config -rw------- 1 mdione mdione 1743 2008-09-19 16:55 id_dsa -rw-r--r-- 1 mdione mdione 394 2008-09-19 16:55 id_dsa.pub -rw------- 1 mdione mdione 11598 2008-09-02 10:35 known_hosts -rw------- 1 mdione mdione 9388 2008-06-05 22:59 known_hosts.old </code> </pre> <p>Hay una par DSA (<code>id_dsa</code> e <code>id_dsa.pub</code>), así que creamos un par RSA para no pisarlo:</p> <pre> <code>mdione@cobra:~$ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/mdione/.ssh/id_rsa): *** Enter passphrase (empty for no passphrase): *** Enter same passphrase again: Your identification has been saved in /home/mdione/.ssh/id_rsa. Your public key has been saved in /home/mdione/.ssh/id_rsa.pub. The key fingerprint is: 1c:da:2b:a8:97:72:7e:ab:ff:ea:bb:e8:6b:64:4c:93 mdione@cobra The key's randomart image is: +--[ RSA 2048]----+ | | | | | . . | | E + . | | o .. S | | +. . | | o... . | | ..=... | | .B**B*. | +-----------------+ </code> </pre> <p>Notar que en <code>***</code> <code>ssh-keygen</code> pide dos veces una <em>passphrase</em>. El término <em>passphrase</em> viene de la época en que las passwords sólo podían ser de un maximo de 8 caracteres. La passphrase puede ser de cualquier longitud; una longitud buena está en los 15-20 caracteres. Se puede poner una passphrase nula, pero por motivos de seguridad les sugiero que <strong>no</strong> lo hagan. Si aprenden bien a usar <code>ssh-agent</code> van a tener que tipearla poco.</p> <p>Ahora copiamos la parte pública al servidor al que queremos entrar:</p> <pre> <code>mdione@cobra:~$ ssh-copy-id -i .ssh/id_rsa.pub beetroot.except.com.ar *** mdione@beetroot.except.com.ar's password: Now try logging into the machine, with "ssh 'beetroot.except.com.ar'", and check in: .ssh/authorized_keys to make sure we haven't added extra keys that you weren't expecting. </code> </pre> <p>Probamos entrar al server para ver que el par ande:</p> <pre> <code>mdione@cobra:~$ ssh beetroot.except.com.ar *** Enter passphrase for key '/home/mdione/.ssh/id_rsa': Last login: Fri Sep 19 12:18:16 2008 from ginger.except.com.ar mdione@beetroot:~$ logout Connection to beetroot.except.com.ar closed. </code> </pre> <p>Notar que en <code>***</code> pide la passphrase del par que acabamos de crear.</p> <p>Ahora a usar <code>ssh-agent</code>. <code>ssh-agent</code> se inicia en toda sesión en una distro moderna, podemos verlo dando vueltas en nuestro background:</p> <pre> <code>mdione@cobra:~$ ps fax | grep ssh-agent 2997 ? Ss 0:00 \_ ssh-agent screen </code> </pre> <p>En este caso lo tengo corriendo antes de un <code>screen</code>, pero en un desktop podemos ver algo de la pinta <code>/usr/bin/ssh-agent /usr/bin/dbus-launch --exit-with-session x-session-manager</code>.</p> <p>Una vez que vemos el <code>ssh-agent</code> dando vueltas por ahí, veamos qué claves tiene:</p> <pre> <code>mdione@cobra:~$ ssh-add -l The agent has no identities. </code> </pre> <p>Ok, agreguemos identidades al agente:</p> <pre> <code>mdione@cobra:~$ ssh-add /home/mdione/.ssh/id_rsa *** Enter passphrase for /home/mdione/.ssh/id_rsa: Identity added: /home/mdione/.ssh/id_rsa (/home/mdione/.ssh/id_rsa) mdione@cobra:~$ ssh-add -l 2048 1c:da:2b:a8:97:72:7e:ab:ff:ea:bb:e8:6b:64:4c:93 /home/mdione/.ssh/id_rsa (RSA) </code> </pre> <p>En <code>***</code> <code>ssh-add</code> nos pide la passphrase de la clave. Ok, probemos entrar al servidor:</p> <pre> <code>mdione@cobra:~$ ssh beetroot.except.com.ar Last login: Fri Sep 19 20:58:57 2008 from 200.69.231.1 mdione@beetroot:~$ </code> </pre> <p>No pidió la passphrase, que es lo que queríamos.</p> <p>Las passphrases quedan en el <code>ssh-agent</code> por un período determinado de tiempo. Por defecto duran para siempre, pero con <code>ssh-add -t &lt;segundos&gt;</code> podemos cambiar eso. También podemos borrar una identidad con <code>ssh -d &lt;clave privada&gt;</code> o todas las identidades con <code>ssh-add -D</code> (que molesta costumbre de estas herramientas que tienen nombre de creación pero con algunas opciones de destrucción; <code>ssh-keygen</code> tiene una opción <code>-R</code> que no sólo borra claves, sino que lo hace sobre el <code>.ssh/known-hosts</code>, cuando el comando por sí solo actúa en los pares de claves).</p> <p>En otro post mostraré cómo sacar identidades de un agent y ponerlo en otro.</p> <p><a href="http://grulicueva.homelinux.net/~mdione/glob//archives/2008/09/../../../tags/utils/">utils</a> <a href="http://grulicueva.homelinux.net/~mdione/glob//archives/2008/09/../../../tags/security/">security</a></p> </div> <div class="inlinefooter"> <p><span class="pagedate">Posted <span class="date">Sat 20 Sep 2008 03:23:59 AM CEST</span></span></p> <p><span class="tags">Tags:</span></p> <p><span class="tags"><a href="http://grulicueva.homelinux.net/~mdione/glob//archives/2008/09/../../../tags/security/" rel= "tag">security</a></span></p> <p><span class="tags"><a href="http://grulicueva.homelinux.net/~mdione/glob//archives/2008/09/../../../tags/utils/" rel= "tag">utils</a></span></p> </div> </div> ssh-agent http://grulicueva.homelinux.net/~mdione/glob//posts/ssh-agent/ 2009-01-22T04:24:04Z 2008-09-20T01:23:59Z <p>En este post veremos cómo crear pares de claves pública/privada con passphrases, y cómo usar <code>ssh-agent</code> para no tener que andar tipeándolas a cada rato.</p> <p>Lo primero es generar el par. Hay dos tipos de pares de claves, RSA y DSA. Los pares se guardan en nuestro <code>.ssh/</code>, así que antes de generar un par nos fijamos qué hay allí:</p> <pre> <code>mdione@cobra:~$ ls -l .ssh/ total 28 -rw-r--r-- 1 mdione mdione 190 2008-02-26 15:29 config -rw------- 1 mdione mdione 1743 2008-09-19 16:55 id_dsa -rw-r--r-- 1 mdione mdione 394 2008-09-19 16:55 id_dsa.pub -rw------- 1 mdione mdione 11598 2008-09-02 10:35 known_hosts -rw------- 1 mdione mdione 9388 2008-06-05 22:59 known_hosts.old </code> </pre> <p>Hay una par DSA (<code>id_dsa</code> e <code>id_dsa.pub</code>), así que creamos un par RSA para no pisarlo:</p> <pre> <code>mdione@cobra:~$ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/mdione/.ssh/id_rsa): *** Enter passphrase (empty for no passphrase): *** Enter same passphrase again: Your identification has been saved in /home/mdione/.ssh/id_rsa. Your public key has been saved in /home/mdione/.ssh/id_rsa.pub. The key fingerprint is: 1c:da:2b:a8:97:72:7e:ab:ff:ea:bb:e8:6b:64:4c:93 mdione@cobra The key's randomart image is: +--[ RSA 2048]----+ | | | | | . . | | E + . | | o .. S | | +. . | | o... . | | ..=... | | .B**B*. | +-----------------+ </code> </pre> <p>Notar que en <code>***</code> <code>ssh-keygen</code> pide dos veces una <em>passphrase</em>. El término <em>passphrase</em> viene de la época en que las passwords sólo podían ser de un maximo de 8 caracteres. La passphrase puede ser de cualquier longitud; una longitud buena está en los 15-20 caracteres. Se puede poner una passphrase nula, pero por motivos de seguridad les sugiero que <strong>no</strong> lo hagan. Si aprenden bien a usar <code>ssh-agent</code> van a tener que tipearla poco.</p> <p>Ahora copiamos la parte pública al servidor al que queremos entrar:</p> <pre> <code>mdione@cobra:~$ ssh-copy-id -i .ssh/id_rsa.pub beetroot.except.com.ar *** mdione@beetroot.except.com.ar's password: Now try logging into the machine, with "ssh 'beetroot.except.com.ar'", and check in: .ssh/authorized_keys to make sure we haven't added extra keys that you weren't expecting. </code> </pre> <p>Probamos entrar al server para ver que el par ande:</p> <pre> <code>mdione@cobra:~$ ssh beetroot.except.com.ar *** Enter passphrase for key '/home/mdione/.ssh/id_rsa': Last login: Fri Sep 19 12:18:16 2008 from ginger.except.com.ar mdione@beetroot:~$ logout Connection to beetroot.except.com.ar closed. </code> </pre> <p>Notar que en <code>***</code> pide la passphrase del par que acabamos de crear.</p> <p>Ahora a usar <code>ssh-agent</code>. <code>ssh-agent</code> se inicia en toda sesión en una distro moderna, podemos verlo dando vueltas en nuestro background:</p> <pre> <code>mdione@cobra:~$ ps fax | grep ssh-agent 2997 ? Ss 0:00 \_ ssh-agent screen </code> </pre> <p>En este caso lo tengo corriendo antes de un <code>screen</code>, pero en un desktop podemos ver algo de la pinta <code>/usr/bin/ssh-agent /usr/bin/dbus-launch --exit-with-session x-session-manager</code>.</p> <p>Una vez que vemos el <code>ssh-agent</code> dando vueltas por ahí, veamos qué claves tiene:</p> <pre> <code>mdione@cobra:~$ ssh-add -l The agent has no identities. </code> </pre> <p>Ok, agreguemos identidades al agente:</p> <pre> <code>mdione@cobra:~$ ssh-add /home/mdione/.ssh/id_rsa *** Enter passphrase for /home/mdione/.ssh/id_rsa: Identity added: /home/mdione/.ssh/id_rsa (/home/mdione/.ssh/id_rsa) mdione@cobra:~$ ssh-add -l 2048 1c:da:2b:a8:97:72:7e:ab:ff:ea:bb:e8:6b:64:4c:93 /home/mdione/.ssh/id_rsa (RSA) </code> </pre> <p>En <code>***</code> <code>ssh-add</code> nos pide la passphrase de la clave. Ok, probemos entrar al servidor:</p> <pre> <code>mdione@cobra:~$ ssh beetroot.except.com.ar Last login: Fri Sep 19 20:58:57 2008 from 200.69.231.1 mdione@beetroot:~$ </code> </pre> <p>No pidió la passphrase, que es lo que queríamos.</p> <p>Las passphrases quedan en el <code>ssh-agent</code> por un período determinado de tiempo. Por defecto duran para siempre, pero con <code>ssh-add -t &lt;segundos&gt;</code> podemos cambiar eso. También podemos borrar una identidad con <code>ssh -d &lt;clave privada&gt;</code> o todas las identidades con <code>ssh-add -D</code> (que molesta costumbre de estas herramientas que tienen nombre de creación pero con algunas opciones de destrucción; <code>ssh-keygen</code> tiene una opción <code>-R</code> que no sólo borra claves, sino que lo hace sobre el <code>.ssh/known-hosts</code>, cuando el comando por sí solo actúa en los pares de claves).</p> <p>En otro post mostraré cómo sacar identidades de un agent y ponerlo en otro.</p> <p><a href="http://grulicueva.homelinux.net/~mdione/glob//archives/2008/09/../../../tags/utils/">utils</a> <a href="http://grulicueva.homelinux.net/~mdione/glob//archives/2008/09/../../../tags/security/">security</a></p> trac-me-tiene-los-eggs-llenos-toma-2 http://grulicueva.homelinux.net/~mdione/glob//posts/trac-me-tiene-los-eggs-llenos-toma-2/ 2009-01-22T04:24:04Z 2008-09-09T00:17:05Z <p>¿Se acuerdan de <a href= "http://grulicueva.homelinux.net/~mdione/glob/posts/trac-me-tiene-los-eggs-llenos/"> la primera parte</a>? Bueno, venía aplicando esto varias veces últimamente (nuevamente tracs y nuevamente plugins). Sé que <a href="http://john.lenton.com.ar/2008/05/26/easy-install-without-virtualenv-implies-hard-maintenance/"> mi jefe me va a retar</a>, pero la verdad es que lo prefiero así. Generalizé esa idea y lo hice un script, y para marcar su diferencia con el <code>easy_install</code>, lo llamé <code>useful_install</code>:</p> <pre> <code>#! /usr/bin/python __requires__ = 'setuptools==0.6c3' import sys path= sys.argv.pop (1) sys.path.append (path) sys.argv= [sys.argv[0], '--install-dir', path, '--site-dirs', path ]+sys.argv[1:] from pkg_resources import load_entry_point sys.exit( load_entry_point('setuptools==0.6c3', 'console_scripts', 'easy_install')() ) </code> </pre> <p>Como verán es idéntico al <code>easy_install</code>, salvo que el primer parámetro es el directorio donde vamos a instalar las cosas y que hace la magia necesaria de agregarlo al <code>sys.path</code> y armar los argumentos para <code>e_i</code>. Además, le podemos pasar más parámetros a voluntad y pasan derecho al <code>load_entry_point</code> del <code>e_i</code>. Que lo disfruten.</p> <p><a href="http://grulicueva.homelinux.net/~mdione/glob//archives/2008/09/../../../tags/trac/">trac</a> <a href="http://grulicueva.homelinux.net/~mdione/glob//archives/2008/09/../../../tags/python/">python</a> <a href="http://grulicueva.homelinux.net/~mdione/glob//archives/2008/09/../../../tags/sysadmin/">sysadmin</a></p>