bash script para crear usuario luego crear keys ssh

Tenga en count que soy un novato linux total, por favor desnuda que en mente al responder a esta pregunta como tengo un conocimiento muy limitado de linux.

SO: Debian Squeeze

Estoy usando ZSH y he creado una function llamada webuseradd se parece a esto:

 function webuseradd () { echo creating user $1; mkdir /usr/share/nginx/$1; # sshlogin is requinetworking 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; } 

Sin embargo si lo llamo esto esto la salida que consigo:

 $ webuseradd test creating user test No directory, logging in with HOME=/ 

El usuario se crea bien sin embargo el problema surge cuando bash su en el usuario. Si salgo de la secuencia de commands continuación, continúa con la siguiente salida:

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

¿Cómo puedo asegurar que las keys sean creadas y puestas en la location correcta con los permissions correctos dentro de la function? Estoy seguro de que hay algunas otras cosas que he hecho que son desaconsejables por lo que si te encuentras algo por favor decir.

Si está ejecutando esta function como root, no es necesario llamar a su y luego ejecutar varios commands. Además, eso no funcionará de todos modos. Sólo obtendrá una shell interactiva y, a continuación, la secuencia de commands continuará cuando salga de esa shell.

Simplemente ejecuta los commands que necesitas con sudo directamente: (y no necesitas mkdir ; ssh-keygen lo hará por ti)

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

Estoy asumiendo que no está ejecutando esta function mientras está conectado como root dado todo su uso de sudo.

Probablemente sólo modificaría tu script como este.

  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/ 

En una nota de security. Usted realmente no debe ser la creación o almacenamiento de keys privadas de los usuarios. Se supone que las keys privadas son privadas, no almacenadas en un server donde podrían ser robadas. Usted está trabajando esto de la manera equivocada si requieren una fuerte security.