archives/2008/09StyXman's globhttp://grulicueva.homelinux.net/~mdione/glob//archives/2008/09/StyXman's globikiwiki2009-01-22T04:24:04Zdnsmasqhttp://grulicueva.homelinux.net/~mdione/glob//posts/dnsmasq/2009-01-22T04:24:04Z2008-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>
utilshttp://grulicueva.homelinux.net/~mdione/glob//tags/utils/2009-01-22T04:24:04Z2008-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 <segundos></code> podemos cambiar eso.
También podemos borrar una identidad con <code>ssh -d <clave
privada></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-agenthttp://grulicueva.homelinux.net/~mdione/glob//posts/ssh-agent/2009-01-22T04:24:04Z2008-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 <segundos></code> podemos cambiar eso.
También podemos borrar una identidad con <code>ssh -d <clave
privada></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-2http://grulicueva.homelinux.net/~mdione/glob//posts/trac-me-tiene-los-eggs-llenos-toma-2/2009-01-22T04:24:04Z2008-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>