#!/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
### 処理ここまで###