bash 脚本创建用户然后创建 ssh 密钥

bash 脚本创建用户然后创建 ssh 密钥

请注意,我是一个完全的 Linux 新手,在回答这个问题时请记住这一点,因为我对 Linux 的了解非常有限。

操作系统:Debian Squeeze

我正在使用 ZSH 并创建了一个名为的函数,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=/

用户创建得很好,但是当我尝试su进入用户时,问题出现了。如果我exit脚本继续输出以下输出:

Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):

我如何确保密钥被创建并放置在函数中具有正确权限的正确位置?我确信我还做了一些不建议的事情,所以如果你发现任何问题请告诉我。

答案1

如果您以 root 身份运行此函数,则无需调用su并运行多个命令。此外,这无论如何都行不通。您只会得到一个交互式 shell,然后当您退出该 shell 时脚本将继续运行。

只需直接运行您需要的命令sudo:(您不需要mkdirssh-keygen它会为您完成这些操作)

sudo -u $1 -- ssh-keygen -t rsa

答案2

考虑到您使用 sudo,我假设您在以 root 身份登录时没有运行此功能。

我可能会像这样修改你的脚本。

    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/

安全方面。你真的不应该创建或存储用户私人的密钥。私钥应该是私密的,而不是存储在可能被盗的服务器上。如果需要强大的安全性,那么您的操作方式就错了。

相关内容