Documentos de Académico
Documentos de Profesional
Documentos de Cultura
pepe
18 de febrero de 2011
Índice
1. Introducción. 1
2. Instalación. 4
3. Conguración. 4
1. Introducción.
Se puede acceder remotamente a un host utilizando ssh, que es un sistema cliente-
servidor que permite logearse en modo consola en un servidor remoto. El servidor ejecuta
conexión es doble. Por una parte el servidor debe poner de maniesto su identidad (para
evitar suplantaciones) y por otra parte el usuario que accede al sistema también debe
autenticarse. El servidor usa un sistema de clave pública para identicarse. Esa clave
1
La primera vez que un cliente se conecta a un servidor le sale un mensaje advirtiendo
que la autenticidad del servidor no puede ser establecida y mostrándonos su clave pública.
host conocido, y su clave pública (y parece que también su ip) queda almacenada en
~/.ssh/known_hosts.
Si queremos cambiar la clave pública del server, por ejemplo porque ha sido compro-
# rm /etc/ssh/ssh_host_*
# dpkg-reconfigure openssh-server
Lógicamente, luego habrá que cambiar adecuadamente los known hosts de los clientes. Es-
el comando:
ssh-keygen -R host_ip_address
que elimina la clave pública del host referenciado, de manera que la próxima vez que
nos conectemos a él será como si fuese la primera y nos pedirá aceptar su nueva clave
pública.
equipo servidor, pero hay otras posibilidades, como por ejemplo usar clave pública. Para
hacer esto tenemos que generar la clave pública y luego activarla en el servidor. Para
ssh-keygen -t dsa
Con esto se genera un par de claves, pública y privada, que se almacenan en ~/.ssh/id_dsa.pub
y ~/.ssh/id_dsa, respectivamente. Estas son las claves que sirven para identicar al clien-
te. Al generarlas nos pedirá una passphrase (que en el fondo es simplemente una password
pero que permite más caracteres) y que no hay que olvidar porque es imposible recupe-
rarla (yo he puesto antiguas tonterías h8a3z2g4). Ahora será necesario poner la clave
pública en la cuenta del usuario en el servidor. Para esto hay que añadirla al nal del ar-
2
cat ~/clave.tmp >> ~/.ssh/authorized_keys
rm clave.tmp
Una vez hecho esto, cada vez que intentamos conectarnos desde el cliente al servidor por
ssh nos pedirá la contraseña, que es la passphrase de la clave pública que hemos generado,
y ya no la password del usuario. Como teclear esto cada vez que nos conectamos puede
ser un lío conviene usar ssh-agent, que es un programa que mantiene las claves privadas
usadas para la autenticación de clave pública y que arranca con las X o al logearse en
el sistema. Para añadir claves a este programa se usa el comando ssh-add, que cuando
se ejecuta sin parámetros añade al ssh-agent los cheros ~/.ssh/id_rsa, ~/.ssh/id_dsa
y ~/.ssh/identity (esta última es para RSA v.1). Si estos cheros llevaban asociada una
passphrase, nos la pide y queda guardada en el agente. Tras esto ya no será necesario
meter la passphrase cada vez que nos conectamos al servidor, ya que el programa ssh-
agent se encarga de ello. Basta con identicarse la primera vez que nos conectamos en
cada sesión y luego se supone que ya estamos correctamente identicados para todo el
resto de la sesión. Eso sí, si salimos del sistema, al volver a entrar tendremos que volver
una sesión a otra y mientras no se apague el ordenador será necesario usar el programa
keychain.
Para borrar del agente las identidades añadidas al ejecutar ssh-add sin argumentos
hacemos
ssh-add -d
Si queremos eliminar todas las identidades del agente, simplemente ponemos la D ma-
Para poder acceder desde t a box como ususario pepe he tenido que copiar en la
carpeta /home/pepe/.ssh de t las claves de ese usuario que tengo en asus. En concreto he
copiado los archivos id_sda, id_sda.pub, id_rsa, e id_rsa.pub. Luego puedo acceder desde
fish://pepe@box:1435
sftp://pepe@box:1435
Otra posibilidad es acceder desde dolphin, creando una carpeta de red con conexión vía
ssh.
3
2. Instalación.
Para usarlo en debian podemos instalar el metapaquete ssh, que instala el cliente
son:
3. Conguración.
El archivo básico de conguración es el del servidor, /etc/ssh/sshd_cong. En él las
líneas que empiezan por # son comentarios. Como siempre, tras editarlo habrá que
hacer /etc/init.d/ssh restart. Algunas opciones interesantes que contiene este archivo de
conguración son:
Port para especicar el puerto en el escuchará ssh (por defecto es el 22, yo uso el 1435).
Protocol para especicar la versión de ssh que se usará; lo dejamos en 2, que es más
moderno.
AllowUsers es una lista de nombres de usuarios, separados por espacios, a los que se
les permite el acceso vía ssh (yo aquí no he puesto nada, es decir, la opción no
aparece).
yes ).
word; por defecto es yes, pero igual es una buena idea ponerlo a no (sobre todo
MaxStartups
4
PermitUserEnvironment
Los clientes por su parte obtienen la conguración de, por orden:
del archivo de conguración del servidor), para no tener que andar especicándolo en
cambiar el puerto conviene vericar que no está siendo usado por otra aplicación. Para
comprobar esto en el servidor podemos hacer, por ejemplo para ver si el puerto 435 está
libre:
ssh remotehost.com
Nos conectamos siempre con la identidad de un usuario que está validado en el servidor.
Por defecto será la del usuario activo en el cliente. Podemos especicar otro usuario con
Por defecto ssh trabaja en el puerto 22 salvo que se especique otra cosa al congurarlo.
pero sin mantener una shell remota, sino simplemente ejecutar el comando y salir, pues
le pasamos el comando como argumento nal de ssh. Por ejemplo, si queremos que el
5
ssh pepe@lam ls -l /
En este caso, la salida del comando la captura la shell del cliente, que puede usarla como
estas alternativas hace que el servidor termine la sesión. Si no es posible contactar con
el servidor se pueden usar secuencias de escape del cliente para hacer que sea éste el que
termine la conexión. En este caso habría que teclear 'RC RC ~ .', es decir, dos retornos
mente y que son scp (secure copy) y sftp (secure ftp). La primera se comporta como
el comando cp y la segunda como ftp, pero en ambos casos a través del túnel ssh. Para
usarlos no es necesario estar conectado por ssh, sino que desde nuestra consola de cliente
scp usa ssh para copiar cheros entre hosts y tiene una sintaxis similar a la de cp,
tomando como primer argumento el chero origen y como segundo el chero destino. Los
relativa al home del usuario. Para copiar directorios recursivamente se usa la opción -r.
interactivamente, disponiendo de comandos similares a los de ftp (get, put, exit, bye o
sftp host
En este caso disponemos de algunos comando en sus versiones remota y local (esta última
con nombres precedidos por l). Así, comandos remotos serán cd, ls, mkdir y pwd, y sus
versiones locales lcd, lls, lmkdir, lpwd. La sesión se termina con exit, quit o bye. Para subir
6
Cuando no se especica la ruta opcional se considera idéntica a la que sí aparece. La
opción -P hace que se copien también los permisos y tiempos de acceso de los cheros.
Pero también se puede usar para descargar un archivo directamente, sin abrir una
En este caso parece que conviene especicar claramente la ruta del chero. El chero de
destino, le2, es opcional, será el nombre y la ruta que le queremos dar a la copia.
Parece que como puerto, en lugar de poner 22 podemos poner ssh y él ya lo entiende.