Come creare un utente con accesso SSH e sudo

Su Ubuntu o Debian esegui sudo adduser deploy e sudo usermod -aG sudo deploy. Su RHEL o Fedora esegui sudo useradd -m -G wheel deploy e sudo passwd deploy. Poi metti la chiave pubblica in /home/deploy/.ssh/authorized_keys, di proprietà di quell'utente, con la cartella in modo 700 e il file in modo 600. Prova prima di chiudere la sessione.

Aggiornata il . Eseguito su Ubuntu 24.04 e Debian 13 in container usa e getta, compresi l'accesso con chiave e sudo.

Crea l'utente

Su Ubuntu e Debian, adduser chiede una password e alcuni dati facoltativi, che puoi saltare con Invio:

sudo adduser deploy
sudo usermod -aG sudo deploy

La -a conta: senza, -G sostituisce gli altri gruppi dell'utente. Un Debian minimale può non avere sudo, quindi esegui prima apt install sudo come root.

Su RHEL, Rocky, AlmaLinux e Fedora il gruppo degli amministratori è wheel:

sudo useradd -m -G wheel deploy
sudo passwd deploy

Controlla il risultato:

id deploy
sudo -l -U deploy

Installa la chiave SSH

Esegui questo sul server, con la chiave pubblica dell'utente al posto dell'esempio. Imposta proprietario e modi in un solo passaggio:

sudo install -d -m 700 -o deploy -g deploy /home/deploy/.ssh
echo 'ssh-ed25519 AAAA... you@laptop' | sudo install -m 600 -o deploy -g deploy /dev/stdin /home/deploy/.ssh/authorized_keys

Questo scrive un file nuovo, sostituendo quello esistente, quindi usalo solo per un account nuovo. Se l'account ha una password e l'accesso con password è attivo, puoi invece farlo dal tuo computer, e la chiave viene aggiunta:

ssh-copy-id -i ~/.ssh/id_ed25519.pub deploy@server

Sui sistemi con SELinux in modalità enforcing, sistema anche le etichette:

sudo restorecon -R /home/deploy/.ssh

I permessi che contano

PercorsoProprietarioModo
/home/deploydeploynon scrivibile da altri, per esempio 750
/home/deploy/.sshdeploy700
/home/deploy/.ssh/authorized_keysdeploy600

L'errore classico è creare questi file come root e dimenticare il proprietario. Nel nostro test un file di proprietà di root con modo 600 ha dato questo risultato, perché l'utente non riesce a leggerlo:

deploy@server: Permission denied (publickey,password).

Controlla con questo comando, e se proprietari e modi sono giusti ma continua a fallire vedi Permission denied (publickey):

sudo stat -c '%a %U %n' /home/deploy /home/deploy/.ssh /home/deploy/.ssh/authorized_keys

Debian e Ubuntu sono più tolleranti con le cartelle scrivibili dal gruppo quando il gruppo è quello privato dell'utente: il nostro accesso funzionava anche con .ssh in modo 775. Non farci affidamento, perché altri sistemi lo rifiutano. Attieniti alla tabella.

Provalo prima di chiudere la sessione

Apri un nuovo terminale e lascia aperto quello vecchio:

ssh deploy@server
sudo whoami

Il secondo comando deve stampare root dopo aver chiesto la password di deploy. Solo allora è sicuro disattivare il login di root o l'accesso con password.

Un utente con chiave e senza password

Per un account creato da uno script:

sudo adduser --disabled-password --comment "" deploy

Nelle versioni più vecchie, come Ubuntu 22.04, l'opzione è --gecos "". Nel nostro test su Ubuntu 24.04 l'accesso con chiave funzionava, ma sudo non può chiedere una password che non esiste:

sudo: a password is required

Imposta una password, oppure consenti sudo senza password a questo utente. Crea sempre quel file con visudo, che rifiuta un file sbagliato:

sudo visudo -f /etc/sudoers.d/90-deploy

con questa riga dentro:

deploy ALL=(ALL) NOPASSWD:ALL

Tieni presente il costo: chiunque ottenga questa chiave, o una shell come questo utente, ha subito i privilegi di root. L'automazione a volte ne ha bisogno, una persona che entra a mano di rado. Vedi usare sudo via SSH in sicurezza.

Domande

Come do sudo a un utente che esiste già?

Esegui sudo usermod -aG sudo nomeutente su Debian e Ubuntu, oppure sudo usermod -aG wheel nomeutente su RHEL e Fedora. L'utente lo ottiene al login successivo.

Perché sudo mi chiede una password se entro con una chiave?

Sono due cose separate. La chiave dimostra a SSH chi sei. sudo chiede la password dell'account stesso, a meno che il file sudoers dica altro.

Devo uscire e rientrare dopo aver aggiunto il gruppo?

Sì. L'appartenenza ai gruppi viene letta al login, quindi una sessione aperta prima di usermod non ce l'ha.

Fonti

Altro in SSH su ogni sistema

Tutte le guide