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

gitlab-ce Permission denied (publickey). Debian
gitlab-ce Permission denied (publickey).

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
### 処理ここまで###
タイトルとURLをコピーしました