我可以使用单个 Unix 命令创建、设置权限并写入文件吗?

我可以使用单个 Unix 命令创建、设置权限并写入文件吗?

我想加快在我正在创建的一些 Linux VM 上创建用户帐户的速度,并且想知道是否可以简化写入新用户~/.ssh/authorized_keys~/.ssh/authorized_keys2文件的过程。

我的手动过程大约是(以新用户身份登录):

ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa
touch ~/.ssh/authorized_keys
chmod go-rwx ~/.ssh/authorized_keys
echo '... me@machine' >> ~/.ssh/authorized_keys

有没有办法,使用 Bash 命令、标准 GNU 命令或 Ubuntu 上轻松安装的任何程序,将touchchmod、 和压缩echo为一个命令?

我希望将其简化为一个命令,部分原因是这样我可以制作一个 shell 脚本,可以作为虚拟机上具有 sudo 功能的初始用户运行。

就像是:

sudo su - me -c 'ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa'
echo '... me@machine' | sudo su - me -c 'xyz 0600 ~/.ssh/authorized_keys'

xyz一次性创建、设置权限和写入文件的假设命令在哪里?

答案1

注意

touch ~/.ssh/authorized_keys
chmod go-rwx ~/.ssh/authorized_keys
echo '... me@machine' >> ~/.ssh/authorized_keys

不提供任何好处:

echo '... me@machine' >> ~/.ssh/authorized_keys
chmod go-rwx ~/.ssh/authorized_keys

检查权限开幕文件,而不是在读取或写入文件时。

chmod因此,无论您在添加内容之前还是之后进行操作都没有关系。在您执行此操作之前,其他人仍然可以打开该文件,chmod但需要等待您添加内容才能读取该文件。

在这里,您要确保该文件从一开始就具有正确的权限:

sudo -Hu user sh -c '
  umask 077 && printf "%s\n" "$1" >> ~/.ssh/authorized_keys
' sh "$key user@host"

-H强制$HOME设置为user的主目录(即使sudo在默认情况下配置为不这样做的系统上),以便它sh生成的扩展~到该目录。您也可以使用~user代替~.

答案2

我使用下面的一行代码用现有密钥填充新创建的帐户。它可以很容易地适应附加现有文件的内容。

sudo -Hu user /bin/sh -ec 'umask 077; mkdir -p -- ~/.ssh; cat > ~/.ssh/authorized_keys' <<EOF
id-rsa AAAA...AA [email protected]
EOF

答案3

答案4

实际上,install可以在这里提供帮助

install -m 600 /dev/null ~/.ssh/authorized_keys

将替换touch和的组合chmod

进而

ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >>~/.ssh/authorized_keys

将该密钥添加到authorized_keys中。在需要的地方添加sudo

相关内容