概要
サーバー上に置いてあるシェルスクリプト群(例:/home/<USER>/shell)を、あとから Git 管理化 して、
- サーバー:実行環境
- GitHub:中央リポジトリ(バックアップ)
- ローカルPC(Windows):編集環境
という構成にしたときの手順メモ。
実際にやった流れに加えて、
- 一度試したが採用しなかった方法
- 代替案として取り得る方法
も合わせて残しておく。
※ユーザー名・サーバー名・GitHubアカウント名などは <USER> や <github-user> などのダミー表記にしている。
前提環境
- サーバー
- OS:Linux系
- SSH ログイン可能
- 対象ディレクトリ:
/home/<USER>/shell
- GitHub アカウント:
<github-user> - ローカルPC:Windows(Git for Windows + VSCode 利用)
- サーバー側にはすでに Git がインストール済み
1. サーバーディレクトリを Git 管理下に置く(実際にやった手順)
1-1. SSH ログイン&バックアップ作成
まずはサーバーへ SSH ログインして、対象ディレクトリのバックアップを取る。
ssh <USER>@<SERVER>
# 対象ディレクトリへ
cd /home/<USER>/shell
# 念のため丸ごとバックアップ
cp -a /home/<USER>/shell /home/<USER>/shell_backup_$(date +%Y%m%d)
1-2. Git リポジトリ初期化&初回コミット
cd /home/<USER>/shell
git init
git config user.name "<your-name>"
git config user.email "<your-email>"
ログや一時ファイルなど、Git管理したくないものがあれば .gitignore を作成しておく。
echo "*.log" >> .gitignore
# 他に除外したいファイルがあれば追加
すべてステージングしてコミット:
git add .
git commit -m "Initial commit: current shell scripts on server"
この時点で、サーバー上の /home/<USER>/shell がローカル Git リポジトリになった。
2. サーバーから GitHub に push する(最終的に採用した方法)
2-1. GitHub 側でリポジトリ作成
GitHub の Web 画面から新規リポジトリを作る:
- オーナー:
<github-user> - リポジトリ名:
server-shell-scripts(例) - README などは作らず空リポジトリでOK
2-2. リモートを SSH URL で登録
cd /home/<USER>/shell
git branch -M main
git remote add origin git@github.com:<github-user>/server-shell-scripts.git
2-3. サーバー側 SSH 鍵を ssh-agent に登録
サーバーにはすでに GitHub 用の SSH 秘密鍵 がある前提 (例:~/.ssh/id_ed25519_project。この公開鍵を GitHub の「SSH and GPG keys」に登録しておく)。
push 前に以下を実行:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519_project
これで、以降の GitHub への SSH 接続でこの鍵が使われる。
2-4. GitHub へ初回 push
cd /home/<USER>/shell
git push -u origin main
これで
- サーバー上の
/home/<USER>/shell - GitHub の
<github-user>/server-shell-scriptsリポジトリ
が同期された。
3. 一度試したが採用しなかった方法(パスワードによるHTTPS push)
最初はリモートURLを HTTPS にした状態で、以下のように push を試した。
git remote add origin https://github.com/<github-user>/server-shell-scripts.git
git push -u origin main
このとき、GitHub のログインパスワードを求められたため、ブラウザログインと同じパスワードを入力したところ、以下のようなエラーに。
Password authentication is not supported for Git operations.
Invalid username or token.
GitHub は Git 操作に対する 生パスワード認証を廃止 しており、 HTTPS を使う場合は Personal Access Token(PAT) が必須。
この段階では「サーバーからPATを使う運用」は採用しない方針にしたため、最終的には SSH方式に切り替え て解決した。
4. 代替手段として取り得る方法
4-1. 代替案A:サーバーから HTTPS + PAT で push する
サーバー側で SSH 鍵を使いたくない場合は、Personal Access Token(PAT) を使って HTTPS で push する方法もある。
ざっくり手順:
- GitHub の「Settings → Developer settings → Personal access tokens」でトークンを発行
- 少なくとも
repo権限を付与
- 少なくとも
- サーバー側でリモートURLを HTTPS に設定:
git remote set-url origin https://github.com/<github-user>/server-shell-scripts.git
git push実行時に- Username:GitHubユーザー名(
<github-user>) - Password:発行した PAT 文字列
- Username:GitHubユーザー名(
PAT は 漏洩させない/スクリプトに直書きしない、などの扱いが重要。
4-2. 代替案B:ローカルPC側も SSH で統一する
今回のケースでは、ローカルPCではすでに HTTPS + ブラウザ認証 + Windows 資格情報 が動いていたので、そのまま HTTPS で clone する運用にした。
必要であれば、ローカルPC側にも SSH 鍵を用意して GitHub に登録すれば、以下のように SSH で clone することも可能。
git clone git@github.com:<github-user>/server-shell-scripts.git
- メリット:サーバー・ローカルとも SSH に統一できる。
- デメリット:Windows 側の SSH 設定が少し増える。
5. ローカルPC(Windows)に clone する(実際に採用した方法)
5-1. 作業ディレクトリへ移動
例:
cd C:\work
5-2. HTTPS で clone
git clone https://github.com/<github-user>/server-shell-scripts.git
cd server-shell-scripts
このとき、過去に VSCode などから GitHub へログインしていたため、 Windows の「資格情報マネージャー」に git:https://github.com という資格情報が保存されており、 パスワード入力なしで clone が成功 した。
6. 最終的な運用フロー
6-1. ローカルPCで編集 → GitHub へ push
cd /path/to/server-shell-scripts
# シェルスクリプトを編集
git status
git add .
git commit -m "Update shell scripts"
git push origin main
6-2. サーバー側で最新状態に更新
ssh <USER>@<SERVER>
cd /home/<USER>/shell
# 必要に応じて ssh-agent に鍵を登録
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519_project
git pull origin main
これで、
- ローカルPC:編集・コミット・レビュー用
- GitHub:履歴管理&バックアップ
- サーバー:実行環境(
git pullで更新)
という形に整理できた。
7. 公開時に気をつけるポイント(自分用メモ)
実際にブログなどで公開する場合は、以下に注意する:
- 実際のサーバー名・IPアドレス
- SSH ログインユーザー名
- 実際のディレクトリ構造(深すぎるパス)
- GitHub アカウント名(気になる場合)
- SSH 秘密鍵のファイル名・置き場所・パスフレーズの有無
- PAT(Personal Access Token)の値や発行画面のスクリーンショット
など、セキュリティに関わる情報は書かない/ダミーに置き換える。
また、リポジトリ自体にも
- パスワード・APIキー・接続情報をコミットしない
.gitignoreでログファイルや一時ファイルを除外する
といった基本的な注意点も忘れないようにする。
以上、サーバー上のシェルディレクトリをあとから Git 管理にして、GitHub とローカルPCとで同期できるようにしたときの備忘録。

コメント