在 /etc/shadow 中编写“空”密码脚本

pad*_*ddy 3 linux ssh passwords authorized-keys slackware

我编写了一个脚本来在 Linux 服务器(Slackware 14.0)上添加 CVS 和 SVN 用户。如果需要,此脚本会创建用户,并从现有 shell 帐户复制用户的 SSH 密钥或生成新的 SSH 密钥。

需要明确的是,这些帐户是专门用于 SVN 或 CVS 的。因此,条目开头/home/${username}/.ssh/authorized_keys为(以 CVS 为例):

command="/usr/bin/cvs server",no-port-forwarding,no-agent-forwarding,no-X11-forwarding,no-pty ssh-rsa ....etc...etc...etc...
Run Code Online (Sandbox Code Playgroud)

这些用户永远不会被允许进行实际的 shell 访问 - 他们纯粹是为了通过 SSH 提供对我们的源存储库的访问。

我的问题是,当我添加新用户时,他们/etc/shadow默认会得到一个空密码。看起来像:

paddycvs:!:15679:0:99999:7:::
Run Code Online (Sandbox Code Playgroud)

如果我将影子文件保留为原样(带有!),SSH 身份验证将失败。要启用 SSH,我必须首先passwd以新用户身份运行并输入一些内容。

我这样做有两个问题。首先,它需要用户输入,而我在此脚本中不允许这样做。其次,它可能允许用户在物理终端登录(如果他们有物理访问权限,他们可能会这样做,并且知道秘密密码 - 好吧,所以这不太可能)。

我通常阻止用户登录的方法是将他们的 shell 设置为/bin/false,但如果我这样做,那么 SSH 也不起作用!

有人对编写这个脚本有建议吗?我应该简单地使用sed或其他东西并将影子文件中的相关行替换为预设的加密秘密密码字符串吗?或者,还有更好的方法?

干杯=)

小智 7

你有没有尝试过

passwd -d username
Run Code Online (Sandbox Code Playgroud)

它从 中删除特定用户的密码条目/etc/shadow file。基本上使特定用户登录为空密码。

它只能以 root 或 sudo 用户身份强制执行。