![我可以使用单个 Unix 命令创建、设置权限并写入文件吗?](https://linux22.com/image/46729/%E6%88%91%E5%8F%AF%E4%BB%A5%E4%BD%BF%E7%94%A8%E5%8D%95%E4%B8%AA%20Unix%20%E5%91%BD%E4%BB%A4%E5%88%9B%E5%BB%BA%E3%80%81%E8%AE%BE%E7%BD%AE%E6%9D%83%E9%99%90%E5%B9%B6%E5%86%99%E5%85%A5%E6%96%87%E4%BB%B6%E5%90%97%EF%BC%9F.png)
我想加快在我正在创建的一些 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 上轻松安装的任何程序,将touch
、chmod
、 和压缩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
。