| #### |
| # Copyright 2020 Hewlett Packard Enterprise Development LP. |
| # Copyright 2021 Intel Corporation |
| # |
| # Add a basic class to add a privileged user from an ssh |
| # standpoint and a public key passed as an input parameter |
| # from the local.conf file |
| # Example: |
| # INHERIT += "phosphor-deploy-ssh-keys" |
| # |
| # SSH_KEYS = "vejmarie:/home/openbmc/openbmc/meta-hpe/keys/test.pub" |
| # or |
| # SSH_KEYS = "vejmarie:/home/openbmc/openbmc/meta-hpe/keys/test.pub;root:/path/to/id_rsa.pub" |
| #### |
| |
| inherit useradd_base |
| |
| IMAGE_PREPROCESS_COMMAND += "deploy_local_user;" |
| |
| deploy_local_user () { |
| if [ "${SSH_KEYS}" == "" ]; then |
| bbwarn "Trying to deploy SSH keys but input variable is empty (SSH_KEYS)" |
| return |
| fi |
| |
| ssh_keys="${SSH_KEYS}" |
| while [ "${ssh_keys}" != "" ]; do |
| current_key=`echo "$ssh_keys" | cut -d ';' -f1` |
| ssh_keys=`echo "$ssh_keys" | cut -s -d ';' -f2-` |
| |
| username=`echo "$current_key" | awk -F":" '{ print $1}'` |
| key_path=`echo "$current_key" | awk -F":" '{ print $2}'` |
| |
| if [ ! -d ${IMAGE_ROOTFS}/home/${username} ]; then |
| perform_useradd "${IMAGE_ROOTFS}" "-R ${IMAGE_ROOTFS} -p '' ${username}" |
| fi |
| |
| if [ ! -d ${IMAGE_ROOTFS}/home/${username}.ssh/ ]; then |
| install -d ${IMAGE_ROOTFS}/home/${username}/.ssh/ |
| fi |
| |
| if [ ! -f ${IMAGE_ROOTFS}/home/${username}/.ssh/authorized_keys ]; then |
| install -m 0600 ${key_path} ${IMAGE_ROOTFS}/home/${username}/.ssh/authorized_keys |
| else |
| cat ${key_path} >> ${IMAGE_ROOTFS}/home/${username}/.ssh/authorized_keys |
| fi |
| |
| uid=`cat ${IMAGE_ROOTFS}/etc/passwd | grep "${username}:" | awk -F ":" '{print $3}'` |
| guid=`cat ${IMAGE_ROOTFS}/etc/passwd | grep "${username}:" | awk -F ":" '{print $4}'` |
| |
| chown -R ${uid}:${guid} ${IMAGE_ROOTFS}/home/${username}/.ssh |
| chmod 600 ${IMAGE_ROOTFS}/home/${username}/.ssh/authorized_keys |
| chmod 700 ${IMAGE_ROOTFS}/home/${username}/.ssh |
| |
| is_group=`grep "priv-admin" ${IMAGE_ROOTFS}/etc/group || true` |
| |
| if [ -z "${is_group}" ]; then |
| perform_groupadd "${IMAGE_ROOTFS}" "-R ${IMAGE_ROOTFS} priv-admin" |
| fi |
| |
| perform_usermod "${IMAGE_ROOTFS}" "-R ${IMAGE_ROOTFS} -a -G priv-admin ${username}" |
| done |
| } |