[Debian11] git インストール・簡易初期設定スクリプト [gitlab.com]

#!/bin/bash

### git インストールと簡易初期設定スクリプト ###

### 動作確認環境 ###
# lsb_release -a
#No LSB modules are available.
#Distributor ID:	Debian
#Description:	Debian GNU/Linux 11 (bullseye)
#Release:	11
#Codename:	bullseye

### このスクリプトの使い方 ###
# 1.このスクリプトをコピーペーストし[環境に合わせた修正箇所ここから]
#   から[環境に合わせた修正箇所ここまで]の値を修正して git_inst_gitlab.sh
#   を作成します。
#   nano git_inst_gitlab.sh
# 2.git_inst_gitlab.sh を実行できるようにします。
#   chmod +x git_inst_gitlab.sh
# 3.git_inst_gitlab.sh を実行します。
#  ./git_inst_gitlab.sh
# 4.gitlab.com のユーザー設定>SSH キーへコピーペーストしてください を行います

### 環境に合わせた修正箇所ここから ###
# gitlab.com の登録ユーザー
# gitlab.com のユーザー設定>アカウント>ユーザー名の変更 https://gitlab.com/の後に入っている値
GIT_USR_NAME="gitlabuser"

# gitlab.com 登録ユーザーのメールアドレス 
GIT_USR_EMAL="xxxxx@xxxxx.com"

# 秘密鍵ファイル・公開鍵ファイル名
GIT_SSH_NAME="mygitlab.com"

# 秘密鍵ファイル・公開鍵ファイルパスフレーズ ""で省略です
SSH_PHRASE=""
### 環境に合わせた修正箇所ここまで ###

### 処理ここから###
cd

GIT_HOST="gitlab.com"
GIT_IP="gitlab.com"

# git インストール
git --version &> /dev/null
if [ $? -ne 0 ] ; then
	sudo apt -y install git
        echo "git インストールしました"
else
        echo "git インストール済みです"
fi

# ssh インストール
ssh -V &> /dev/null
if [ $? -ne 0 ] ; then
        sudo apt -y install ssh

        echo "ssh インストールしました"
        # /etc/ssh/sshd_config バックアップ
        sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.org
else
        echo "ssh インストール済みです"

        # /etc/ssh/sshd_config.org がない場合の処理
        if [ ! -e /etc/ssh/sshd_config.org ]; then
                # /etc/ssh/sshd_config バックアップ
                sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.org
        fi
fi

# expect インストール
expect -v &> /dev/null
if [ $? -ne 0 ] ; then
	sudo apt -y install expect
        echo "expect インストールしました"
else
        echo "expect インストール済みです"
fi

# .ssh ディレクトリがなければ作成します
if [ ! -d .ssh ]; then
	mkdir .ssh
	chmod 700 .ssh/
	chown $USER:$USER .ssh
fi

# 既存の秘密鍵ファイルと公開鍵ファイルがあればバックアップを取ります
if [ -e .ssh/$GIT_SSH_NAME ]; then
	FILEDATE=`date +%Y-%m-%d_%H-%M-%S`
	FILENAME=$GIT_SSH_NAME"_"$FILEDATE

	mv .ssh/$GIT_SSH_NAME .ssh/$FILENAME.bak
        mv .ssh/$GIT_SSH_NAME.pub .ssh/$FILENAME.pub.bak

	echo "既存の "$GIT_SSH_NAME "を" $FILENAME".bak へ変えました"
        echo "既存の "$GIT_SSH_NAME".pub を" $FILENAME".pub.bak へ変えました"
fi

# 秘密鍵ファイルと公開鍵ファイル作成
# 対話自動入力
expect -c "
# A-------------
  spawn ssh-keygen -t ed25519 -f .ssh/$GIT_SSH_NAME -C "$GIT_USR_EMAL"
# B-------------
  expect \"(empty for no passphrase): \"
  send \"${SSH_PHRASE}\n\"
# C-------------
  expect \"Enter same passphrase again: \"
  send \"${SSH_PHRASE}\n\"
expect "

if [ -e .ssh/$GIT_SSH_NAME ]; then
        echo $GIT_SSH_NAME "作成しました"
        echo $GIT_SSH_NAME".pub 作成しました"
fi

# .ssh/config 内容作成
echo "Host "$GIT_HOST > git_config.txt
echo -e "\tHostName "$GIT_IP >> git_config.txt
echo -e "\tUser "$GIT_USR_NAME >> git_config.txt
echo -e "\tIdentityFile ~/.ssh/"$GIT_SSH_NAME >> git_config.txt

# .ssh/config 新規作成or追加
if [ -e .ssh/config ]; then
        # 既存.ssh/config バックアップ作成
	if [ ! -e .ssh/config.bak ]; then
		cp .ssh/config .ssh/config.bak
        	echo ".ssh/config.bak 作成しました"
	fi

	# 既存の.ssh/config とgit_config.txtが同一内容の場合
	# .ssh/config を書き換えません
        diff git_config.txt .ssh/config
        if [ ! $? -eq 0 ]; then
        	# .ssh/config へ.ssh/config 内容作成追加
       		cat .ssh/config.bak > .ssh/config
        	cat git_config.txt >> .ssh/config
		echo ".ssh/config へ" $GIT_HOST "を追加しました"
	else
		echo ".ssh/config 書き換えませんでした"
        fi
else
	# .ssh/config 新規作成
	mv git_config.txt .ssh/config
	echo ".ssh/config 新規作成しました"
fi

# .ssh ディレクトリ内のパーミッション設定
chmod 600 .ssh/*

# git global ユーザー名設定
git config --global user.name $GIT_USR_NAME
# git global メール設定
git config --global user.email "$GIT_USR_EMAL"

# git設定一覧表示
git config --list

# gitlab への登録情報表示
echo "--- gitlab.com のユーザー設定>SSH キーへコピーペーストしてください ---"
cat .ssh/$GIT_SSH_NAME.pub
echo "---------------------------------"

# 不要ファイル削除
if [ -e git_config.txt ]; then
	rm git_config.txt
fi

git --version
ssh -V
### 処理ここまで###
タイトルとURLをコピーしました