Ce que vous voulez faire est possible mais cela nécessitera une certaine expérience car vous devrez compiler un module PAM appelé pam-ssh-agent-auth .
Le processus est relativement 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
Modifiez la configuration sudo :
$ sudo visudo
Ajoutez ce qui suit :
Defaults env_keep += SSH_AUTH_SOCK
Continuez en modifiant les paramètres sudo PAM :
$ sudo vi /etc/pam.d/sudo
Ajoutez (juste au-dessus des lignes @include) :
**auth [success=2 default=ignore] pam_ssh_agent_auth.so file=~/.ssh/authorized_keys**
@include common-auth
@include common-account
ssh
et sudo
n'ont rien à voir les uns avec les autres. Configurer un ssh
la méthode d'authentification ne fera rien pour sudo
. sudo
ne comprendra pas un ssh
mot de passe.
passwd -l
est destiné à verrouiller le compte d'un utilisateur, afin qu'il ne puisse plus s'authentifier par mot de passe. C'est à peu près le contraire de ce que vous voulez, qui permet à l'utilisateur de s'authentifier sans mot de passe.
Je pense que ce que vous voulez, c'est le NOPASSWD
option dans votre sudoers
fichier.
(PS, il n'y a aucune raison d'exécuter un cd
commande avec sudo
. cd
ne se propage pas aux processus parents, donc dès que le sudo
quitte, vous êtes de retour là où vous avez commencé.)
Modifier : Vous continuez à dire que vous voulez verrouiller le mot de passe du compte et que sudo doit comprendre les clés publiques/privées. Désolé, sudo n'utilisera pas les clés ssh. Ce n'est pas ssh. Si vous ne voulez pas que les utilisateurs puissent se connecter avec leurs mots de passe, je pense que la réponse est de désactiver l'authentification par mot de passe ssh, et non de verrouiller le compte. Ensuite, vous pouvez conserver un mot de passe pour les utilisateurs, qu'ils peuvent utiliser pour sudo après s'être connectés via ssh authorized_keys.
La réponse d'André de Miranda fournit une solution intéressante en utilisant pam_ssh_agent_auth, mais certaines parties sont obsolètes. En particulier le /etc/pam.d/sudo
instructions lors de l'utilisation de nombreuses versions Linux actuelles.
Si vous utilisez Ubuntu 12.04 précis, j'ai en fait simplifié le processus en fournissant une version pam_ssh_agent_auth à partir d'un ppa :ppa:cpick/pam-ssh-agent-auth.
Vous pouvez installer le package en exécutant :
sudo add-apt-repository ppa:cpick/pam-ssh-agent-auth
sudo apt-get install pam-ssh-agent-auth
Après l'installation, si vous souhaitez utiliser ce module PAM avec sudo, vous devrez configurer les paramètres de sudo et la configuration PAM, dans Ubuntu 12.04 précis, vous pouvez le faire en créant les deux fichiers suivants :
/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 vous utilisez chef, le processus ci-dessus peut être automatisé avec mon livre de recettes, disponible à l'un des deux emplacements suivants :
https://github.com/cpick/pam-ssh-agent-auth
http://community.opscode.com/cookbooks/pam-ssh-agent-auth.
Le files
du livre de cuisine répertoire contient le /etc/pam.d/sudo
et /etc/sudoers.d/pam-ssh-agent-auth
les fichiers décrits ci-dessus qui fonctionnent avec Ubuntu 12.04 précis et devraient être un point de départ utile lors de l'utilisation d'autres versions/distributions.