请注意我是一个Linux新手,请回答这个问题,因为我对Linux的知识非常有限。
操作系统: Debian Squeeze
我正在使用ZSH并创build了一个名为webuseradd的函数,它看起来像这样:
function webuseradd () { echo creating user $1; mkdir /usr/share/nginx/$1; # sshlogin is required to allow user to ssh and sftp sudo useradd -G lshell,sshlogin -b /usr/share/nginx/$1/home -d /usr/share/nginx/$1/home -m --skel /etc/httpskel -K UMASK=027 $1; # /usr/share/nginx/$1 will be the chroot so set it to root sudo chown root:root /usr/share/nginx/$1; sudo su - $1; mkdir /usr/share/nginx/$1/home/.ssh; ssh-keygen -t rsa; exit; # force the user into a limited, jailed shell sudo chsh -s /usr/bin/lshell $1; }
但是,如果我把它叫做这个输出,我会得到:
$ webuseradd test creating user test No directory, logging in with HOME=/
用户创build正常,但是当我尝试插入用户时出现问题。 如果我exit脚本,则继续输出以下内容:
Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa):
我如何确保密钥被创build并放在正确的位置,并且在函数中有正确的权限? 我相信还有一些其他的事情我不明智,所以如果你发现任何东西,请说。
如果你以root身份运行这个函数,不需要调用su然后运行几个命令。 而且,那也不行。 您将获得一个交互式shell,然后当您退出该shell时该脚本将继续。
直接使用sudo运行你需要的sudo :(你不需要mkdir ; ssh-keygen会为你做)
sudo -u $1 -- ssh-keygen -t rsa
我假设你没有运行这个function以root用户身份login,因为你使用了sudo。
我可能只是像这样修改你的脚本。
sudo useradd -G lshell,sshlogin -b /usr/share/nginx/$1/home -d /usr/share/nginx/$1/home -m --skel /etc/httpskel -K UMASK=027 $1; sudo chown root:root /usr/share/nginx/$1; - sudo su - $1; - mkdir /usr/share/nginx/$1/home/.ssh; - ssh-keygen -t rsa; + sudo mkdir -p /usr/share/nginx/$1/home/.ssh; + sudo ssh-keygen -t rsa -f /usr/share/nginx/$1/home/.ssh/id_rsa + sudo chown -R /usr/share/nginx/$1/home/.ssh/ + sudo chmod 0600 /usr/share/nginx/$1/home/.ssh/
在安全说明上。 你真的不应该创build或存储用户私钥 。 私钥应该是私有的,而不是存储在可能被盗的服务器上。 如果需要强大的安全性,你的工作方式是错误的。