El otro día dí una charlita un poquito larga de ssh/scp y screen
en el IATE, el lugar donde
laburo. En la misma hablo de ssh/scp básico, mas cómo
poner claves públicas/privadas y cómo usar el
ssh-agent para administrarlas (algo de lo que ya
hablé en este glob), mas otros temas como el X11 forwarding y
el agent-forwarding. Además hablé de screen, una
herramineta que se complementa muy bien con ssh. Dejo
las filminas acá.
security utils
En este post veremos cómo crear pares de claves pública/privada
con passphrases, y cómo usar ssh-agent para no tener
que andar tipeándolas a cada rato.
Lo primero es generar el par. Hay dos tipos de pares de claves,
RSA y DSA. Los pares se guardan en nuestro .ssh/, así
que antes de generar un par nos fijamos qué hay allí:
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
Hay una par DSA (id_dsa e id_dsa.pub),
así que creamos un par RSA para no pisarlo:
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*. |
+-----------------+
Notar que en *** ssh-keygen pide dos
veces una passphrase. El término passphrase 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
no lo hagan. Si aprenden bien a usar
ssh-agent van a tener que tipearla poco.
Ahora copiamos la parte pública al servidor al que queremos entrar:
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.
Probamos entrar al server para ver que el par ande:
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.
Notar que en *** pide la passphrase del par que
acabamos de crear.
Ahora a usar ssh-agent. ssh-agent se
inicia en toda sesión en una distro moderna, podemos verlo dando
vueltas en nuestro background:
mdione@cobra:~$ ps fax | grep ssh-agent
2997 ? Ss 0:00 \_ ssh-agent screen
En este caso lo tengo corriendo antes de un screen,
pero en un desktop podemos ver algo de la pinta
/usr/bin/ssh-agent /usr/bin/dbus-launch --exit-with-session
x-session-manager.
Una vez que vemos el ssh-agent dando vueltas por
ahí, veamos qué claves tiene:
mdione@cobra:~$ ssh-add -l
The agent has no identities.
Ok, agreguemos identidades al agente:
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)
En *** ssh-add nos pide la passphrase
de la clave. Ok, probemos entrar al servidor:
mdione@cobra:~$ ssh beetroot.except.com.ar
Last login: Fri Sep 19 20:58:57 2008 from 200.69.231.1
mdione@beetroot:~$
No pidió la passphrase, que es lo que queríamos.
Las passphrases quedan en el ssh-agent por un
período determinado de tiempo. Por defecto duran para siempre, pero
con ssh-add -t <segundos> podemos cambiar eso.
También podemos borrar una identidad con ssh -d <clave
privada> o todas las identidades con ssh-add
-D (que molesta costumbre de estas herramientas que tienen
nombre de creación pero con algunas opciones de destrucción;
ssh-keygen tiene una opción -R que no
sólo borra claves, sino que lo hace sobre el
.ssh/known-hosts, cuando el comando por sí solo actúa
en los pares de claves).
En otro post mostraré cómo sacar identidades de un agent y ponerlo en otro.
utils security