
Quero adicionar um usuário ao sistema Linux a partir de um script, mas não quero inventar ou cuidar da senha. Isso deve ser feito automaticamente.
O objetivo é gerar chaves ssh e esse usuário precisa apenas fazer login remotamente. Ou, alternativamente, este usuário será usado por um usuário sudo via sudo su - thatuser
.
Quero evitar o incômodo de inventar e digitar alguma senha segura toda vez que criar esse usuário, e também fazer isso a partir de scripts.
Ninguém deveria conseguir fazer login com a senha deste usuário, então minha ideia é que ele consiga uma boa senha aleatória, mas ninguém a saiba.
Eu poderia escrever um script que gerasse algo aleatório, mas talvez haja algo embutido? Ou apenas desative a senha (para que o login com senha não seja possível, mas o ssh faz login com chaves e sudo su - thatuser
funciona bem.
Editar:Já existem algumas respostas, ótimo, mas ainda não sei como fazer. Como seria o roteiro?
Ele deve se comportar como adduser e criar tudo padrão (como diretório inicial padrão, esqueleto copiado, grupo com o mesmo nome)
Editar2:No final e com a sua ajuda encontrei uma solução que funciona e quero partilhá-la. Este é um script que chamo de "adduser-nopasswd" e coloco-o em /usr/local/sbin (este é um bom lugar?) e pode ser executado apenas pelo root. É necessário um argumento, que é o nome do novo grupo e usuário ao mesmo tempo:
#!/bin/sh -e
# the -e makes the script exit immediateley if one command fails
NAME=$1
groupadd $NAME
useradd --create-home -d /home/$NAME --shell /bin/bash -g $NAME $NAME
Algum comentário sobre esta função?
Responder1
Se você não especificar uma senha, useradd
ela não será definida (e o usuário não poderá fazer login via senha). Observe que useradd
e adduser
são dois comandos diferentes.
A seguir deve-se criar o novo usuário com seu próprio grupo, criar seu diretório inicial (no local padrão, pois não especificamos nenhum local) e copiar os arquivos esqueleto.
useradd --create-home <user>
Então você apenas cria o diretório .ssh
em seu diretório inicial, chmod
para 0700
(o SSH vai querer isso por segurança) e coloca a chave pública do usuário .ssh/authorized_keys
(o par de chave privada/pública deve ser gerado pelo próprio usuário, em seu próprio diretório). seu próprio computador).
Se quiser desabilitar a senha de uma conta já existente, você pode usar o seguinte.
usermod --lock <user>
Responder2
O utilitário /usr/sbin/useradd sempre criava usuários para mim sem exigir senhas. Eu escrevi muitos scripts que pegaram o /etc/passwd de outro sistema e criaram usuários para mim.
Alternativamente, se você olhar a documentação do mercurial-server, verá como configurar muitas chaves SSH (clientes) para executar programas como apenas um usuário no lado do servidor.
Responder3
# cat user-pw_list
john:p455W0rD
geany:p455W0rD
# cat CreateUsers.sh
#!/bin/bash
#
# filename: CreateUsers.sh
# usage: cat "User:passwd" | $0
#
set -e
# set -x
while read ; do
USER=${REPLY%%:*}
PWD=${REPLY##*:}
# alternative for random passwd, where $RANDOM is a bash function
#PWD=${REPLY%%:*}$RANDOM$RANDOM
echo -e "adding User $USER "
# for disabled users: /usr/sbin/nologin, otherwise /bin/bash
/usr/sbin/useradd -c automaticUser -m -k/dev/null -s /usr/sbin/nologin $USER
echo "$USER:$PWD" | chpasswd --md5 $USER
## also add user to samba:
#echo -e "$PWD\n$PWD" | pdbedit -t -u $USER
done
Ok, vamos adicionar nossos usuários:
cat user-pw_list | ./CreateUsers.sh
Responder4
Coloque um * no campo de senha em /etc/shadow (isso deve acontecer se você não definir uma senha). Isso impedirá que o usuário faça login.