在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