Назад | Перейти на главную страницу

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):

Как обеспечить создание ключей и их правильное расположение с соответствующими разрешениями в функции? Я уверен, что есть и другие вещи, которые я сделал нецелесообразно, поэтому, если заметите что-нибудь, скажите.

Я предполагаю, что вы не запускаете эту функцию, когда вошли в систему как root, учитывая все ваше использование 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/

На заметку о безопасности. Вам действительно не следует создавать или хранить пользователей частный ключи. Предполагается, что закрытые ключи должны быть частными, а не храниться на сервере, где они могут быть украдены. Вы работаете неправильно, если требуете надежной защиты.

Если вы запускаете эту функцию как root, нет необходимости вызывать su а затем запустите несколько команд. Кроме того, это все равно не сработает. Вы просто получите интерактивную оболочку, а затем сценарий продолжится, когда вы выйдете из этой оболочки.

Просто запустите нужные команды с помощью sudo напрямую: (и вам не нужно mkdir; ssh-keygen сделаю это за вас)

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