gitをDebian11へインストールし、gitの簡易初期設定を行うスクリプトです。
sshでgit cloneやgit pushなどができる様になります。
gitリポジトリマネージャーは、LANに構築したgitlab-ceを想定しています。
スクリプト中の[環境に合わせた修正箇所ここから]から[環境に合わせた修正箇所ここまで]の値を、環境に合わせた値に修正してから実行してください。
このスクリプトを実行すると、以下のディレクトリ・ファイルが作成されます。
既存のファイルはバックアップされます。
.ssh/[秘密鍵ファイル 例:mygitlabce.com]
.ssh/[公開鍵ファイル 例:mygitlabce.com.pub]
.ssh/config
Host [external_url ‘https://xxxxx.xxx’ の https:// を除いた xxxxx.xxx 部分 例:mygitlabce.com]
HostName [gitlab-ceのIPアドレス 例:192.168.1.10]
User [gitlab-ce 登録ユーザー名 例:git05user]
Port [gitlab_rails['gitlab_shell_ssh_port'] の値
例:55555]
IdentityFile ~/.ssh/[秘密鍵ファイル 例:mygitlabce.com]
GIT_HOST は /etc/gitlab/gitlab.rb の external_url ‘https://xxxxx.xxx の https:// を除いた、LAN内で名前解決可能な xxxxx.xxx を入れないと Permission denied (publickey). が出力されてエラーとなります。
#!/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.sh
# を作成します。
# nano git_inst.sh
# 2.git_inst.sh を実行できるようにします。
# chmod +x git_inst.sh
# 3.git_inst.sh を実行します。
# ./git_inst.sh
# 4.gitlab のユーザー設定>SSH キーへコピーペーストしてください を行います
### 環境に合わせた修正箇所ここから ###
# gitlab-ce 登録ユーザー名
GIT_USR_NAME="git05user"
# gitlab-ce 登録ユーザーのメールアドレス
GIT_USR_EMAL="xxxxx@xxxx.com"
# 秘密鍵ファイル・公開鍵ファイル名
GIT_SSH_NAME="mygitlabce.com"
# 秘密鍵ファイル・公開鍵ファイルパスフレーズ ""で省略です
SSH_PHRASE=""
# gitlab-ce /etc/gitlab/gitlab.rb の external_url 'https://xxxxx.xxx の https:// を除いた xxxxx.xxx 部分
GIT_HOST="mygitlabce.com"
# gitlab-ce IPアドレス
GIT_IP="192.168.1.10"
# gitlab-ce /etc/gitlab/gitlab.rb の gitlab_rails['gitlab_shell_ssh_port'] の値
GIT_SSH_PT="55555"
### 環境に合わせた修正箇所ここまで ###
### 処理ここから###
cd
# 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 "\tPort "$GIT_SSH_PT >> 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 のユーザー設定>SSH キーへコピーペーストしてください ---"
cat .ssh/$GIT_SSH_NAME.pub
echo "---------------------------------"
# 不要ファイル削除
if [ -e git_config.txt ]; then
rm git_config.txt
fi
git --version
ssh -V
### 処理ここまで###