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

ama*_*eod 2 shell

我想加快在我正在创建的某些 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
Run Code Online (Sandbox Code Playgroud)

有没有什么办法,用bash命令,一个标准的GNU命令,或任何程序在Ubuntu上轻松安装,以凝聚touchchmod以及echo到一个命令?

我想将它减少到一个命令的部分原因是,我可以制作一个 shell 脚本,我可以在 VM 上作为具有 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'
Run Code Online (Sandbox Code Playgroud)

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

Sté*_*las 8

注意

touch ~/.ssh/authorized_keys
chmod go-rwx ~/.ssh/authorized_keys
echo '... me@machine' >> ~/.ssh/authorized_keys
Run Code Online (Sandbox Code Playgroud)

不提供以下好处:

echo '... me@machine' >> ~/.ssh/authorized_keys
chmod go-rwx ~/.ssh/authorized_keys
Run Code Online (Sandbox Code Playgroud)

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

因此,chmod在添加内容之前或之后进行操作都没有关系。有人仍然可以在您执行此操作之前打开该文件,chmod但在阅读之前等待您添加内容。

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

sudo -u user sh -c '
  umask 077 && printf "%s\n" "$1" >> ~/.ssh/authorized_keys
' sh "$key user@host"
Run Code Online (Sandbox Code Playgroud)

  • 第二个“sh”是为该内联脚本命名(“$0”)。有关详细信息,请参阅[此处](http://unix.stackexchange.com/a/140783) (2认同)