如何从脚本中添加一个随机或无效密码的Linux用户

我想从一个脚本添加一个用户到Linux系统,但我不想发明或关心密码。 这应该自动完成。

目标是生成ssh密钥,这个用户只需要远程login。 或者,此用户将通过sudo su - thatuser从sudo用户使用。

每次创build这样的用户时,我都想保存发明的麻烦,input一些安全的密码,并且也可以通过脚本来完成。

没有人应该能够以这个用户的密码login,所以我的想法是他得到一个很好的随机密码,但没有人知道。

我可以写一个脚本产生ramdom,但mabye有内置的东西? 或者只是取消密码(这样密码login是不可能的,但sshlogin键和sudo su - thatuser工作正常。

编辑:已经有一些答案,很好,但我仍然不知道该怎么做。 剧本怎么样?

它应该像adduser一样,创造一切标准(如std。home dir,骨架复制,同名的组)

编辑2:最后,在你的帮助下,我发现了一个可行的解决scheme,我想分享它。 这是一个脚本,我称之为“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 

对这个function有什么意见?

如果你没有指定一个使用useradd的密码,它将不会被设置(因此用户将无法通过密码login)。 请注意, useraddadduser是两个不同的命令。

下面应该创build一个新的用户自己的组,创build它的主目录(在默认位置,因为我们没有指定任何位置),并复制骨架文件。

 useradd --create-home <user> 

然后你只需要在它的主目录下创build目录.ssh ,把它的chmod0700 (SSH会希望这样做是为了安全),并且把用户公钥放在.ssh/authorized_keys (私钥/公钥对应由用户他/她自己,在他/她自己的电脑上)。

如果您要禁用已有帐户的密码,可以使用以下内容。

 usermod --lock <user> 

Utility / usr / sbin / useradd总是为我创build用户而不需要密码。 我已经写了很多脚本,采取了另一个系统的/ etc / passwd并为我创build用户。

或者,如果您查看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额外输出,然后仅从编码中取出随机字符。 这是一个输出示例:

$ dd if = / dev / urandom bs = 16 count = 1 2> / dev / null | uuencode – | 头-n 2 | grep -v begin | 切b-2-10

RJ <B6QYRO

把*放在/ etc / shadow的密码字段中(如果你没有设置密码,就会发生这种情况)。 这将阻止用户login。

我使用passook在我维护的login服务器上生成密码。 虽然login不是你的情况下的要求,我发现它时,passook生成足够令人难忘的密码。