Comandos básicos de ssh SSH es es
un programa que permite acceder a otro ordenador a través de la red, ejecutar comandos en la máquina remota y mover ficheros entre dos máquinas. Provee autenticación y comunicaciones seguras sobre canales inseguros. Es un reemplazo de rlogin, rsh y rcp. amos a ver estos usos básicos del
SSH .
ssh El comando ssh ofrece comunicación encriptada y segura entre dos sistemas sobre una red no segura. Este comando reemplaza al telnet,rlogin , rsh. Para iniciar una sesión en otra máquina usando ssh: [usuario1@localhost usuario1]$ ssh
[email protected] The authenticity of host 'servidor.dominio.es (192.168..2!' can't "e esta"lished. #% &ey finerrint is 9)*+f*66*f,*96*"a*6d*"2*ef*6,*-,*+,*18*d*cc*29. %re you sure you ant to continue connectin (yes/no!0 yes arnin* ermanently added 'servidor.dominio.es' (#%! to the list of &non hosts.
[email protected]'s assord* [
[email protected] [
[email protected] inio.es usuario1]$
!a primera vez que realizas la cone"ión debes aceptar la firma del otro host. #e esta manera se establece una relación de confianza que se traduce en archivar la clave p$blica de este servidor servid or en el fichero %&'(E).ssh)*no+nhosts. %&'(E).ssh)*no+n hosts.
!a sinta"is básica del comando ssh es: ssh user@hostname [command]
El comando es opcional. -i se especifica en lugar de obtener un shell se ejecuta el comando en la máquina remota. Por ejemplo podríamos hacer un ls en la máquina remota y observar su salida:
ssh
[email protected] ls O realizar alguna operación mas elaborada como realizar una copia en local de un directorio remoto, como en el ejemplo:
ssh
[email protected] 3tar cf 4 /home/usuario13 5 tar 7vf 4
na de las funcionalidades que le da mayor potencia al ssh es la redirección de las /. -i observas la variable de entorno #0-P!12observarás que tiene la forma localhost3n.n , esta permite que al abrir cualquier aplicación gráfca su salida se redirija al display del cliente
[usuario1@localhost usuario1]$ ssh
[email protected] [usuario1@servidor usuario1]$ echo $:%; localhost*11. [usuario1@servidor usuario1]$ 7eyes< [usuario1@servidor usuario1]$
scp El comando scp permite copiar ficheros entre dos máquinas. tiliza ssh para la transmisión de la información, por lo que ofrece la misma seguridad que el ssh. #e la misma manera utiliza los métodos de autenticación de ssh. Este comando reemplaza al rcp, ftp. Este es un ejemplo de uso del scp para copiar desde la máquina local a una remota: [usuario1@localhost]sc /tm/file
[email protected]*/tm !ambi"n podemos copiar fcheros entre dos máquinas remotas:
[usuario1@localhost]sc usuario1@anotherhost*/tm/file
[email protected]*/tm
#a sinta$is del comando es:
sc [4=rv>?+6] [4 sshAconfi] [4 roram] [4 ort] [4c ciher] [4i identityAfile] [4o sshAotion] [[user@]host1*]file1 [...] [[user@]host2*]file2
Puedes consultar las opciones en la página man de scp, estas son las más habituales3 43 conserva las propiedades del archivo. Permisos del archivo, fecha de $ltima de modificación. 4r3 copia recursiva de directorios
!a sinta"is para especificar el origen o destino de los archivos tiene la forma [[user@]host:]file donde3
user3
es el usuario de la máquina. -i no se especifica es el actual. host3 es la máquina origen o destino del archivo. -i no se informa es la máquina local.
file3
fichero o directorio a copiar. Por defecto es el directorio &'(E del usuario. En caso de ser un directorio deberás especificar la opción r.
sftp El comando sftp transfiere archivos entre máquinas de forma interactiva. !os comandos interactivos son similares al clásico ftp: [usuario1@localhost usuario1]$ sft servidor.dominio.es ?onnectin to servidor.dominio.es... usuario1@servidor's assord* sftB hel %vaila"le commands* cd ath ?hane remote directory to 'ath' lcd ath ?hane local directory to 'ath' chr r ath ?hane rou of file 'ath' to 'r' chmod mode ath ?hane ermissions of file 'ath' to 'mode' chon on ath ?hane oner of file 'ath' to 'on' hel islay this hel te7t et remote4ath [local4ath] onload file lls [ls4otions [ath]] islay local directory listin ln oldath neath ymlin& remote file lm&dir ath ?reate local directory ld rint local or&in directory ls [ath] islay remote directory listin lumas& umas& et local umas& to 'umas&' m&dir ath ?reate remote directory ut local4ath [remote4ath] Cload file d islay remote or&in directory e7it Duit sft =uit Duit sft rename oldath neath #ename remote file rmdir ath #emove remote directory rm ath elete remote file symlin& oldath neath ymlin& remote file version ho T version Ecommand F7ecute 'command' in local shell E Fscae to local shell 0 ynonym for hel sftB
%n ejemplo de uso:
[usuario1@localhost]sft
[email protected] sftB et fichero
Métodos de autenticación
4
SSH puede
utilizar varios métodos de autenticación y hay archivos que controlan los permisos para estos métodos.
Autenticación mediante usuario/contraseña Es la autenticación básica. -e puede habilitar o deshabilitar en /etc/ssh/sshdAconfi y /etc/ssh/sshAconfi.
Autenticación basada en host/usuario 4omo en los comandos 5r5 se puede configurar el acceso a ssh mediante ficheros que especifican desde que usuario y máquina se permite. Estos ficheros son3
/etc/ssh/shosts.e=uiv3
con el mismo funcionamiento
que /etc/hosts.e=uiv $GHIF/.shosts3 a nivel de usuario, como el fichero
$GHIF/.rhost
Autenticación mediante claes Para obtener el má"imo partido a SSH podemos utilizar su capacidad de autenticación mediante clave p$blica y privada. Para ello el cliente debe generar sus claves privada y p&blica, compar'endo esta &l'ma con el servidor para poder iden'fcarse %na vez hecho esto las cone$iones se podrán establecer sin necesidad de u'lizar el esquema clásico de usuario y contrase(a
n mensaje encriptado con la p$blica sólo puede desencriptarse con la correspondiente clave privada. HenG utiliza estas propiedades de los algoritmos de clave p$blica y privada para realizar la autenticación sin intercambio de contrase6as.
Estos son los pasos a seguir para poder utilizar esta autenticación. 7.
)enerar la clave en el cliente
[usuario1@localhost usuario1]$ ssh4&eyen 4t dsa Jeneratin u"lic/rivate dsa &ey air. Fnter file in hich to save the &ey (/home/usuario1/.ssh/idAdsa!* Fnter asshrase (emty for no asshrase!* Fnter same asshrase aain* ;our identification has "een saved in /home/usuario1/.ssh/idAdsa. ;our u"lic &ey has "een saved in /home/usuario1/.ssh/idAdsa.u". The &ey finerrint is* 1c*""*8c*da*c,*a+*d"*9f*""*+d*6+*86*a8*29*8,*,
[email protected] [usuario1@localhost usuario1]$
8. !a passphrase si se rellena tiene un comportamiento similar a la contrase6a, será solicitada al utilizar esta clave. #eberá ser una frase, en la que se pueden incluir espacios en blanco y signos de puntuación. 9. *n nuestro caso hemos decidido dejarla vacía para así pode r u'lizar este m"todo de auten'cación en procesos no interac'vos Puedes u'lizar una +rase de paso si no conas en la seguridad de tu máquina
!a passphrase se puede cambiar con el comando ssh:*eygen :p.
;. El tipo de la clave se especifica mediante el parámetro o rsa7 para ssh v7 o rsa, dsa para ssh v8
4t,
y puede ser3
En el ejemplo se ha utilizado el tipo dsa, y se ha guardado en los archivos por defecto. Estos son $GHIF/.ssh/idAdsa para la clave privada y $GHIF/.ssh/idAdsa.u" para la clave p$blica. !a clave privada es la que nos identifica, por lo que debe ser accesible $nicamente por el usuario propietario. <. 4ompartir la clave p$blica !a clave p$blica debe ser incluida en el fichero $GHIF/.ssh/authoriKedA&eys2 de cada máquina en la que deseemos utilizar la autenticación por clave p$blica. Para realizar este intercambio podemos utilizar directamente el ssh desde la máquina en que hemos generado nuestra clave [usuario1@localhost usuario1]$ ssh
[email protected] 'cat BB .ssh/authoriKedA&eys2' L .ssh/idAdsa.u"
1hora ya podemos utilizar los comandos de ssh sin utilizar el usuario y contrase6a, confiando $nicamente en las claves publica y privada. *n el caso de u'lizar una passphrase no vacia se solicitaría al realizar la a uten'cación:
[usuario1@localhost usuario1]$ ssh
[email protected] Fnter asshrase for &ey '/home/usuario1/.ssh/idAdsa'* [usuario1@servidor usuario1]$
!estión de claes
Para la autenticación mediante claves, HenG ofrece un método para cachear las claves y no tener que introducir la passphrase mas que una vez. Este funcionamiento se obtiene mediante el ssh"agent. Este agente se puede arrancar al inicio de la sesión, y el resto de cone"iones con ssh utilizarán este agente para realizar la autenticación, que será entonces transparente al usuario. 1l agente se a6aden las claves que se desea usar mediante el comando ssh" add, si e"iste passphrase está será la $nica vez que se solicita y se comprueba en local. 4uando se necesite usar esta clave el agente se encarga de realizar la autenticación con la otra máquina. amos a ver este proceso en detalle.
ssh"agent #anzamos el agente, este se queda en bac-ground pero in+orma de las variables de entorno que nos serán &'les
[usuario1@localhost usuario1]$ ssh4aent GA%CTGAH?MN/tm/ssh4OOln2tJm/aent.-216P e7ort GA%CTGAH?MP GA%JFQTAN-21)P e7ort GA%JFQTAP echo %ent id -21)P [usuario1@localhost usuario1]$
!a salida del ssh:agent pueden lanzarse en el shell para tener disponibles las variables de entorno que utilizarán las llamadas a comandos SSH *sta operación se puede realizar en un sólo comando de esta manera:
[usuario1@localhost usuario1]$ eval $(ssh4aent! %ent id -229
puedes a6adir estas lineas a tu ."ashArofile para que se ejecuten al inicio de la sesión. #o comprobamos:
[usuario1@localhost usuario1]$ set 5re G GA%JFQTAN-229 GA%M%N/usr/li"e7ec/oenssh/nome4ssh4as&ass GA%CTGAH?MN/tm/ssh4OO,cnut/aent.-228 [usuario1@localhost usuario1]$
(1)
#
%$Path del soc*et uni" que se utiliza para dialogar con el agente.
ssh"add
na vez tenemos el agente de autenticación en marcha, deberemos a6adir las claves que deseamos usar. En nuestro caso la que hemos generado en iddsa [usuario1@localhost usuario1]$ ssh4add .ssh/idAdsa Fnter asshrase for .ssh/idAdsa* dentity added* .ssh/idAdsa (.ssh/idAdsa! [usuario1@localhost usuario1]$
-i la clave tiene passphrase se solicita en este momento, y se utilizará para todas las sesiones que se abran a partir de este momento sin necesidad de volver a introducirla.
&e'chain El agente tiene el inconveniente de que sólo se puede usar en las sesiones en las que estén definidas las variables de entorno que hemos comentado. -i se a6ade el comando ssh"agent en el inicio de la sesión el efecto será que tendremos un agente por cada sesión. Para solucionar este comportamiento puedes utilizar el script *eychain que se puede obtener de http3))+++.gentoo.org)projects)*eychain) . Este script se incluye en el inicio de la sesión y lanza el ssh"agent una sola vez en el sistema.
()ecución de comandos en modo no interactio* !a autenticación mediante claves se puede utilizar para ejecutar comandos sobre equipos remotos desde el cron. Es recomendable que este tipo de comandos se realicen desde un usuario destinado sólo a estas tareas. Para ello utilizaremos el campo de opciones para la clave p$blica en el fichero $GHIF/.ssh/authoriKedA&eys2 . !a clave p$blica tiene los siguientes campos, separados por espacios3
opciones tipo de clave
clave codifcada en base./
[usuario1@localhost usuario1]$ cat .ssh/idAdsa.u" ssh4dss
%%%%>-QKa?1&c-I%%%?>%R#sicCS2S:69T;?/"KyTalm#cT-IuImmD=9h?uIeQJc) ivS:SO,R9FRGRHrI6I%Dhn2humssoMyvmffHKSoQ>Fu-s,e;vcJS&;6 IJ8dRi:-r:M?:%DOdSs+1#,661d#9;um:m:tl#S%%%%D?y=+R-i=HG%F# f&d:n#)6:D%%%>Fic1s8#rv9%KyHcQH6,%-ihrmF%&lO/uOmFKfv#Ha u;G=C=lh"rls9&TC)I&UI"Ii+hRQOt+">iCQTHc7VOKI#:"a"-8,UrK9 &s#K&ie+t-JDJO/lRG=QFUd&Rl=sMyI"lKClD:H%%%%%9H%Hll)&%7t:om)"2 ToTKhu2s-v9DuSF&"?h)ucStM=MFV:"72)d&&6tiD"tQuTaIFn-T?>s#hsDIRi iVSdQShTH/m&18/O"9aKe;cCK+H1odKUVC+,%r9%%#9+td-&IF6VH=uef:R1?+Q dKOIGyR%NN
[email protected]
!as opciones irán separadas por comas, algunas de las aceptadas son3
from 3
permite especificar una lista de hosts desde los que se permite o no el acceso mediante clave p$blica. Es una opción de seguridad, para evitar dejar el acceso libre desde cualquier host a alguien que haya robado la clave privada. command: indica el comando que se ejecutará cuando se use esta clave, restringe una clave para realizar una operación determinada *l comando que especifque el usuario en su linea de comandos se ignorará
!a variable de entorno GAH#JQ%:A?HII%Q contiene el comando que lanza el usuario. Esta variable se puede utilizar para e"traer los argumentos de la llamada.
no"pt': evita el uso de una 0y en la ejecución del comando
Puedes consultar el resto de las opciones en la sección 1=&'>0?E#@E2A0!E A'>(1= del man de sshd
tilizaremos esta funcionalidad para acceder, por ejemplo, a logs de sistemas remotos y procesarlos mediante e"aliKer . Para ello creamos una entrada en %&'(E).ssh)authorized*eys8
aache en
con el siguiente
+ormato:
fromN3Acliente.dominio.es3WcommandN3/usr/local/root/"in/catAaccessAlo 3Wno4ty ssh4dss %%%%>-QKa?1&c-I%%%?>%MhFn,#:Kls;dOeQ2yl:Us),oJDTsfr&ss&T%Vmi2a i9?ovnT"MHos86y9DUaVl8m;2Qt,OGcuQ9Hc,9umQmShrh6FMi:r), %;:Jhy/,Sun,Kdvc;C6ooOinSKl78lRoyDhD,%%%%Du&1Ca7:ruQ 6D;I:J2mucD%%%F%JU+1ri1&1O7MCiUt-M,n6aJI%n/7GFVQ1Mt%rri MtiQenVOJ%u"&9DO?6nf/RJUI>y;Or&toUGmn-l%Sea1Ge+hhlsU>,rD8#MU#O8 :ihC-"hel:acrGIODQU2vlR#72cmIG9;JoVeo2>%%%?%D/OO;m-nKRJ:=#,+ e8uFS2>D1Rc)l>Dl"&Sh,GveGIC?+v9FomU7e6V7fhvQRJC?smo:r/odvKsiG8 1r:=)nyHJf+-s>%QtIUn%#Ho6l1:US=i2iId#d%RItd?R-GHUG"yaODFs>?%6 KRJ#TH;/DsN
[email protected]
en ella se especifica que al utilizar esta clave, asociada al usuario saltador de la máquina cliente sólo desde esta máquina, se ejecute el comando /usr/local/root/bin/cat+access+log sin reservar una tty.
*l script asociado al comando ejecuta las siguientes acciones:
XE/"in/"ash if [ E 4K 3$YGAH#JQ%:A?HII%QZ3 ] then hostN$(echo $YGAH#JQ%:A?HII%QZ5a& 'Yrint $2Z'! else if [ $X 4lt 1 ] then echo 3Csae* $("asename $! host3 e7it 1 else hostN$1 fi fi :HJ#N/var/lo/httd %T%N$(date 44dateN31 month ao3 ;m! %??FN$Y:HJ#Z/$YhostZ/$Y%T%Z4accessAlo if [ 4f $Y%??FZ ] then cat $Y%??FZ fi
Este permite consultar el $ltimo accessAlo de nuestro servidor +eb, haciendo uso de la variable GAH#JQ%:A?HII%Q que da acceso a los parámetros originales. 1hora sólo nos queda confgurar el script que se ejecutará desde el cron en la máquina cliente
XE/"in/"ash ?HII%QN3/usr/local/root/"in/catAaccessAlo3 F#VF#Nvirtualhost ssh
[email protected] 3$Y?HII%QZ $YF#VF#Z3 5 e"aliKer 4
En este script se ejecuta el comando especificado con el parámetro sobre la máquina remota. !a salida del comando la recoge el programa ,ebali-er que, en la máquina local, procesará el log del servidor +eb.
.edirección de puertos !a redirección de puertos nos permite tanto encriptar comunicaciones, que de otra manera se realizarBan en te"to claro, como acceder a servicios que sólo están disponibles de manera local al servidor. -i observamos las opciones avanzadas del comando ssh:
ssh [4af&n=stv7%?QTO12+6] [4" "indAaddress] [4c ciherAsec] [4e escaeAchar] [4i identityAfile] [4l loinAname] [4m macAsec] [4o otion] [4 ort] [4 confifile] [4: ort*host*hostort] [4# ort*host*hostort] [4 ort] hostname 5 user@hostname [command]
vemos que tenemos la posibilidad de redirigir puertos locales o puertos remotos, mediante las opciones 4: y 4#. amos a ver un ejemplo $til para cada tipo de redirección.
.edirección puertos locales El uso tBpico de esta redirección es la de tener acceso a servicios que sólo están disponibles desde la máquina remota. Podemos realizar una cone"ión ssh a la máquina remota y redirigir este servicio para utilizarlo de manera local. #a sinta$is es:
ssh [4: ort*host*hostort] hostname 5 user@hostname
donde3
port3
será el puerto local que queremos utilizar para acceder al servicio host3 máquina que ofrece el servicio hostport 3 puerto en que host ofrece el servicio hostname 3 máquina a la que nos conectamos, puede ser la misma que host
-e entenderá mejor con un ejemplo. 2oy a u'lizar el servicio de pro$y que se sirve en el puerto 34 de la máquina pro$ydominioes y que sólo está disponible desde servidordominioes, mediante el puerto local 3535
[usuario1@localhost usuario1]$ ssh 4: 88*ro7y.dominio.es*81
[email protected] [usuario1@servidor usuario1]$
#e esta manera además de obtener un shell realizamos la redirección de puertos. -i no deseamos obtener el shell podemos utilizar la opción:f para que el comando se quede en bac*ground y :C para indicar que no queremos ejecutar comandos remotos
[usuario1@localhost usuario1]$ ssh 4fQ 4: 88*ro7y.dominio.es*81
[email protected] [usuario1@localhost usuario1]$ netstat 4ln5re 88 tc 12)...1*88 ...*\ :TFQ 6+1)/ssh
[usuario1@localhost usuario1]$ s 4f 6+1) C ? TIF TT; TIF ?I usuario1 6+1) 1 19*2+ 0 ** ssh 4fQ 4: 88*ro7y.dominio.es*81
[email protected] [usuario1@localhost usuario1]$
4omo puedes observar de esta manera el comando ssh se queda en bac-ground y no tenemos shell en la maquina servidor 1hora sólo nos quedaría confgurar nuestro navegador para u'lizar como pro$y a localhost por el puerto 3535
En el ejemplo el servicio redirigido sólo puede usarse localmente. -i quieres que tu máquina acepte cone"iones remotas en este puerto deberás a6adir al comando la opción 4.
.edirección puertos remotos Esta redirección se realiza en sentido inverso a la anterior y se utiliza para hacer accesible remotamente un puerto local o accesible localmente. #a sinta$is es:
ssh [4# ort*host*hostort] hostname 5 user@hostname
donde3
port3
puerto remoto donde se ofrecerá el servicio host3 máquina que ofrece el servicio, la local o una a la que tengamos acceso hostport 3 puerto en que host ofrece el servicio hostname 3 máquina a la que nos conectamos, puede ser la misma que host
Por ejemplo, este comando conseguirá que en la máquina remota se sirva en el puerto 3554, el servidor de streaming que se está sirviendo en la máquina local en el puerto 3555
ssh 4fQ 4# 8*localhost*81
[email protected]
so del SSH en otras aplicaciones SSH se
puede utilizar junto con otras aplicaciones para hacer segura su comunicación o cómo un método de autenticación. Estos son algunos ejemplos.
pop0ssh !as sesiones de correo P'P suelen ser inseguras. 1l establecer la sesión el usuario y contrase6a viajan en te"to claro, asB como el contenido del correo.
-i utilizamos ssh para establecer estas cone"iones, la información viajará encriptada y lo mas importante, la autenticación también. Para conseguirlo u'lizaremos la redirección local de puertos para redirigir el puerto local 44445 al puerto 445 de nuestro servidor de pop
[user1@localhost user1]$ssh 4fQ 4: 1111*oserver*11 oserver 6e esta manera podemos confgurar nuestro cliente de correo para acceder al puerto local 44445 para leer nuestro correo por P OP en lugar de acceder directamente, y de manera insegura, a nuestro servidor de POP
[user1@localhost user1]$telnet localhost 1111 Tryin 12)...1... ?onnected to localhost.localdomain (12)...1!. Fscae character is ']'. HM Doer (version +..-! at oserver startin.
ppp0ssh (ediante PPP y SSH es posible crear una red privada virtual DPC para crear un tunel entre dos hosts. !os pasos pueden ser3
4rear un usuario 5vpn5 en la máquina que hará de servidor de tuneles. Preparar la autenticación mediante claves entre el usuario del servidor y el del cliente, mediante el intercambio de clave p$blica. 4onfigurar el sudo en la máquina servidor para que el usuario 5vpn5 pueda ejecutar el demonio pppd [root@localhost root]X tail 42 /etc/sudoers %:: %::N (root! QH%*/usr/local/"in/driftnet vn
%::N (root! QH%* /usr/s"in/d
0nstalar en el cliente el script ppp"oer"ssh que realizará la cone$ión con el usuario 7vpn7 en el servidor
XE/"in/sh #FIHTFA%??HCQTNv
[email protected] #FIHTFAN3sudo /usr/s"in/d ic4accet4local ic4accet4remote noauth3 :H?%:AN3d silent 1..2.1*1..2.23 $:H?%:A ty 3ssh 4t $#FIHTFA%??HCQT $#FIHTFA3
En la máquina local ejecutamos el script. Este ejecuta un ssh contra la máquina remota para ejecutar el pppd que establecerá la cone"ión.
#e esta manera se establece un canal seguro entre las dos máquinas utilizando una interfaz ppp. Esto permite utilizar los servicios de la máquina remota para todos los usuarios de la máquina local y también en el sentido inverso.
rs'nc0ssh 'tro de los programas que puede hacer uso del ssh es r'snc. >sync permite mantener dos directorios de maquinas diferentes sincronizados. -u protocolo hace que se envBe $nicamente las diferencias entre los archivos. Para especificar que usamos ssh para conectar entre las dos máquinas usamos el parámetro :e : rsync 4e ssh 4avK directorioAlocal
[email protected]*directorioAdestino
Conclusión HenG puede
usarse para3
reemplazar al telnet, rlogin, rsh y rcp realizar copias de seguridad de manera segura a través de la red
ejecutar comandos remotos
acceder a recursos locales desde 0nternet
realizar transferencias seguras de ficheros