
Я хочу добавить пользователя в систему Linux из скрипта, но не хочу придумывать пароль или беспокоиться о нем. Это должно быть сделано автоматически.
Цель состоит в том, чтобы сгенерировать ssh-ключи, и этому пользователю нужно только войти удаленно. Или же этот пользователь будет использоваться из пользователя sudo через sudo su - thatuser
.
Я хочу избавить себя от необходимости придумывать и вводить какой-нибудь надежный пароль каждый раз, когда создаю такого пользователя, и сделать это с помощью скриптов.
Никто не должен иметь возможности войти в систему с паролем этого пользователя, поэтому я думаю, что он получает хороший случайный пароль, но никто его не знает.
Я мог бы написать скрипт, который генерирует что-то случайное, но, может быть, есть что-то встроенное? Или просто деактивировать пароль (чтобы вход по паролю был невозможен, но вход по ssh с ключами работал sudo su - thatuser
нормально).
Редактировать:Уже есть некоторые ответы, здорово, но я все еще не уверен, как это сделать. Как будет выглядеть сценарий?
Он должен вести себя как adduser и создавать все стандартно (типа стандартного домашнего каталога, скопированного скелета, группы с тем же именем)
Редактировать2:В конце концов, с вашей помощью я нашел решение, которое работает, и хочу им поделиться. Это скрипт, который я называю "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
Есть ли какие-нибудь комментарии по этой функции?
решение1
Если вы не укажете пароль, useradd
он не будет установлен (и пользователь, таким образом, не сможет войти в систему с помощью пароля). Обратите внимание, что useradd
и adduser
— это две разные команды.
Следующая команда должна создать нового пользователя с собственной группой, создать его домашний каталог (в расположении по умолчанию, поскольку мы не указывали никакого расположения) и скопировать файлы скелета.
useradd --create-home <user>
Затем вы просто создаете каталог .ssh
в его домашнем каталоге (SSH этого chmod
требует 0700
в целях безопасности) и помещаете в него открытый ключ пользователя .ssh/authorized_keys
(пара закрытый/открытый ключ должна быть сгенерирована самим пользователем на его/ее компьютере).
Если вы хотите отключить пароль уже существующей учетной записи, вы можете воспользоваться следующим способом.
usermod --lock <user>
решение2
Утилита /usr/sbin/useradd всегда создавала для меня пользователей, не требуя паролей. Я написал много скриптов, которые брали /etc/passwd другой системы и создавали для меня пользователей.
Кроме того, если вы посмотрите документацию по mercurial-server, вы увидите, как настроить множество ключей SSH (клиентов) для запуска программ от имени всего одного пользователя на стороне сервера.
решение3
# 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
решение4
Поставьте * в поле пароля в /etc/shadow (это должно произойти, если вы не установили пароль). Это не позволит пользователю войти в систему.