在Debian上创建一个基于密钥认证的用户

用途コマンドtest01を追加/bin/bash user.sh add test01test01を削除/bin/bash user.sh del test01test01の鍵を再作成/bin/bash user.sh refile test01

■剧本

鍵的输出位置是在”DIR_SSH_USER_PUBLIC_KEY”。

#!/bin/bash

# 追加するユーザのグループ
USER_GROUP_DEVELOPER=developer

USER_NAME=$1
# 鍵の出力先
DIR_SSH_USER_PUBLIC_KEY=/tmp/ssh/
# sshのファイルディレクトリ
DIR_SSH_USER=/home/${USER_NAME}/.ssh/
FILE_SSH_NAME=${USER_NAME}_rsa
# private key
FILE_SSH_PRIVATE=${DIR_SSH_USER}${FILE_SSH_NAME}
# public key
FILE_SSH_PUBLIC=${FILE_SSH_PRIVATE}.pub
# 認証ファイルパス
FILE_SSH_SERVER=${DIR_SSH_USER}authorized_keys
#!/bin/bash
#
# ■キーファイル作成
#
function createSshKeyFile() {
  # ユーザの存在確認
  COUNT=$(grep -ce "${USER_NAME}" /etc/passwd)
  if [ ${COUNT} -eq 0 ]; then
    return 1
  fi

  if [ ! -d ${DIR_SSH_USER} ]; then
    mkdir -m 700 ${DIR_SSH_USER} \
      && chown ${USER_NAME} ${DIR_SSH_USER} \
      && chgrp ${USER_NAME} ${DIR_SSH_USER}
  fi

  if [ -f ${FILE_SSH_PRIVATE} ]; then
    rm -f ${FILE_SSH_PRIVATE}
  fi

  if [ -f ${FILE_SSH_PUBLIC} ]; then
    rm -f ${FILE_SSH_PUBLIC}
  fi

  WORK_MEMO="[script create user]${USER_NAME}"
  WORK_MEMO_SED=$(echo ${WORK_MEMO} | sed -e 's/\[/\\\[/g' | sed -e 's/\]/\\\]/g')

  if [ -f ${FILE_SSH_SERVER} ]; then
    sed -i -e "/ ${WORK_MEMO_SED}$/d" ${FILE_SSH_SERVER}
  fi

  ssh-keygen -f ${FILE_SSH_PRIVATE} -t rsa -b 4096 -C "${WORK_MEMO}" -N '' \
    && chown ${USER_NAME} ${FILE_SSH_PRIVATE} \
    && chgrp ${USER_NAME} ${FILE_SSH_PRIVATE} \
    && chown ${USER_NAME} ${FILE_SSH_PUBLIC} \
    && chgrp ${USER_NAME} ${FILE_SSH_PUBLIC} \
    && cat ${FILE_SSH_PUBLIC} >> ${FILE_SSH_SERVER} \
    && chmod 600 ${FILE_SSH_SERVER} \
    && chown ${USER_NAME} ${FILE_SSH_SERVER} \
    && chgrp ${USER_NAME} ${FILE_SSH_SERVER}

  # 不要ファイルを削除
  rm -f ${FILE_SSH_PUBLIC}

  return 0
}

#
# ■生成後のキーを出力先に移動
#
function moveSshPublicKey() {
  if [ ! -d ${DIR_SSH_USER_PUBLIC_KEY} ]; then
    mkdir -m 777 ${DIR_SSH_USER_PUBLIC_KEY}
  fi

  #共有フォルダに移動
  mv -f ${FILE_SSH_PRIVATE} ${DIR_SSH_USER_PUBLIC_KEY}${FILE_SSH_NAME}
}

#!/bin/bash
#
# /bin/bash user.sh 【種別】 【ユーザID】
#
# 【種別】 -> add: 追加 del: 削除 refile: 鍵の再生成
#

if [ $# -lt 2 ]; then
    echo "[failed] 引数を入力してください"
    exit 1
fi

DIR_CUR=$(dirname "${BASH_SOURCE:-$0}")"/"
source ${DIR_CUR}variables.sh $2
source ${DIR_CUR}module.sh

ARG_TYPE=$1

if [ ${ARG_TYPE} = 'add' ]; then
  MESSAGE=$(adduser -q --gecos "" --disabled-login ${USER_NAME} 2>&1 > /dev/null)
  if [ -n "${MESSAGE}" ]; then
    echo ${MESSAGE}
    exit 1
  fi

  usermod -aG ${USER_GROUP_DEVELOPER} ${USER_NAME}

  # ファイルを作成
  createSshKeyFile
  if [ ! $? = 0 ]; then
    echo "鍵の生成に失敗しました"
    exit 1
  fi

  # 出力先へ移動
  moveSshPublicKey
elif [ ${ARG_TYPE} = "del" ]; then
  # -rを付けるとホームディレクトリを削除
  #userdel -r ${USER_NAME}
  userdel ${USER_NAME}
elif [ ${ARG_TYPE} = "refile" ]; then
  # ファイルを作成
  createSshKeyFile
  if [ ! $? = 0 ]; then
    echo "鍵の生成に失敗しました"
    exit 1
  fi

  # 出力先へ移動
  moveSshPublicKey
else
  echo "[failed] 引数が正しくありません"
  exit 1
fi
广告
将在 10 秒后关闭
bannerAds