Я хочу добавить пользователя в систему linux из скрипта, но не хочу придумывать пароль или заботиться о нем. Это должно происходить автоматически.
Цель состоит в том, чтобы сгенерировать ssh-ключи, и этому пользователю нужно только войти в систему удаленно. Или, альтернативно, этот пользователь будет использоваться пользователем sudo через sudo su - thatuser
.
Я хочу избавить вас от хлопот придумывать и вводить безопасный пароль каждый раз, когда я создаю такого пользователя, а также делаю это из скриптов.
Никто не должен иметь возможность входить в систему с паролем от имени этого пользователя, поэтому я считаю, что он получает хороший случайный пароль, но никто его не знает.
Я мог бы написать сценарий, который генерирует что-то ramdom, но, мэбай, есть что-то встроенное? Или просто деактивировать пароль (чтобы вход по паролю был невозможен, а вход по ssh с ключами и sudo su - thatuser
работает отлично.
Редактировать: Уже есть некоторые ответы, отлично, но я все еще не уверен, как это сделать. Как бы выглядел сценарий?
Он должен вести себя как adduser и создавать все стандартное (например, стандартный домашний каталог, скопированный скелет, группу с тем же именем)
Edit2: В конце концов, с вашей помощью я нашел решение, которое работает, и хочу им поделиться. Это сценарий, который я называю «adduser-nopasswd» и помещаю в / usr / local / sbin (это хорошее место?), И он может быть выполнен только пользователем root. Он принимает один аргумент, который является одновременно именем новой группы и пользователя:
#!/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
Есть комментарии по этой функции?
Если вы не укажете пароль для useradd
он не будет установлен (и, таким образом, пользователь не сможет войти в систему с помощью пароля). Обратите внимание, что useradd
и adduser
это две разные команды.
Следующее должно создать нового пользователя с его собственной группой, создать его домашний каталог (в местоположении по умолчанию, поскольку мы не указываем его местоположение) и скопировать файлы скелета.
useradd --create-home <user>
Затем вы просто создаете каталог .ssh
в своем домашнем каталоге, chmod
это к 0700
(SSH понадобится для безопасности) и поместите открытый ключ пользователя в .ssh/authorized_keys
(пара закрытого / открытого ключей должна быть создана самим пользователем на его собственном компьютере).
Если вы хотите отключить пароль уже существующей учетной записи, вы можете использовать следующее.
usermod --lock <user>
Утилита / usr / sbin / useradd всегда создавала для меня пользователей, не требуя паролей. Я написал много сценариев, которые брали / etc / passwd другой системы и создавали для меня пользователей.
В качестве альтернативы, если вы посмотрите документацию для mercurial-server, вы увидите, как настроить множество ключей SSH (клиентов) для запуска программ от имени одного пользователя на стороне сервера.
# 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
Хорошо, давайте добавим наших пользователей:
cat user-pw_list | ./CreateUsers.sh
Если вам нужны только встроенные команды для генерации случайных паролей, вы можете попробовать следующее:
dd if = / dev / urandom bs = 16 count = 1 2> / dev / null | uuencode - | голова -n 2 | grep -v begin | вырезать -b 2-10
Это будет читать 16 байтов случайных данных, uuencode их, чтобы преобразовать их в печатные символы, прорезать дополнительный вывод uuencode, а затем взять только случайные символы из кодировки. Вот пример вывода:
$ dd if = / dev / urandom bs = 16 count = 1 2> / dev / null | uuencode - | голова -n 2 | grep -v begin | вырезать -b 2-10
RJ <B6QYRO
Поместите * в поле пароля в / etc / shadow (это должно произойти, если вы не устанавливаете пароль). Это предотвратит вход пользователя в систему.
я использую пасовать для генерации паролей на серверах входа, которые я поддерживаю. Хотя в вашем случае вход в систему не является обязательным, я обнаружил, что когда это так, passook генерирует достаточно запоминающиеся пароли.