ssh-sftp-scp sin password
DESCRIPTION
suite ssh manejo con certificados.Ejemplo desarrollado.TRANSCRIPT
Conectarte por SSH, SFTP o SCP sin password
Identificación del cliente mediante clave pública y certificados
Nota importante:
Este procedimiento sirve solo en un solo sentido en este ejemplo del usuario1 de la máquina A a la B.No es recíproco de B a A.Al realizar el proceso de B a A se invalida de A a B.Tampoco es válido para todos los usuarios de A solo uno por vez.Al realizar el proceso con un segundo usuario de A hacia B por ejemplo usuario2 de A se invalida usuario1.
El cliente puede identificarse mediante clave pública, sin password.
En el ejemplo siguiente la idea es que el usuario francis de la máquina cliente asterix se conecte
por ssh a la máquina servidor obelix (de usuario mario) sin contraseña
Para esto creamos en el cliente una clave RSA:
Veamos vamos a genera nuestras claves y los certificados:máquina asterixusuario francis
francis@asterix:~$ sshkeygen t rsa f ~/.ssh/id_rsa
activamos ssh-agent en el cliente para que no nos pida la pass-phrase:
francis@asterix:~$ eval 'sshagent s'SSH_AGENT_PID=4413; export SSH_AGENT_PID;echo Agent pid 4413;francis@asterix:~$ sshaddEnter passphrase for /home/francis/.ssh/id_rsa:Identity added: /home/francis/.ssh/id_rsa (/home/francis/.ssh/id_rsa)
Ahora vamos a copiar la clave pública en el servidor la otra máquina que en este ejemplo es obelix:
~/.ssh/id_rsa.pub
colocamos la passphrase
Enter passphrase for /home/francis/.ssh/id_rsa: Identity added: /home/francis/.ssh/id_rsa (/home/francis/.ssh/id_rsa)
francis@asterix:~$ scp P 33322 ~/.ssh/id_rsa.pub mario@obelix:~/.ssh/id_rsa.pub
The authenticity of host '[192.168.13.30]:33322 ([192.168.13.30]:33322)' can't be
1-4
established.ECDSA key fingerprint is 0f:81:87:28:ee:1e:c4:59:e3:6e:89:c5:08:64:c3:7c.Are you sure you want to continue connecting (yes/no)? yesWarning: Permanently added '[192.168.13.30]:33322' (ECDSA) to the list of known [email protected]'s password: id_rsa.pub 100% 393 0.4KB/s00:00
eventualmente si nos deniega el acceso en forma local o remota ejecutamos en obelix ya que esta carpeta y su contenido puede estar en propiedad de root
sudo chown R mario .ssh
Luego siguiendo con nuestro proceso la añadimos en el servidor la clave id_rsa.pub (la máquina obelix) al final del archivo authorized_keys:
~/.ssh/authorized_keys
o en forma local en la obelix o remotamente por
$ ssh p 33322 mario@obelix
Para esto nos logueamos colocando el passwd por última vez y ejecutamos (eventualmente tendremos que crear el directorio .ssh en el directorio ~/ (home de mario) en la máquina obelix
mario@obelix:~$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
comprobamos que podemos iniciar una sesión SSH sin password ni pass-phrase:
Nos pedirá la primera vez que coloquemos la passphrase antes utilizada y un cuadro de dialogo si queremos que se bloquee el depósito de claves para que nos pida de nuevo la passsphrase. Ante esto debemos elegir que lo desbloquee si tenemos iniciada sesión y no la pedirá mas.
Eventualmente la versión o configuración debemos indicarle que y/o en donde saca la clave o certificado que podría estar en otro directorio de la siguiente manera:
ssh p 33322 i /home/francis/.ssh/id_rsa mario@obelix
francis@asterix:~$ ssh p 33322 mario@obelixmario@obelix:~$
para salir de la sesión SSH teclearemos exit, retornando al shell de la máquina cliente:
mario@obelix:~$ exitlogoutConnection to obelix closedfrancis@asterix:~$
2-4
Directorio de usuario encriptado
Si tenemos un directorio de usuario cifrado, SSH no puede acceder a su archivo authorized_keys porque está dentro de su directorio personal cifrado y no estará disponible hasta después de que se hayaautenticado.Por lo tanto, SSH por defecto para la autenticación de contraseña.
Para solucionar esto, cree una carpeta fuera del home de usuario:
/etc /ssh/ <username>
(reemplazar "<username>" con su nombre de usuario actual.
Este directorio debe tener permisos 755 y ser propiedad del usuario.Mover el archivo authorized_keys en ella.El archivo authorized_keys debe tener permisos 644 y ser propiedad del usuario.
A continuación, edite el archivo y añada:
/etc/ssh/sshd_config
AuthorizedKeysFile /etc/ssh/%u/authorized_keys
Reiniciar el servicio ssh la próxima vez que se conecte con SSH usted no debería tener que introducir lacontraseña.
Ejecutar remotamente un shutdown -h now en un script sin passwd
El sudo shutdown h now que inevitablemente pide la contraseña de sudo. Así de sencillos son los pasos usar el comando:
sudo visudo
Buscar la linea que pone y añadir tu usuario que tendrá ese privilegio la linea quedará:
# User alias specification"User_Alias USERS = tuusuario
Ahora buscamos la línea y añadir una lista de comandos deseada como la siguiente:
# Cmnd alias specification" Cmnd_Alias SHUTDOWN_CMDS = /sbin/shutdown, /sbin/reboot, /sbin/halt
Luego buscar la línea que contiene y añadir el comando:
"%admin ALL=(ALL) ALL"SHUTDOWN_CMDS
3-4
que dejaremos al usuario ejecutar sin contraseña de la siguiente manera:
%admin ALL=(ALL) ALLUSERS ALL=(ALL) NOPASSWD: SHUTDOWN_CMDS
Ya no preguntará la contraseña de sudo para ese usuario.Se puede añadir el privilegio a mas usuarios añadirlos después de ese usuario (en el punto 2) con una coma de la forma:
User_Alias USERS = tuusuario, otro_usuario
Después de esto, al poner en el script remoto
"ssh tuusuario@servidor sudo shutdown h now"
se apaga el servidor sin solicitar la contraseña de sudo y hace posible el apagado remoto.
4-4