Quello che vuoi fare è possibile ma richiederà una certa esperienza in quanto dovrai compilare un modulo PAM chiamato pam-ssh-agent-auth .
Il processo è ragionevolmente semplice:
$ 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
Modifica la configurazione sudo:
$ sudo visudo
Aggiungi quanto segue:
Defaults env_keep += SSH_AUTH_SOCK
Continua modificando le impostazioni sudo PAM:
$ sudo vi /etc/pam.d/sudo
Aggiungi (appena sopra le righe @include):
**auth [success=2 default=ignore] pam_ssh_agent_auth.so file=~/.ssh/authorized_keys**
@include common-auth
@include common-account
ssh
e sudo
non hanno niente a che fare l'uno con l'altro. Impostazione di un ssh
il metodo di autenticazione non farà nulla per sudo
. sudo
non capirà un ssh
password.
passwd -l
ha lo scopo di bloccare l'account di un utente, in modo che non possa più autenticarsi tramite password. È praticamente l'opposto di quello che vuoi, ovvero consentire all'utente di autenticarsi senza una password.
Penso che quello che vuoi sia il NOPASSWD
opzione nel tuo sudoers
file.
(PS, non c'è motivo di eseguire un cd
comando con sudo
. cd
non si propaga ai processi padre, quindi non appena il sudo
esce, sei tornato al punto di partenza.)
Modifica: Continui a dire che vuoi bloccare la password dell'account e vuoi che sudo capisca le chiavi pubbliche/private. Siamo spiacenti, sudo non utilizzerà le chiavi ssh. Non è ssh. Se non vuoi che gli utenti possano accedere con le loro password, penso che la risposta sia disabilitare l'autenticazione della password ssh, non bloccare l'account. Quindi puoi conservare una password per gli utenti, che possono utilizzare per sudo dopo aver effettuato l'accesso tramite ssh authorized_keys.
La risposta di Andre de Miranda fornisce una buona soluzione usando pam_ssh_agent_auth, ma le parti non sono aggiornate. In particolare il /etc/pam.d/sudo
istruzioni quando si utilizzano molte versioni correnti di Linux.
Se stai utilizzando Ubuntu 12.04 preciso, in realtà ho semplificato il processo fornendo una build pam_ssh_agent_auth da un ppa:ppa:cpick/pam-ssh-agent-auth.
Puoi installare il pacchetto eseguendo:
sudo add-apt-repository ppa:cpick/pam-ssh-agent-auth
sudo apt-get install pam-ssh-agent-auth
Dopo l'installazione, se desideri utilizzare questo modulo PAM con sudo dovrai configurare le impostazioni di sudo e la configurazione PAM, in Ubuntu 12.04 preciso puoi farlo creando i seguenti due file:
/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
Se stai usando chef, il processo di cui sopra può essere automatizzato con il mio libro di cucina, che si trova in una delle due posizioni seguenti:
https://github.com/cpick/pam-ssh-agent-auth
http://community.opscode.com/cookbooks/pam-ssh-agent-auth.
Il files
del ricettario directory contiene il /etc/pam.d/sudo
e /etc/sudoers.d/pam-ssh-agent-auth
file descritti sopra che funzionano esattamente con Ubuntu 12.04 e dovrebbero essere un utile punto di partenza quando si utilizzano altre versioni/distribuzioni.