Lo que desea hacer es posible, pero requerirá algo de experiencia, ya que deberá compilar un módulo PAM llamado pam-ssh-agent-auth .
El proceso es razonablemente simple:
$ sudo aptitude install libssl-dev libpam0g-dev build-essential checkinstall
$ wget "http://downloads.sourceforge.net/project/pamsshagentauth/pam_ssh_agent_auth/v0.9.3/pam_ssh_agent_auth-0.9.3.tar.bz2"
$ tar -xjvf pam_ssh_agent_auth-0.9.3.tar.bz2
$ cd pam_ssh_agent_auth-0.9.3
$ ./configure --libexecdir=/lib/security --with-mantype=man
$ make
$ sudo checkinstall
Edite la configuración de sudo:
$ sudo visudo
Agrega lo siguiente:
Defaults env_keep += SSH_AUTH_SOCK
Continúe cambiando la configuración de sudo PAM:
$ sudo vi /etc/pam.d/sudo
Agregue (justo arriba de las líneas @include):
**auth [success=2 default=ignore] pam_ssh_agent_auth.so file=~/.ssh/authorized_keys**
@include common-auth
@include common-account
ssh
y sudo
no tienen nada que ver el uno con el otro. Configuración de un ssh
el método de autenticación no va a hacer nada por sudo
. sudo
no va a entender un ssh
contraseña.
passwd -l
está destinado a bloquear la cuenta de un usuario, para que ya no pueda autenticarse por contraseña. Eso es más o menos lo contrario de lo que quieres, que es permitir que el usuario se autentique sin contraseña.
Creo que lo que quieres es el NOPASSWD
opción en su sudoers
archivo.
(PD, no hay motivo para ejecutar un cd
comando con sudo
. cd
no se propaga a los procesos principales, por lo que tan pronto como sudo
sale, estás de vuelta donde empezaste.)
Editar: Sigues diciendo que quieres bloquear la contraseña de la cuenta y quieres que Sudo entienda las claves públicas/privadas. Lo siento, sudo no va a usar claves ssh. No es ssh. Si no desea que los usuarios puedan iniciar sesión con sus contraseñas, creo que la respuesta es deshabilitar la autenticación de contraseña ssh, no bloquear la cuenta. Luego, puede conservar una contraseña para los usuarios, que pueden usar para sudo después de iniciar sesión a través de sshauthorized_keys.
La respuesta de Andre de Miranda proporciona una buena solución usando pam_ssh_agent_auth, pero las partes están desactualizadas. Particularmente el /etc/pam.d/sudo
instrucciones al usar muchas versiones actuales de Linux.
Si está ejecutando Ubuntu 12.04 con precisión, en realidad he simplificado el proceso proporcionando una compilación pam_ssh_agent_auth a partir de un ppa:ppa:cpick/pam-ssh-agent-auth.
Puede instalar el paquete ejecutando:
sudo add-apt-repository ppa:cpick/pam-ssh-agent-auth
sudo apt-get install pam-ssh-agent-auth
Después de la instalación, si desea utilizar este módulo PAM con sudo, deberá configurar los ajustes de sudo y la configuración de PAM; en Ubuntu 12.04, puede hacerlo creando los siguientes dos archivos:
/etc/sudoers.d/pam-ssh-agent-auth :
Defaults env_keep+="SSH_AUTH_SOCK"
/etc/pam.d/sudo :
ent#%PAM-1.0
auth required pam_env.so readenv=1 user_readenv=0
auth required pam_env.so readenv=1 envfile=/etc/default/locale user_readenv=0
auth sufficient pam_ssh_agent_auth.so file=/etc/security/authorized_keys
@include common-auth
@include common-account
@include common-session-noninteractive
Si usa chef, el proceso anterior se puede automatizar con mi libro de cocina, que se encuentra en cualquiera de las dos ubicaciones siguientes:
https://github.com/cpick/pam-ssh-agent-auth
http://community.opscode.com/cookbooks/pam-ssh-agent-auth.
El libro de cocina files
directorio contiene el /etc/pam.d/sudo
y /etc/sudoers.d/pam-ssh-agent-auth
archivos descritos anteriormente que funcionan con Ubuntu 12.04 de forma precisa y deberían ser un punto de partida útil cuando se utilizan otras versiones/distribuciones.