tags/utilsStyXman's globhttp://grulicueva.homelinux.net/~mdione/glob//tags/utils/StyXman's globikiwiki2010-01-27T22:55:54Zcharla-ssh-scp-screenhttp://grulicueva.homelinux.net/~mdione/glob//posts/charla-ssh-scp-screen/2010-01-27T22:55:54Z2009-04-18T21:49:35Z
<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//tags/utils/../security/">security</a> <span class="selflink">utils</span></p>
ssh-agenthttp://grulicueva.homelinux.net/~mdione/glob//posts/ssh-agent/2010-01-27T22:55:54Z2008-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><span class="selflink">utils</span> <a href="http://grulicueva.homelinux.net/~mdione/glob//tags/utils/../security/">security</a></p>